From e7314d9a60dcb95b4b255eaf8a591ba00c15eae5 Mon Sep 17 00:00:00 2001 From: Richard Treier Date: Mon, 24 Feb 2025 11:53:52 +0100 Subject: [PATCH] move code to sovity/edc-ce --- .browserslistrc | 17 - .dockerignore | 8 - .editorconfig | 17 - .env.local-dev | 11 - .github/ISSUE_TEMPLATE/bug_report.yaml | 62 - .github/ISSUE_TEMPLATE/config.yml | 1 - .github/ISSUE_TEMPLATE/documentation.md | 30 - .github/ISSUE_TEMPLATE/epic_template.md | 46 - .github/ISSUE_TEMPLATE/feature_request.md | 36 - .github/ISSUE_TEMPLATE/process.md | 24 - .github/ISSUE_TEMPLATE/release.md | 34 - .github/PULL_REQUEST_TEMPLATE.md | 10 - .github/workflows/add_issue_to_project.yml | 17 - .github/workflows/automerge.yml | 18 - .../workflows/build-and-release-image.yaml | 73 - .github/workflows/code_analysis.yml | 59 - .github/workflows/license_scan.yml | 45 - .github/workflows/secret_scan.yml | 29 - .github/workflows/security_scan.yml | 51 - .github/workflows/test_angular_project.yaml | 27 - .gitignore | 44 - .pre-commit-README.md | 28 - .pre-commit-config.yaml | 7 - .prettierignore | 11 - .secrets.baseline | 131 - .trivyignore | 3 - CHANGELOG.md | 1087 - CODE_OF_CONDUCT.md | 72 - CONTRIBUTING.md | 195 - LICENSE | 176 - NOTICE | 11 - README.md | 214 +- SECURITY.md | 37 - STYLEGUIDE.md | 10 - angular.json | 113 - config-generator.js | 55 - docker/99-generate-app-config.sh | 5 - docker/Dockerfile | 44 - docker/default.conf.template | 28 - docs/dev/changelog_updates.md | 67 - docs/screenshots/screenshot-assets.png | Bin 149643 -> 0 bytes docs/screenshots/screenshot-contracts.png | Bin 254116 -> 0 bytes docs/screenshots/screenshot-dashboard.png | Bin 324536 -> 0 bytes karma.conf.js | 41 - openapi/openapi.yaml | 1633 -- package-lock.json | 24477 ---------------- package.json | 76 - postcss.config.js | 8 - prettier.config.js | 42 - src/app/app-routing.module.ts | 36 - src/app/app.component.html | 12 - src/app/app.component.ts | 23 - src/app/app.module.ts | 60 - src/app/core/adapters/custom-date-adapter.ts | 23 - src/app/core/config/active-feature-set.ts | 20 - src/app/core/config/app-config-initializer.ts | 22 - .../core/config/app-config-injection-utils.ts | 19 - src/app/core/config/app-config-properties.ts | 68 - src/app/core/config/app-config.builder.ts | 46 - src/app/core/config/app-config.fetcher.ts | 82 - src/app/core/config/app-config.merger.ts | 91 - src/app/core/config/app-config.ts | 41 - .../config/profiles/edc-ui-color-theme.ts | 1 - .../core/config/profiles/edc-ui-feature.ts | 21 - .../config/profiles/edc-ui-profile-config.ts | 5 - .../config/profiles/edc-ui-profile-data.ts | 42 - .../core/config/profiles/edc-ui-profile.ts | 6 - .../core/config/profiles/edc-ui-route-set.ts | 4 - .../config/profiles/edc-ui-theme-config.ts | 9 - .../core/config/profiles/edc-ui-theme-data.ts | 15 - .../community-edition-features.ts | 5 - .../enterprise-edition-features.ts | 7 - .../profiles/feature-sets/mds-features.ts | 3 - .../profiles/get-profile-or-fallback.ts | 37 - .../profiles/infer-edc-ui-profile-type.ts | 13 - .../core/services/api/api-key.interceptor.ts | 31 - src/app/core/services/api/edc-api.service.ts | 250 - .../connector-fake-impl/asset-fake-service.ts | 138 - .../catalog-fake-service.ts | 62 - .../contract-agreement-fake-service.ts | 244 - .../contract-definition-fake-service.ts | 65 - .../contract-negotiation-fake-service.ts | 88 - .../contract-termination-fake-service.ts | 29 - .../dashboard-fake-service.ts | 38 - .../data-offer-fake-service.ts | 84 - .../connector-fake-impl/data/test-assets.ts | 227 - .../connector-fake-impl/data/test-policies.ts | 56 - .../connector-fake-impl/ee-fake-service.ts | 11 - .../policy-definition-fake-service.ts | 90 - .../transfer-history-fake-service.ts | 106 - .../api/fake-backend/edc-fake-backend.ts | 266 - .../api/fake-backend/utils/request-utils.ts | 20 - .../api/fake-backend/utils/response-utils.ts | 7 - .../api/fake-backend/utils/url-interceptor.ts | 65 - .../services/api/last-commit-info.service.ts | 30 - .../services/api/model/criterion-type-ext.ts | 7 - .../services/api/model/last-commit-info.ts | 6 - src/app/core/services/asset-builder.ts | 122 - .../asset-data-source-mapper-legacy.ts | 106 - .../core/services/asset-data-source-mapper.ts | 105 - .../services/asset-request-builder-legacy.ts | 97 - .../core/services/asset-request-builder.ts | 105 - .../services/asset-request-common-metadata.ts | 144 - src/app/core/services/asset.service.ts | 29 - src/app/core/services/chart-color.service.ts | 29 - ...nector-info-property-grid-group-builder.ts | 275 - .../core/services/connector-limits.service.ts | 31 - .../services/contract-definition-builder.ts | 38 - .../services/contract-negotiation.service.ts | 141 - src/app/core/services/data-address-mapper.ts | 23 - src/app/core/services/favicon.service.ts | 26 - src/app/core/services/html-sanitizer.ts | 19 - .../core/services/login-polling.service.ts | 38 - .../core/services/mailto-link-builder.spec.ts | 24 - src/app/core/services/mailto-link-builder.ts | 29 - src/app/core/services/markdown-converter.ts | 19 - .../core/services/models/asset-properties.ts | 5 - .../core/services/models/contract-offer.ts | 6 - .../models/data-address-properties.ts | 20 - src/app/core/services/models/data-offer.ts | 11 - src/app/core/services/models/fetched.ts | 199 - .../models/http-data-address-params.ts | 36 - src/app/core/services/models/multi-fetched.ts | 58 - .../core/services/models/nav-item-group.ts | 6 - src/app/core/services/models/nav-item.ts | 8 - .../core/services/models/ui-asset-mapped.ts | 35 - src/app/core/services/nav-items-builder.ts | 92 - src/app/core/services/notification.service.ts | 58 - src/app/core/services/page-title-strategy.ts | 42 - .../services/participant-id-localization.ts | 33 - src/app/core/services/query-params-mapper.ts | 43 - .../services/transfer-data-sink-mapper.ts | 121 - src/app/core/utils/angular-utils.ts | 35 - src/app/core/utils/array-utils.spec.ts | 13 - src/app/core/utils/array-utils.ts | 21 - src/app/core/utils/date-utils.ts | 70 - src/app/core/utils/form-group-utils.ts | 202 - src/app/core/utils/form-value-utils.ts | 29 - src/app/core/utils/i18n-utils.ts | 12 - src/app/core/utils/lazy-utils.ts | 21 - src/app/core/utils/local-storage-utils.ts | 36 - src/app/core/utils/local-stored-value.ts | 29 - src/app/core/utils/map-utils.ts | 31 - src/app/core/utils/mat-dialog-utils.ts | 28 - src/app/core/utils/object-utils.ts | 33 - src/app/core/utils/record-utils.ts | 39 - src/app/core/utils/rxjs-utils.ts | 24 - src/app/core/utils/search-utils.ts | 34 - src/app/core/utils/set-utils.ts | 3 - src/app/core/utils/string-utils.ts | 17 - src/app/core/utils/type-utils.ts | 13 - .../validators/data-offer-form-validators.ts | 58 - src/app/core/validators/json-validator.ts | 19 - .../no-whitespaces-or-colons-validator.ts | 8 - src/app/core/validators/url-validator.ts | 19 - .../valid-date-range-optional-end.ts | 22 - .../validators/valid-optional-date-range.ts | 16 - src/app/core/validators/valid-query-param.ts | 18 - .../core/validators/validation-messages.ts | 14 - .../asset-edit-page/asset-edit-page.module.ts | 20 - .../asset-edit-page.component.html | 15 - .../asset-edit-page.component.ts | 162 - .../asset-cards/asset-cards.component.html | 27 - .../asset-cards/asset-cards.component.ts | 25 - .../asset-create-dialog-data.ts | 5 - .../asset-create-dialog-mode.ts | 1 - .../asset-create-dialog-result.ts | 13 - .../asset-create-dialog.component.html | 1081 - .../asset-create-dialog.component.ts | 107 - .../asset-create-dialog.service.ts | 35 - .../assets-id-validator-builder.ts | 35 - .../form/asset-advanced-form-builder.ts | 55 - .../form/asset-create-dialog-form-mapper.ts | 60 - .../form/asset-create-dialog-form.ts | 166 - .../form/asset-datasource-form-builder.ts | 105 - .../form/asset-metadata-form-builder.ts | 88 - .../asset-create-dialog/form/http-methods.ts | 11 - .../form/model/asset-advanced-form-model.ts | 36 - .../model/asset-create-dialog-form-model.ts | 19 - .../asset-datasource-form-enabled-ctrls.ts | 48 - .../form/model/asset-datasource-form-model.ts | 47 - .../form/model/asset-metadata-form-model.ts | 23 - .../model/http-datasource-auth-header-type.ts | 1 - .../http-datasource-header-form-model.ts | 15 - .../http-datasource-query-param-form-model.ts | 15 - .../model/temporal-coverage-form-model.ts | 15 - .../asset-list-page/asset-list-page.module.ts | 31 - .../asset-list-page.component.html | 70 - .../asset-list-page.component.scss | 14 - .../asset-list-page.component.ts | 100 - ...browser-fetch-detail-dialog.component.html | 36 - ...g-browser-fetch-detail-dialog.component.ts | 82 - ...atalog-browser-fetch-detail-dialog.data.ts | 7 - .../catalog-browser-page.module.ts | 31 - .../catalog-api-url.service.ts | 61 - .../catalog-browser-page-service.ts | 104 - .../catalog-browser-page.component.html | 120 - .../catalog-browser-page.component.scss | 13 - .../catalog-browser-page.component.ts | 121 - .../catalog-browser-page.data.ts | 25 - .../data-offer-builder.ts | 61 - .../connector-ui-routing.module.ts | 86 - .../connector-ui/connector-ui.component.html | 84 - .../connector-ui/connector-ui.component.scss | 36 - .../connector-ui/connector-ui.component.ts | 55 - .../connector-ui/connector-ui.module.ts | 52 - .../contract-agreement-card-mapped.service.ts | 64 - .../contract-agreement-card-mapped.ts | 13 - .../contract-agreement-cards.component.html | 96 - .../contract-agreement-cards.component.ts | 29 - .../contract-agreement-page.module.ts | 30 - .../contract-agreement-page.component.html | 109 - .../contract-agreement-page.component.scss | 13 - .../contract-agreement-page.component.ts | 151 - .../contract-agreement-page.data.ts | 12 - .../contract-agreement-page.service.ts | 154 - ...tract-agreement-termination-dialog-data.ts | 6 - ...agreement-termination-dialog-form-model.ts | 15 - ...tract-agreement-termination-dialog-form.ts | 32 - ...act-agreement-termination-dialog-result.ts | 4 - ...greement-termination-dialog.component.html | 71 - ...-agreement-termination-dialog.component.ts | 88 - ...contract-agreement-transfer-dialog-data.ts | 6 - ...ct-agreement-transfer-dialog-form-model.ts | 50 - ...contract-agreement-transfer-dialog-form.ts | 147 - ...ntract-agreement-transfer-dialog-result.ts | 4 - ...t-agreement-transfer-dialog.component.html | 410 - ...act-agreement-transfer-dialog.component.ts | 167 - .../http-datasink-auth-header-type.ts | 1 - .../http-datasink-header-form-model.ts | 15 - .../asset-select/asset-select.component.html | 27 - .../asset-select/asset-select.component.ts | 38 - .../contract-definition-card-builder.ts | 126 - .../contract-definition-card.ts | 32 - .../contract-definition-cards.component.html | 76 - .../contract-definition-cards.component.ts | 111 - ...act-definition-editor-dialog-form-model.ts | 19 - .../contract-definition-editor-dialog-form.ts | 43 - ...ontract-definition-editor-dialog-result.ts | 6 - ...ct-definition-editor-dialog.component.html | 53 - ...ract-definition-editor-dialog.component.ts | 91 - .../contract-definition-page.module.ts | 32 - .../contract-definition-page.component.html | 76 - .../contract-definition-page.component.scss | 21 - .../contract-definition-page.component.ts | 59 - .../contract-definition-page.data.ts | 6 - .../contract-definition-page.service.ts | 83 - .../policy-select.component.html | 9 - .../policy-select/policy-select.component.ts | 33 - .../dashboard-donut-chart.component.html | 26 - .../dashboard-donut-chart.component.ts | 20 - .../dashboard-donut-chart/donut-chart-data.ts | 13 - .../dashboard-kpi-card.component.html | 32 - .../dashboard-kpi-card.component.ts | 38 - .../dashboard-page/dashboard-page.module.ts | 28 - .../dashboard-page-data.service.ts | 199 - .../dashboard-page/dashboard-page-data.ts | 35 - .../dashboard-page.component.html | 330 - .../dashboard-page.component.ts | 40 - .../logout-page/location-history-utils.ts | 39 - .../logout-page/logout-page.component.ts | 24 - .../logout-page/logout-page.module.ts | 15 - .../logout-page/previous-route-listener.ts | 28 - .../page-not-found-page.component.html | 9 - .../page-not-found-page.component.ts | 16 - .../page-not-found-page.module.ts | 15 - .../policy-definition-create-page.module.ts | 24 - ...olicy-definition-create-page-form-model.ts | 9 - .../policy-definition-create-page-form.ts | 41 - ...licy-definition-create-page.component.html | 40 - ...policy-definition-create-page.component.ts | 78 - .../policy-cards/policy-card-builder.ts | 29 - .../policy-cards/policy-card.ts | 18 - .../policy-cards/policy-cards.component.html | 23 - .../policy-cards/policy-cards.component.ts | 79 - .../policy-definition-page.module.ts | 23 - .../policy-definition-page.component.html | 69 - .../policy-definition-page.component.scss | 21 - .../policy-definition-page.component.ts | 78 - .../transfer-history-page.module.ts | 24 - .../transfer-history-page.component.html | 145 - .../transfer-history-page.component.scss | 46 - .../transfer-history-page.component.ts | 137 - .../asset-card-tag-list.component.html | 10 - .../asset-card-tag-list.component.ts | 12 - .../asset-detail-dialog-data.service.ts | 109 - .../asset-detail-dialog-data.ts | 25 - .../asset-detail-dialog-result.ts | 6 - .../asset-detail-dialog.component.html | 240 - .../asset-detail-dialog.component.scss | 4 - .../asset-detail-dialog.component.ts | 255 - .../asset-detail-dialog.service.ts | 29 - .../asset-property-grid-group-builder.ts | 475 - .../policy-property-field-builder.ts | 44 - .../conditions-for-use-dialog.component.html | 28 - .../conditions-for-use-dialog.component.ts | 14 - .../conditions-for-use-dialog.data.ts | 6 - .../conditions-for-use-dialog.service.ts | 28 - .../contract-offer-icon.component.ts | 51 - .../contract-offer-mini-list.component.html | 69 - .../contract-offer-mini-list.component.ts | 41 - .../data-offer-cards.component.html | 35 - .../data-offer-cards.component.ts | 34 - .../edit-asset-form-required-providers.ts | 17 - .../edit-asset-form.component.html | 996 - .../edit-asset-form.component.ts | 28 - .../form/asset-advanced-form-builder.ts | 55 - .../form/asset-datasource-form-builder.ts | 107 - .../form/asset-general-form-builder.ts | 101 - .../form/edit-asset-form-initializer.ts | 133 - .../form/edit-asset-form-validators.ts | 86 - .../edit-asset-form/form/edit-asset-form.ts | 186 - .../edit-asset-form/form/http-methods.ts | 11 - .../form/model/always-true-policy-id.ts | 1 - .../form/model/asset-advanced-form-model.ts | 32 - .../asset-datasource-form-enabled-ctrls.ts | 51 - .../form/model/asset-datasource-form-model.ts | 50 - .../form/model/asset-edit-dialog-mode.ts | 1 - .../form/model/asset-general-form-model.ts | 28 - .../form/model/data-address.ts | 4 - .../form/model/data-offer-publish-mode.ts | 4 - .../form/model/datasource-type.ts | 1 - .../form/model/edit-asset-form-model.ts | 28 - .../model/http-datasource-auth-header-type.ts | 1 - .../http-datasource-header-form-model.ts | 15 - .../http-datasource-query-param-form-model.ts | 15 - .../model/temporal-coverage-form-model.ts | 15 - ...otiation-confirm-tos-dialog.component.html | 26 - ...otiation-confirm-tos-dialog.component.scss | 0 ...egotiation-confirm-tos-dialog.component.ts | 30 - .../editor/expression-form-controls.ts | 92 - .../editor/expression-form-handler.ts | 146 - .../editor/expression-form-value.ts | 11 - .../policy-form-add-menu.component.html | 37 - .../policy-form-add-menu.component.ts | 65 - ...-form-expression-constraint.component.html | 48 - ...cy-form-expression-constraint.component.ts | 28 - ...olicy-form-expression-empty.component.html | 1 - .../policy-form-expression-empty.component.ts | 17 - ...olicy-form-expression-multi.component.html | 41 - .../policy-form-expression-multi.component.ts | 23 - .../policy-form-expression.component.html | 14 - .../policy-form-expression.component.ts | 21 - .../policy-form-remove-button.component.html | 3 - .../policy-form-remove-button.component.ts | 19 - .../editor/policy-form-required-providers.ts | 7 - .../policy-expression-recipe.service.ts | 41 - ...timespan-restriction-dialog.component.html | 46 - .../timespan-restriction-dialog.component.ts | 52 - .../timespan-restriction-expression.ts | 22 - .../model/policy-expression-mapped.ts | 17 - .../model/policy-form-adapter.ts | 148 - .../model/policy-jsonld-utils.ts | 38 - .../model/policy-left-expressions.ts | 4 - .../policy-editor/model/policy-mapper.ts | 89 - .../model/policy-multi-expressions.ts | 76 - .../policy-editor/model/policy-operators.ts | 108 - .../policy-editor/model/policy-verbs.ts | 89 - .../business/policy-editor/model/tree.ts | 162 - .../model/ui-policy-expression-utils.ts | 39 - .../policy-expression.component.html | 50 - .../policy-expression.component.ts | 16 - .../policy-renderer.component.html | 6 - .../policy-renderer.component.ts | 14 - .../transfer-history-mini-list.component.html | 49 - .../transfer-history-mini-list.component.ts | 16 - src/app/shared/common/ago/ago.component.ts | 18 - src/app/shared/common/ago/ago.pipe.ts | 22 - src/app/shared/common/ago/date-input.ts | 1 - src/app/shared/common/ago/formatDateAgo.ts | 21 - .../confirmation-dialog.component.html | 16 - .../confirmation-dialog.component.scss | 0 .../confirmation-dialog.component.ts | 87 - src/app/shared/common/date/date.component.ts | 12 - .../empty-state/empty-state.component.html | 3 - .../empty-state/empty-state.component.ts | 18 - .../error-state/error-state.component.html | 6 - .../error-state/error-state.component.ts | 17 - .../horizontal-section-divider.component.html | 7 - .../horizontal-section-divider.component.ts | 14 - .../shared/common/json-dialog/clean-json.ts | 12 - .../json-dialog/json-dialog.component.html | 58 - .../json-dialog/json-dialog.component.ts | 92 - .../common/json-dialog/json-dialog.data.ts | 17 - .../common/json-dialog/json-dialog.service.ts | 28 - .../language-selector.component.html | 25 - .../language-selector.component.ts | 37 - .../loading-state.component.html | 6 - .../loading-state/loading-state.component.ts | 13 - .../markdown-description.component.html | 46 - .../markdown-description.component.ts | 70 - .../property-grid-group.component.html | 15 - .../property-grid-group.component.ts | 19 - .../property-grid-group.ts | 6 - .../property-grid-field.service.ts | 35 - .../property-grid/property-grid-field.ts | 50 - .../property-grid.component.html | 77 - .../property-grid/property-grid.component.ts | 20 - .../translate-with-slot.component.html | 7 - .../translate-with-slot.component.ts | 54 - ...truncated-short-description.component.html | 1 - .../truncated-short-description.component.ts | 16 - .../url-list-dialog.component.html | 42 - .../url-list-dialog.component.ts | 14 - .../url-list-dialog/url-list-dialog.data.ts | 7 - .../url-list-dialog.service.ts | 28 - .../data-address-type-select-item.ts | 6 - .../data-address-type-select-items.ts | 37 - .../data-address-type-select-mode.ts | 1 - .../data-address-type-select.component.html | 9 - .../data-address-type-select.component.ts | 35 - .../data-address-type.ts | 6 - .../data-category-select-data.ts | 48 - .../data-category-select-item.service.ts | 34 - .../data-category-select-item.ts | 4 - .../data-category-select.component.html | 16 - .../data-category-select.component.ts | 18 - .../data-subcategory-items.pipe.ts | 17 - .../data-subcategory-select-data.ts | 189 - .../data-subcategory-select-item.service.ts | 44 - .../data-subcategory-select-item.ts | 5 - .../data-subcategory-select.component.html | 18 - .../data-subcategory-select.component.ts | 19 - ...rm-data-address-type-select.component.html | 9 - ...form-data-address-type-select.component.ts | 26 - .../edit-asset-form-group.component.html | 15 - .../edit-asset-form-group.component.ts | 10 - .../edit-asset-form-input.component.html | 53 - .../edit-asset-form-input.component.ts | 20 - .../edit-asset-form-label.component.html | 9 - .../edit-asset-form-label.component.ts | 16 - .../edit-asset-form-textarea.component.html | 19 - .../edit-asset-form-textarea.component.ts | 18 - .../keyword-select.component.html | 33 - .../keyword-select.component.ts | 34 - .../language-select/language-select-data.ts | 1299 - .../language-select-item.service.ts | 70 - .../language-select/language-select-item.ts | 7 - .../language-select.component.html | 18 - .../language-select.component.ts | 18 - .../participant-id-select.component.html | 29 - .../participant-id-select.component.ts | 38 - .../policy-operator-select.component.html | 11 - .../policy-operator-select.component.ts | 24 - .../transport-mode-select-data.ts | 23 - .../transport-mode-select-item.service.ts | 27 - .../transport-mode-select-item.ts | 4 - .../transport-mode-select.component.html | 12 - .../transport-mode-select.component.ts | 18 - .../autofocus.direcitive.ts | 16 - .../compare-by-field.pipe.ts | 11 - .../external-link.directive.ts | 14 - .../is-active-feature.pipe.ts | 15 - .../remove-class.directive.ts | 37 - .../track-by-field.directive.ts | 24 - .../pipes-and-directives/values.pipe.ts | 11 - src/app/shared/shared.module.ts | 287 - src/assets/config/.gitignore | 8 - src/assets/config/ui-build-date.txt | 1 - src/assets/config/version.txt | 3 - src/assets/fonts/Inter-Bold.woff2 | Bin 111040 -> 0 bytes src/assets/fonts/Inter-Light.woff2 | Bin 109992 -> 0 bytes src/assets/fonts/Inter-Medium.woff2 | Bin 111380 -> 0 bytes src/assets/fonts/Inter-Regular.woff2 | Bin 108488 -> 0 bytes src/assets/fonts/Inter-SemiBold.woff2 | Bin 111588 -> 0 bytes .../material-icons-v140-latin-regular.woff2 | Bin 128352 -> 0 bytes .../fonts/open-sans-v40-latin-regular.woff2 | Bin 18668 -> 0 bytes src/assets/i18n/de.json | 295 - src/assets/i18n/en.json | 480 - src/assets/images/flags/de.svg | 9 - src/assets/images/flags/en.svg | 61 - src/assets/images/mds_favicon.ico | Bin 32038 -> 0 bytes src/assets/images/mds_logo.svg | 1 - src/environments/edc-ui-environment.ts | 6 - src/environments/environment.prod.ts | 5 - src/environments/environment.ts | 19 - src/index.html | 12 - src/main.ts | 16 - src/polyfills.ts | 66 - src/styles.scss | 320 - src/tailwind.scss | 26 - src/test.ts | 29 - src/theme-colors.mds.scss | 88 - src/theme-colors.scss | 82 - src/theme-generated-variables.scss | 25 - src/theme.scss | 124 - src/types.d.ts | 2 - tailwind.config.js | 22 - tsconfig.app.json | 10 - tsconfig.json | 30 - tsconfig.spec.json | 10 - webpack.config.js | 22 - 492 files changed, 5 insertions(+), 53513 deletions(-) delete mode 100644 .browserslistrc delete mode 100644 .dockerignore delete mode 100644 .editorconfig delete mode 100644 .env.local-dev delete mode 100644 .github/ISSUE_TEMPLATE/bug_report.yaml delete mode 100644 .github/ISSUE_TEMPLATE/config.yml delete mode 100644 .github/ISSUE_TEMPLATE/documentation.md delete mode 100644 .github/ISSUE_TEMPLATE/epic_template.md delete mode 100644 .github/ISSUE_TEMPLATE/feature_request.md delete mode 100644 .github/ISSUE_TEMPLATE/process.md delete mode 100644 .github/ISSUE_TEMPLATE/release.md delete mode 100644 .github/PULL_REQUEST_TEMPLATE.md delete mode 100644 .github/workflows/add_issue_to_project.yml delete mode 100644 .github/workflows/automerge.yml delete mode 100644 .github/workflows/build-and-release-image.yaml delete mode 100644 .github/workflows/code_analysis.yml delete mode 100644 .github/workflows/license_scan.yml delete mode 100644 .github/workflows/secret_scan.yml delete mode 100644 .github/workflows/security_scan.yml delete mode 100644 .github/workflows/test_angular_project.yaml delete mode 100644 .gitignore delete mode 100644 .pre-commit-README.md delete mode 100644 .pre-commit-config.yaml delete mode 100644 .prettierignore delete mode 100644 .secrets.baseline delete mode 100644 .trivyignore delete mode 100644 CHANGELOG.md delete mode 100644 CODE_OF_CONDUCT.md delete mode 100644 CONTRIBUTING.md delete mode 100644 LICENSE delete mode 100644 NOTICE delete mode 100644 SECURITY.md delete mode 100644 STYLEGUIDE.md delete mode 100644 angular.json delete mode 100644 config-generator.js delete mode 100755 docker/99-generate-app-config.sh delete mode 100644 docker/Dockerfile delete mode 100644 docker/default.conf.template delete mode 100644 docs/dev/changelog_updates.md delete mode 100644 docs/screenshots/screenshot-assets.png delete mode 100644 docs/screenshots/screenshot-contracts.png delete mode 100644 docs/screenshots/screenshot-dashboard.png delete mode 100644 karma.conf.js delete mode 100644 openapi/openapi.yaml delete mode 100644 package-lock.json delete mode 100644 package.json delete mode 100644 postcss.config.js delete mode 100644 prettier.config.js delete mode 100644 src/app/app-routing.module.ts delete mode 100644 src/app/app.component.html delete mode 100644 src/app/app.component.ts delete mode 100644 src/app/app.module.ts delete mode 100644 src/app/core/adapters/custom-date-adapter.ts delete mode 100644 src/app/core/config/active-feature-set.ts delete mode 100644 src/app/core/config/app-config-initializer.ts delete mode 100644 src/app/core/config/app-config-injection-utils.ts delete mode 100644 src/app/core/config/app-config-properties.ts delete mode 100644 src/app/core/config/app-config.builder.ts delete mode 100644 src/app/core/config/app-config.fetcher.ts delete mode 100644 src/app/core/config/app-config.merger.ts delete mode 100644 src/app/core/config/app-config.ts delete mode 100644 src/app/core/config/profiles/edc-ui-color-theme.ts delete mode 100644 src/app/core/config/profiles/edc-ui-feature.ts delete mode 100644 src/app/core/config/profiles/edc-ui-profile-config.ts delete mode 100644 src/app/core/config/profiles/edc-ui-profile-data.ts delete mode 100644 src/app/core/config/profiles/edc-ui-profile.ts delete mode 100644 src/app/core/config/profiles/edc-ui-route-set.ts delete mode 100644 src/app/core/config/profiles/edc-ui-theme-config.ts delete mode 100644 src/app/core/config/profiles/edc-ui-theme-data.ts delete mode 100644 src/app/core/config/profiles/feature-sets/community-edition-features.ts delete mode 100644 src/app/core/config/profiles/feature-sets/enterprise-edition-features.ts delete mode 100644 src/app/core/config/profiles/feature-sets/mds-features.ts delete mode 100644 src/app/core/config/profiles/get-profile-or-fallback.ts delete mode 100644 src/app/core/config/profiles/infer-edc-ui-profile-type.ts delete mode 100644 src/app/core/services/api/api-key.interceptor.ts delete mode 100644 src/app/core/services/api/edc-api.service.ts delete mode 100644 src/app/core/services/api/fake-backend/connector-fake-impl/asset-fake-service.ts delete mode 100644 src/app/core/services/api/fake-backend/connector-fake-impl/catalog-fake-service.ts delete mode 100644 src/app/core/services/api/fake-backend/connector-fake-impl/contract-agreement-fake-service.ts delete mode 100644 src/app/core/services/api/fake-backend/connector-fake-impl/contract-definition-fake-service.ts delete mode 100644 src/app/core/services/api/fake-backend/connector-fake-impl/contract-negotiation-fake-service.ts delete mode 100644 src/app/core/services/api/fake-backend/connector-fake-impl/contract-termination-fake-service.ts delete mode 100644 src/app/core/services/api/fake-backend/connector-fake-impl/dashboard-fake-service.ts delete mode 100644 src/app/core/services/api/fake-backend/connector-fake-impl/data-offer-fake-service.ts delete mode 100644 src/app/core/services/api/fake-backend/connector-fake-impl/data/test-assets.ts delete mode 100644 src/app/core/services/api/fake-backend/connector-fake-impl/data/test-policies.ts delete mode 100644 src/app/core/services/api/fake-backend/connector-fake-impl/ee-fake-service.ts delete mode 100644 src/app/core/services/api/fake-backend/connector-fake-impl/policy-definition-fake-service.ts delete mode 100644 src/app/core/services/api/fake-backend/connector-fake-impl/transfer-history-fake-service.ts delete mode 100644 src/app/core/services/api/fake-backend/edc-fake-backend.ts delete mode 100644 src/app/core/services/api/fake-backend/utils/request-utils.ts delete mode 100644 src/app/core/services/api/fake-backend/utils/response-utils.ts delete mode 100644 src/app/core/services/api/fake-backend/utils/url-interceptor.ts delete mode 100644 src/app/core/services/api/last-commit-info.service.ts delete mode 100644 src/app/core/services/api/model/criterion-type-ext.ts delete mode 100644 src/app/core/services/api/model/last-commit-info.ts delete mode 100644 src/app/core/services/asset-builder.ts delete mode 100644 src/app/core/services/asset-data-source-mapper-legacy.ts delete mode 100644 src/app/core/services/asset-data-source-mapper.ts delete mode 100644 src/app/core/services/asset-request-builder-legacy.ts delete mode 100644 src/app/core/services/asset-request-builder.ts delete mode 100644 src/app/core/services/asset-request-common-metadata.ts delete mode 100644 src/app/core/services/asset.service.ts delete mode 100644 src/app/core/services/chart-color.service.ts delete mode 100644 src/app/core/services/connector-info-property-grid-group-builder.ts delete mode 100644 src/app/core/services/connector-limits.service.ts delete mode 100644 src/app/core/services/contract-definition-builder.ts delete mode 100644 src/app/core/services/contract-negotiation.service.ts delete mode 100644 src/app/core/services/data-address-mapper.ts delete mode 100644 src/app/core/services/favicon.service.ts delete mode 100644 src/app/core/services/html-sanitizer.ts delete mode 100644 src/app/core/services/login-polling.service.ts delete mode 100644 src/app/core/services/mailto-link-builder.spec.ts delete mode 100644 src/app/core/services/mailto-link-builder.ts delete mode 100644 src/app/core/services/markdown-converter.ts delete mode 100644 src/app/core/services/models/asset-properties.ts delete mode 100644 src/app/core/services/models/contract-offer.ts delete mode 100644 src/app/core/services/models/data-address-properties.ts delete mode 100644 src/app/core/services/models/data-offer.ts delete mode 100644 src/app/core/services/models/fetched.ts delete mode 100644 src/app/core/services/models/http-data-address-params.ts delete mode 100644 src/app/core/services/models/multi-fetched.ts delete mode 100644 src/app/core/services/models/nav-item-group.ts delete mode 100644 src/app/core/services/models/nav-item.ts delete mode 100644 src/app/core/services/models/ui-asset-mapped.ts delete mode 100644 src/app/core/services/nav-items-builder.ts delete mode 100644 src/app/core/services/notification.service.ts delete mode 100644 src/app/core/services/page-title-strategy.ts delete mode 100644 src/app/core/services/participant-id-localization.ts delete mode 100644 src/app/core/services/query-params-mapper.ts delete mode 100644 src/app/core/services/transfer-data-sink-mapper.ts delete mode 100644 src/app/core/utils/angular-utils.ts delete mode 100644 src/app/core/utils/array-utils.spec.ts delete mode 100644 src/app/core/utils/array-utils.ts delete mode 100644 src/app/core/utils/date-utils.ts delete mode 100644 src/app/core/utils/form-group-utils.ts delete mode 100644 src/app/core/utils/form-value-utils.ts delete mode 100644 src/app/core/utils/i18n-utils.ts delete mode 100644 src/app/core/utils/lazy-utils.ts delete mode 100644 src/app/core/utils/local-storage-utils.ts delete mode 100644 src/app/core/utils/local-stored-value.ts delete mode 100644 src/app/core/utils/map-utils.ts delete mode 100644 src/app/core/utils/mat-dialog-utils.ts delete mode 100644 src/app/core/utils/object-utils.ts delete mode 100644 src/app/core/utils/record-utils.ts delete mode 100644 src/app/core/utils/rxjs-utils.ts delete mode 100644 src/app/core/utils/search-utils.ts delete mode 100644 src/app/core/utils/set-utils.ts delete mode 100644 src/app/core/utils/string-utils.ts delete mode 100644 src/app/core/utils/type-utils.ts delete mode 100644 src/app/core/validators/data-offer-form-validators.ts delete mode 100644 src/app/core/validators/json-validator.ts delete mode 100644 src/app/core/validators/no-whitespaces-or-colons-validator.ts delete mode 100644 src/app/core/validators/url-validator.ts delete mode 100644 src/app/core/validators/valid-date-range-optional-end.ts delete mode 100644 src/app/core/validators/valid-optional-date-range.ts delete mode 100644 src/app/core/validators/valid-query-param.ts delete mode 100644 src/app/core/validators/validation-messages.ts delete mode 100644 src/app/routes/connector-ui/asset-edit-page/asset-edit-page.module.ts delete mode 100644 src/app/routes/connector-ui/asset-edit-page/asset-edit-page/asset-edit-page.component.html delete mode 100644 src/app/routes/connector-ui/asset-edit-page/asset-edit-page/asset-edit-page.component.ts delete mode 100644 src/app/routes/connector-ui/asset-list-page/asset-cards/asset-cards.component.html delete mode 100644 src/app/routes/connector-ui/asset-list-page/asset-cards/asset-cards.component.ts delete mode 100644 src/app/routes/connector-ui/asset-list-page/asset-create-dialog/asset-create-dialog-data.ts delete mode 100644 src/app/routes/connector-ui/asset-list-page/asset-create-dialog/asset-create-dialog-mode.ts delete mode 100644 src/app/routes/connector-ui/asset-list-page/asset-create-dialog/asset-create-dialog-result.ts delete mode 100644 src/app/routes/connector-ui/asset-list-page/asset-create-dialog/asset-create-dialog.component.html delete mode 100644 src/app/routes/connector-ui/asset-list-page/asset-create-dialog/asset-create-dialog.component.ts delete mode 100644 src/app/routes/connector-ui/asset-list-page/asset-create-dialog/asset-create-dialog.service.ts delete mode 100644 src/app/routes/connector-ui/asset-list-page/asset-create-dialog/assets-id-validator-builder.ts delete mode 100644 src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/asset-advanced-form-builder.ts delete mode 100644 src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/asset-create-dialog-form-mapper.ts delete mode 100644 src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/asset-create-dialog-form.ts delete mode 100644 src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/asset-datasource-form-builder.ts delete mode 100644 src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/asset-metadata-form-builder.ts delete mode 100644 src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/http-methods.ts delete mode 100644 src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/model/asset-advanced-form-model.ts delete mode 100644 src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/model/asset-create-dialog-form-model.ts delete mode 100644 src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/model/asset-datasource-form-enabled-ctrls.ts delete mode 100644 src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/model/asset-datasource-form-model.ts delete mode 100644 src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/model/asset-metadata-form-model.ts delete mode 100644 src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/model/http-datasource-auth-header-type.ts delete mode 100644 src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/model/http-datasource-header-form-model.ts delete mode 100644 src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/model/http-datasource-query-param-form-model.ts delete mode 100644 src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/model/temporal-coverage-form-model.ts delete mode 100644 src/app/routes/connector-ui/asset-list-page/asset-list-page.module.ts delete mode 100644 src/app/routes/connector-ui/asset-list-page/asset-list-page/asset-list-page.component.html delete mode 100644 src/app/routes/connector-ui/asset-list-page/asset-list-page/asset-list-page.component.scss delete mode 100644 src/app/routes/connector-ui/asset-list-page/asset-list-page/asset-list-page.component.ts delete mode 100644 src/app/routes/connector-ui/catalog-browser-page/catalog-browser-fetch-detail-dialog/catalog-browser-fetch-detail-dialog.component.html delete mode 100644 src/app/routes/connector-ui/catalog-browser-page/catalog-browser-fetch-detail-dialog/catalog-browser-fetch-detail-dialog.component.ts delete mode 100644 src/app/routes/connector-ui/catalog-browser-page/catalog-browser-fetch-detail-dialog/catalog-browser-fetch-detail-dialog.data.ts delete mode 100644 src/app/routes/connector-ui/catalog-browser-page/catalog-browser-page.module.ts delete mode 100644 src/app/routes/connector-ui/catalog-browser-page/catalog-browser-page/catalog-api-url.service.ts delete mode 100644 src/app/routes/connector-ui/catalog-browser-page/catalog-browser-page/catalog-browser-page-service.ts delete mode 100644 src/app/routes/connector-ui/catalog-browser-page/catalog-browser-page/catalog-browser-page.component.html delete mode 100644 src/app/routes/connector-ui/catalog-browser-page/catalog-browser-page/catalog-browser-page.component.scss delete mode 100644 src/app/routes/connector-ui/catalog-browser-page/catalog-browser-page/catalog-browser-page.component.ts delete mode 100644 src/app/routes/connector-ui/catalog-browser-page/catalog-browser-page/catalog-browser-page.data.ts delete mode 100644 src/app/routes/connector-ui/catalog-browser-page/catalog-browser-page/data-offer-builder.ts delete mode 100644 src/app/routes/connector-ui/connector-ui-routing.module.ts delete mode 100644 src/app/routes/connector-ui/connector-ui.component.html delete mode 100644 src/app/routes/connector-ui/connector-ui.component.scss delete mode 100644 src/app/routes/connector-ui/connector-ui.component.ts delete mode 100644 src/app/routes/connector-ui/connector-ui.module.ts delete mode 100644 src/app/routes/connector-ui/contract-agreement-page/contract-agreement-cards/contract-agreement-card-mapped.service.ts delete mode 100644 src/app/routes/connector-ui/contract-agreement-page/contract-agreement-cards/contract-agreement-card-mapped.ts delete mode 100644 src/app/routes/connector-ui/contract-agreement-page/contract-agreement-cards/contract-agreement-cards.component.html delete mode 100644 src/app/routes/connector-ui/contract-agreement-page/contract-agreement-cards/contract-agreement-cards.component.ts delete mode 100644 src/app/routes/connector-ui/contract-agreement-page/contract-agreement-page.module.ts delete mode 100644 src/app/routes/connector-ui/contract-agreement-page/contract-agreement-page/contract-agreement-page.component.html delete mode 100644 src/app/routes/connector-ui/contract-agreement-page/contract-agreement-page/contract-agreement-page.component.scss delete mode 100644 src/app/routes/connector-ui/contract-agreement-page/contract-agreement-page/contract-agreement-page.component.ts delete mode 100644 src/app/routes/connector-ui/contract-agreement-page/contract-agreement-page/contract-agreement-page.data.ts delete mode 100644 src/app/routes/connector-ui/contract-agreement-page/contract-agreement-page/contract-agreement-page.service.ts delete mode 100644 src/app/routes/connector-ui/contract-agreement-page/contract-agreement-termination-dialog/contract-agreement-termination-dialog-data.ts delete mode 100644 src/app/routes/connector-ui/contract-agreement-page/contract-agreement-termination-dialog/contract-agreement-termination-dialog-form-model.ts delete mode 100644 src/app/routes/connector-ui/contract-agreement-page/contract-agreement-termination-dialog/contract-agreement-termination-dialog-form.ts delete mode 100644 src/app/routes/connector-ui/contract-agreement-page/contract-agreement-termination-dialog/contract-agreement-termination-dialog-result.ts delete mode 100644 src/app/routes/connector-ui/contract-agreement-page/contract-agreement-termination-dialog/contract-agreement-termination-dialog.component.html delete mode 100644 src/app/routes/connector-ui/contract-agreement-page/contract-agreement-termination-dialog/contract-agreement-termination-dialog.component.ts delete mode 100644 src/app/routes/connector-ui/contract-agreement-page/contract-agreement-transfer-dialog/contract-agreement-transfer-dialog-data.ts delete mode 100644 src/app/routes/connector-ui/contract-agreement-page/contract-agreement-transfer-dialog/contract-agreement-transfer-dialog-form-model.ts delete mode 100644 src/app/routes/connector-ui/contract-agreement-page/contract-agreement-transfer-dialog/contract-agreement-transfer-dialog-form.ts delete mode 100644 src/app/routes/connector-ui/contract-agreement-page/contract-agreement-transfer-dialog/contract-agreement-transfer-dialog-result.ts delete mode 100644 src/app/routes/connector-ui/contract-agreement-page/contract-agreement-transfer-dialog/contract-agreement-transfer-dialog.component.html delete mode 100644 src/app/routes/connector-ui/contract-agreement-page/contract-agreement-transfer-dialog/contract-agreement-transfer-dialog.component.ts delete mode 100644 src/app/routes/connector-ui/contract-agreement-page/contract-agreement-transfer-dialog/http-datasink-auth-header-type.ts delete mode 100644 src/app/routes/connector-ui/contract-agreement-page/contract-agreement-transfer-dialog/http-datasink-header-form-model.ts delete mode 100644 src/app/routes/connector-ui/contract-definition-page/asset-select/asset-select.component.html delete mode 100644 src/app/routes/connector-ui/contract-definition-page/asset-select/asset-select.component.ts delete mode 100644 src/app/routes/connector-ui/contract-definition-page/contract-definition-cards/contract-definition-card-builder.ts delete mode 100644 src/app/routes/connector-ui/contract-definition-page/contract-definition-cards/contract-definition-card.ts delete mode 100644 src/app/routes/connector-ui/contract-definition-page/contract-definition-cards/contract-definition-cards.component.html delete mode 100644 src/app/routes/connector-ui/contract-definition-page/contract-definition-cards/contract-definition-cards.component.ts delete mode 100644 src/app/routes/connector-ui/contract-definition-page/contract-definition-editor-dialog/contract-definition-editor-dialog-form-model.ts delete mode 100644 src/app/routes/connector-ui/contract-definition-page/contract-definition-editor-dialog/contract-definition-editor-dialog-form.ts delete mode 100644 src/app/routes/connector-ui/contract-definition-page/contract-definition-editor-dialog/contract-definition-editor-dialog-result.ts delete mode 100644 src/app/routes/connector-ui/contract-definition-page/contract-definition-editor-dialog/contract-definition-editor-dialog.component.html delete mode 100644 src/app/routes/connector-ui/contract-definition-page/contract-definition-editor-dialog/contract-definition-editor-dialog.component.ts delete mode 100644 src/app/routes/connector-ui/contract-definition-page/contract-definition-page.module.ts delete mode 100644 src/app/routes/connector-ui/contract-definition-page/contract-definition-page/contract-definition-page.component.html delete mode 100644 src/app/routes/connector-ui/contract-definition-page/contract-definition-page/contract-definition-page.component.scss delete mode 100644 src/app/routes/connector-ui/contract-definition-page/contract-definition-page/contract-definition-page.component.ts delete mode 100644 src/app/routes/connector-ui/contract-definition-page/contract-definition-page/contract-definition-page.data.ts delete mode 100644 src/app/routes/connector-ui/contract-definition-page/contract-definition-page/contract-definition-page.service.ts delete mode 100644 src/app/routes/connector-ui/contract-definition-page/policy-select/policy-select.component.html delete mode 100644 src/app/routes/connector-ui/contract-definition-page/policy-select/policy-select.component.ts delete mode 100644 src/app/routes/connector-ui/dashboard-page/dashboard-donut-chart/dashboard-donut-chart.component.html delete mode 100644 src/app/routes/connector-ui/dashboard-page/dashboard-donut-chart/dashboard-donut-chart.component.ts delete mode 100644 src/app/routes/connector-ui/dashboard-page/dashboard-donut-chart/donut-chart-data.ts delete mode 100644 src/app/routes/connector-ui/dashboard-page/dashboard-kpi-card/dashboard-kpi-card.component.html delete mode 100644 src/app/routes/connector-ui/dashboard-page/dashboard-kpi-card/dashboard-kpi-card.component.ts delete mode 100644 src/app/routes/connector-ui/dashboard-page/dashboard-page.module.ts delete mode 100644 src/app/routes/connector-ui/dashboard-page/dashboard-page/dashboard-page-data.service.ts delete mode 100644 src/app/routes/connector-ui/dashboard-page/dashboard-page/dashboard-page-data.ts delete mode 100644 src/app/routes/connector-ui/dashboard-page/dashboard-page/dashboard-page.component.html delete mode 100644 src/app/routes/connector-ui/dashboard-page/dashboard-page/dashboard-page.component.ts delete mode 100644 src/app/routes/connector-ui/logout-page/location-history-utils.ts delete mode 100644 src/app/routes/connector-ui/logout-page/logout-page.component.ts delete mode 100644 src/app/routes/connector-ui/logout-page/logout-page.module.ts delete mode 100644 src/app/routes/connector-ui/logout-page/previous-route-listener.ts delete mode 100644 src/app/routes/connector-ui/page-not-found-page/page-not-found-page.component.html delete mode 100644 src/app/routes/connector-ui/page-not-found-page/page-not-found-page.component.ts delete mode 100644 src/app/routes/connector-ui/page-not-found-page/page-not-found-page.module.ts delete mode 100644 src/app/routes/connector-ui/policy-definition-create-page/policy-definition-create-page.module.ts delete mode 100644 src/app/routes/connector-ui/policy-definition-create-page/policy-definition-create-page/policy-definition-create-page-form-model.ts delete mode 100644 src/app/routes/connector-ui/policy-definition-create-page/policy-definition-create-page/policy-definition-create-page-form.ts delete mode 100644 src/app/routes/connector-ui/policy-definition-create-page/policy-definition-create-page/policy-definition-create-page.component.html delete mode 100644 src/app/routes/connector-ui/policy-definition-create-page/policy-definition-create-page/policy-definition-create-page.component.ts delete mode 100644 src/app/routes/connector-ui/policy-definition-page/policy-cards/policy-card-builder.ts delete mode 100644 src/app/routes/connector-ui/policy-definition-page/policy-cards/policy-card.ts delete mode 100644 src/app/routes/connector-ui/policy-definition-page/policy-cards/policy-cards.component.html delete mode 100644 src/app/routes/connector-ui/policy-definition-page/policy-cards/policy-cards.component.ts delete mode 100644 src/app/routes/connector-ui/policy-definition-page/policy-definition-page.module.ts delete mode 100644 src/app/routes/connector-ui/policy-definition-page/policy-definition-page/policy-definition-page.component.html delete mode 100644 src/app/routes/connector-ui/policy-definition-page/policy-definition-page/policy-definition-page.component.scss delete mode 100644 src/app/routes/connector-ui/policy-definition-page/policy-definition-page/policy-definition-page.component.ts delete mode 100644 src/app/routes/connector-ui/transfer-history-page/transfer-history-page.module.ts delete mode 100644 src/app/routes/connector-ui/transfer-history-page/transfer-history-page/transfer-history-page.component.html delete mode 100644 src/app/routes/connector-ui/transfer-history-page/transfer-history-page/transfer-history-page.component.scss delete mode 100644 src/app/routes/connector-ui/transfer-history-page/transfer-history-page/transfer-history-page.component.ts delete mode 100644 src/app/shared/business/asset-card-tag-list/asset-card-tag-list.component.html delete mode 100644 src/app/shared/business/asset-card-tag-list/asset-card-tag-list.component.ts delete mode 100644 src/app/shared/business/asset-detail-dialog/asset-detail-dialog-data.service.ts delete mode 100644 src/app/shared/business/asset-detail-dialog/asset-detail-dialog-data.ts delete mode 100644 src/app/shared/business/asset-detail-dialog/asset-detail-dialog-result.ts delete mode 100644 src/app/shared/business/asset-detail-dialog/asset-detail-dialog.component.html delete mode 100644 src/app/shared/business/asset-detail-dialog/asset-detail-dialog.component.scss delete mode 100644 src/app/shared/business/asset-detail-dialog/asset-detail-dialog.component.ts delete mode 100644 src/app/shared/business/asset-detail-dialog/asset-detail-dialog.service.ts delete mode 100644 src/app/shared/business/asset-detail-dialog/asset-property-grid-group-builder.ts delete mode 100644 src/app/shared/business/asset-detail-dialog/policy-property-field-builder.ts delete mode 100644 src/app/shared/business/conditions-for-use-dialog/conditions-for-use-dialog.component.html delete mode 100644 src/app/shared/business/conditions-for-use-dialog/conditions-for-use-dialog.component.ts delete mode 100644 src/app/shared/business/conditions-for-use-dialog/conditions-for-use-dialog.data.ts delete mode 100644 src/app/shared/business/conditions-for-use-dialog/conditions-for-use-dialog.service.ts delete mode 100644 src/app/shared/business/contract-offer-icon/contract-offer-icon.component.ts delete mode 100644 src/app/shared/business/contract-offer-mini-list/contract-offer-mini-list.component.html delete mode 100644 src/app/shared/business/contract-offer-mini-list/contract-offer-mini-list.component.ts delete mode 100644 src/app/shared/business/data-offer-cards/data-offer-cards.component.html delete mode 100644 src/app/shared/business/data-offer-cards/data-offer-cards.component.ts delete mode 100644 src/app/shared/business/edit-asset-form/edit-asset-form-required-providers.ts delete mode 100644 src/app/shared/business/edit-asset-form/edit-asset-form.component.html delete mode 100644 src/app/shared/business/edit-asset-form/edit-asset-form.component.ts delete mode 100644 src/app/shared/business/edit-asset-form/form/asset-advanced-form-builder.ts delete mode 100644 src/app/shared/business/edit-asset-form/form/asset-datasource-form-builder.ts delete mode 100644 src/app/shared/business/edit-asset-form/form/asset-general-form-builder.ts delete mode 100644 src/app/shared/business/edit-asset-form/form/edit-asset-form-initializer.ts delete mode 100644 src/app/shared/business/edit-asset-form/form/edit-asset-form-validators.ts delete mode 100644 src/app/shared/business/edit-asset-form/form/edit-asset-form.ts delete mode 100644 src/app/shared/business/edit-asset-form/form/http-methods.ts delete mode 100644 src/app/shared/business/edit-asset-form/form/model/always-true-policy-id.ts delete mode 100644 src/app/shared/business/edit-asset-form/form/model/asset-advanced-form-model.ts delete mode 100644 src/app/shared/business/edit-asset-form/form/model/asset-datasource-form-enabled-ctrls.ts delete mode 100644 src/app/shared/business/edit-asset-form/form/model/asset-datasource-form-model.ts delete mode 100644 src/app/shared/business/edit-asset-form/form/model/asset-edit-dialog-mode.ts delete mode 100644 src/app/shared/business/edit-asset-form/form/model/asset-general-form-model.ts delete mode 100644 src/app/shared/business/edit-asset-form/form/model/data-address.ts delete mode 100644 src/app/shared/business/edit-asset-form/form/model/data-offer-publish-mode.ts delete mode 100644 src/app/shared/business/edit-asset-form/form/model/datasource-type.ts delete mode 100644 src/app/shared/business/edit-asset-form/form/model/edit-asset-form-model.ts delete mode 100644 src/app/shared/business/edit-asset-form/form/model/http-datasource-auth-header-type.ts delete mode 100644 src/app/shared/business/edit-asset-form/form/model/http-datasource-header-form-model.ts delete mode 100644 src/app/shared/business/edit-asset-form/form/model/http-datasource-query-param-form-model.ts delete mode 100644 src/app/shared/business/edit-asset-form/form/model/temporal-coverage-form-model.ts delete mode 100644 src/app/shared/business/initiate-negotiation-confirm-tos-dialog/initiate-negotiation-confirm-tos-dialog.component.html delete mode 100644 src/app/shared/business/initiate-negotiation-confirm-tos-dialog/initiate-negotiation-confirm-tos-dialog.component.scss delete mode 100644 src/app/shared/business/initiate-negotiation-confirm-tos-dialog/initiate-negotiation-confirm-tos-dialog.component.ts delete mode 100644 src/app/shared/business/policy-editor/editor/expression-form-controls.ts delete mode 100644 src/app/shared/business/policy-editor/editor/expression-form-handler.ts delete mode 100644 src/app/shared/business/policy-editor/editor/expression-form-value.ts delete mode 100644 src/app/shared/business/policy-editor/editor/policy-form-add-menu/policy-form-add-menu.component.html delete mode 100644 src/app/shared/business/policy-editor/editor/policy-form-add-menu/policy-form-add-menu.component.ts delete mode 100644 src/app/shared/business/policy-editor/editor/policy-form-expression-constraint/policy-form-expression-constraint.component.html delete mode 100644 src/app/shared/business/policy-editor/editor/policy-form-expression-constraint/policy-form-expression-constraint.component.ts delete mode 100644 src/app/shared/business/policy-editor/editor/policy-form-expression-empty/policy-form-expression-empty.component.html delete mode 100644 src/app/shared/business/policy-editor/editor/policy-form-expression-empty/policy-form-expression-empty.component.ts delete mode 100644 src/app/shared/business/policy-editor/editor/policy-form-expression-multi/policy-form-expression-multi.component.html delete mode 100644 src/app/shared/business/policy-editor/editor/policy-form-expression-multi/policy-form-expression-multi.component.ts delete mode 100644 src/app/shared/business/policy-editor/editor/policy-form-expression/policy-form-expression.component.html delete mode 100644 src/app/shared/business/policy-editor/editor/policy-form-expression/policy-form-expression.component.ts delete mode 100644 src/app/shared/business/policy-editor/editor/policy-form-remove-button/policy-form-remove-button.component.html delete mode 100644 src/app/shared/business/policy-editor/editor/policy-form-remove-button/policy-form-remove-button.component.ts delete mode 100644 src/app/shared/business/policy-editor/editor/policy-form-required-providers.ts delete mode 100644 src/app/shared/business/policy-editor/editor/recipes/policy-expression-recipe.service.ts delete mode 100644 src/app/shared/business/policy-editor/editor/recipes/timespan-restriction-dialog/timespan-restriction-dialog.component.html delete mode 100644 src/app/shared/business/policy-editor/editor/recipes/timespan-restriction-dialog/timespan-restriction-dialog.component.ts delete mode 100644 src/app/shared/business/policy-editor/editor/recipes/timespan-restriction-dialog/timespan-restriction-expression.ts delete mode 100644 src/app/shared/business/policy-editor/model/policy-expression-mapped.ts delete mode 100644 src/app/shared/business/policy-editor/model/policy-form-adapter.ts delete mode 100644 src/app/shared/business/policy-editor/model/policy-jsonld-utils.ts delete mode 100644 src/app/shared/business/policy-editor/model/policy-left-expressions.ts delete mode 100644 src/app/shared/business/policy-editor/model/policy-mapper.ts delete mode 100644 src/app/shared/business/policy-editor/model/policy-multi-expressions.ts delete mode 100644 src/app/shared/business/policy-editor/model/policy-operators.ts delete mode 100644 src/app/shared/business/policy-editor/model/policy-verbs.ts delete mode 100644 src/app/shared/business/policy-editor/model/tree.ts delete mode 100644 src/app/shared/business/policy-editor/model/ui-policy-expression-utils.ts delete mode 100644 src/app/shared/business/policy-editor/renderer/policy-expression/policy-expression.component.html delete mode 100644 src/app/shared/business/policy-editor/renderer/policy-expression/policy-expression.component.ts delete mode 100644 src/app/shared/business/policy-editor/renderer/policy-renderer/policy-renderer.component.html delete mode 100644 src/app/shared/business/policy-editor/renderer/policy-renderer/policy-renderer.component.ts delete mode 100644 src/app/shared/business/transfer-history-mini-list/transfer-history-mini-list.component.html delete mode 100644 src/app/shared/business/transfer-history-mini-list/transfer-history-mini-list.component.ts delete mode 100644 src/app/shared/common/ago/ago.component.ts delete mode 100644 src/app/shared/common/ago/ago.pipe.ts delete mode 100644 src/app/shared/common/ago/date-input.ts delete mode 100644 src/app/shared/common/ago/formatDateAgo.ts delete mode 100644 src/app/shared/common/confirmation-dialog/confirmation-dialog.component.html delete mode 100644 src/app/shared/common/confirmation-dialog/confirmation-dialog.component.scss delete mode 100644 src/app/shared/common/confirmation-dialog/confirmation-dialog.component.ts delete mode 100644 src/app/shared/common/date/date.component.ts delete mode 100644 src/app/shared/common/empty-state/empty-state.component.html delete mode 100644 src/app/shared/common/empty-state/empty-state.component.ts delete mode 100644 src/app/shared/common/error-state/error-state.component.html delete mode 100644 src/app/shared/common/error-state/error-state.component.ts delete mode 100644 src/app/shared/common/horizontal-section-divider/horizontal-section-divider.component.html delete mode 100644 src/app/shared/common/horizontal-section-divider/horizontal-section-divider.component.ts delete mode 100644 src/app/shared/common/json-dialog/clean-json.ts delete mode 100644 src/app/shared/common/json-dialog/json-dialog.component.html delete mode 100644 src/app/shared/common/json-dialog/json-dialog.component.ts delete mode 100644 src/app/shared/common/json-dialog/json-dialog.data.ts delete mode 100644 src/app/shared/common/json-dialog/json-dialog.service.ts delete mode 100644 src/app/shared/common/language-selector/language-selector.component.html delete mode 100644 src/app/shared/common/language-selector/language-selector.component.ts delete mode 100644 src/app/shared/common/loading-state/loading-state.component.html delete mode 100644 src/app/shared/common/loading-state/loading-state.component.ts delete mode 100644 src/app/shared/common/markdown-description/markdown-description.component.html delete mode 100644 src/app/shared/common/markdown-description/markdown-description.component.ts delete mode 100644 src/app/shared/common/property-grid-group/property-grid-group.component.html delete mode 100644 src/app/shared/common/property-grid-group/property-grid-group.component.ts delete mode 100644 src/app/shared/common/property-grid-group/property-grid-group.ts delete mode 100644 src/app/shared/common/property-grid/property-grid-field.service.ts delete mode 100644 src/app/shared/common/property-grid/property-grid-field.ts delete mode 100644 src/app/shared/common/property-grid/property-grid.component.html delete mode 100644 src/app/shared/common/property-grid/property-grid.component.ts delete mode 100644 src/app/shared/common/translate-with-slot/translate-with-slot.component.html delete mode 100644 src/app/shared/common/translate-with-slot/translate-with-slot.component.ts delete mode 100644 src/app/shared/common/truncated-short-description/truncated-short-description.component.html delete mode 100644 src/app/shared/common/truncated-short-description/truncated-short-description.component.ts delete mode 100644 src/app/shared/common/url-list-dialog/url-list-dialog.component.html delete mode 100644 src/app/shared/common/url-list-dialog/url-list-dialog.component.ts delete mode 100644 src/app/shared/common/url-list-dialog/url-list-dialog.data.ts delete mode 100644 src/app/shared/common/url-list-dialog/url-list-dialog.service.ts delete mode 100644 src/app/shared/form-elements/data-address-type-select/data-address-type-select-item.ts delete mode 100644 src/app/shared/form-elements/data-address-type-select/data-address-type-select-items.ts delete mode 100644 src/app/shared/form-elements/data-address-type-select/data-address-type-select-mode.ts delete mode 100644 src/app/shared/form-elements/data-address-type-select/data-address-type-select.component.html delete mode 100644 src/app/shared/form-elements/data-address-type-select/data-address-type-select.component.ts delete mode 100644 src/app/shared/form-elements/data-address-type-select/data-address-type.ts delete mode 100644 src/app/shared/form-elements/data-category-select/data-category-select-data.ts delete mode 100644 src/app/shared/form-elements/data-category-select/data-category-select-item.service.ts delete mode 100644 src/app/shared/form-elements/data-category-select/data-category-select-item.ts delete mode 100644 src/app/shared/form-elements/data-category-select/data-category-select.component.html delete mode 100644 src/app/shared/form-elements/data-category-select/data-category-select.component.ts delete mode 100644 src/app/shared/form-elements/data-subcategory-select/data-subcategory-items.pipe.ts delete mode 100644 src/app/shared/form-elements/data-subcategory-select/data-subcategory-select-data.ts delete mode 100644 src/app/shared/form-elements/data-subcategory-select/data-subcategory-select-item.service.ts delete mode 100644 src/app/shared/form-elements/data-subcategory-select/data-subcategory-select-item.ts delete mode 100644 src/app/shared/form-elements/data-subcategory-select/data-subcategory-select.component.html delete mode 100644 src/app/shared/form-elements/data-subcategory-select/data-subcategory-select.component.ts delete mode 100644 src/app/shared/form-elements/edit-asset-form-data-address-type-select/edit-asset-form-data-address-type-select.component.html delete mode 100644 src/app/shared/form-elements/edit-asset-form-data-address-type-select/edit-asset-form-data-address-type-select.component.ts delete mode 100644 src/app/shared/form-elements/edit-asset-form-group/edit-asset-form-group.component.html delete mode 100644 src/app/shared/form-elements/edit-asset-form-group/edit-asset-form-group.component.ts delete mode 100644 src/app/shared/form-elements/edit-asset-form-input/edit-asset-form-input.component.html delete mode 100644 src/app/shared/form-elements/edit-asset-form-input/edit-asset-form-input.component.ts delete mode 100644 src/app/shared/form-elements/edit-asset-form-label/edit-asset-form-label.component.html delete mode 100644 src/app/shared/form-elements/edit-asset-form-label/edit-asset-form-label.component.ts delete mode 100644 src/app/shared/form-elements/edit-asset-form-textarea/edit-asset-form-textarea.component.html delete mode 100644 src/app/shared/form-elements/edit-asset-form-textarea/edit-asset-form-textarea.component.ts delete mode 100644 src/app/shared/form-elements/keyword-select/keyword-select.component.html delete mode 100644 src/app/shared/form-elements/keyword-select/keyword-select.component.ts delete mode 100644 src/app/shared/form-elements/language-select/language-select-data.ts delete mode 100644 src/app/shared/form-elements/language-select/language-select-item.service.ts delete mode 100644 src/app/shared/form-elements/language-select/language-select-item.ts delete mode 100644 src/app/shared/form-elements/language-select/language-select.component.html delete mode 100644 src/app/shared/form-elements/language-select/language-select.component.ts delete mode 100644 src/app/shared/form-elements/participant-id-select/participant-id-select.component.html delete mode 100644 src/app/shared/form-elements/participant-id-select/participant-id-select.component.ts delete mode 100644 src/app/shared/form-elements/policy-operator-select/policy-operator-select.component.html delete mode 100644 src/app/shared/form-elements/policy-operator-select/policy-operator-select.component.ts delete mode 100644 src/app/shared/form-elements/transport-mode-select/transport-mode-select-data.ts delete mode 100644 src/app/shared/form-elements/transport-mode-select/transport-mode-select-item.service.ts delete mode 100644 src/app/shared/form-elements/transport-mode-select/transport-mode-select-item.ts delete mode 100644 src/app/shared/form-elements/transport-mode-select/transport-mode-select.component.html delete mode 100644 src/app/shared/form-elements/transport-mode-select/transport-mode-select.component.ts delete mode 100644 src/app/shared/pipes-and-directives/autofocus.direcitive.ts delete mode 100644 src/app/shared/pipes-and-directives/compare-by-field.pipe.ts delete mode 100644 src/app/shared/pipes-and-directives/external-link.directive.ts delete mode 100644 src/app/shared/pipes-and-directives/is-active-feature.pipe.ts delete mode 100644 src/app/shared/pipes-and-directives/remove-class.directive.ts delete mode 100644 src/app/shared/pipes-and-directives/track-by-field.directive.ts delete mode 100644 src/app/shared/pipes-and-directives/values.pipe.ts delete mode 100644 src/app/shared/shared.module.ts delete mode 100644 src/assets/config/.gitignore delete mode 100644 src/assets/config/ui-build-date.txt delete mode 100644 src/assets/config/version.txt delete mode 100644 src/assets/fonts/Inter-Bold.woff2 delete mode 100644 src/assets/fonts/Inter-Light.woff2 delete mode 100644 src/assets/fonts/Inter-Medium.woff2 delete mode 100644 src/assets/fonts/Inter-Regular.woff2 delete mode 100644 src/assets/fonts/Inter-SemiBold.woff2 delete mode 100644 src/assets/fonts/material-icons-v140-latin-regular.woff2 delete mode 100644 src/assets/fonts/open-sans-v40-latin-regular.woff2 delete mode 100644 src/assets/i18n/de.json delete mode 100644 src/assets/i18n/en.json delete mode 100644 src/assets/images/flags/de.svg delete mode 100644 src/assets/images/flags/en.svg delete mode 100644 src/assets/images/mds_favicon.ico delete mode 100644 src/assets/images/mds_logo.svg delete mode 100644 src/environments/edc-ui-environment.ts delete mode 100644 src/environments/environment.prod.ts delete mode 100644 src/environments/environment.ts delete mode 100644 src/index.html delete mode 100644 src/main.ts delete mode 100644 src/polyfills.ts delete mode 100644 src/styles.scss delete mode 100644 src/tailwind.scss delete mode 100644 src/test.ts delete mode 100644 src/theme-colors.mds.scss delete mode 100644 src/theme-colors.scss delete mode 100644 src/theme-generated-variables.scss delete mode 100644 src/theme.scss delete mode 100644 src/types.d.ts delete mode 100644 tailwind.config.js delete mode 100644 tsconfig.app.json delete mode 100644 tsconfig.json delete mode 100644 tsconfig.spec.json delete mode 100644 webpack.config.js diff --git a/.browserslistrc b/.browserslistrc deleted file mode 100644 index 427441dc9..000000000 --- a/.browserslistrc +++ /dev/null @@ -1,17 +0,0 @@ -# This file is used by the build system to adjust CSS and JS output to support the specified browsers below. -# For additional information regarding the format and rule options, please see: -# https://github.com/browserslist/browserslist#queries - -# For the full list of supported browsers by the Angular framework, please see: -# https://angular.io/guide/browser-support - -# You can see what browsers were selected by your queries by running: -# npx browserslist - -last 1 Chrome version -last 1 Firefox version -last 2 Edge major versions -last 2 Safari major versions -last 2 iOS major versions -Firefox ESR -not IE 11 # Angular supports IE 11 only as an opt-in. To opt-in, remove the 'not' prefix on this line. diff --git a/.dockerignore b/.dockerignore deleted file mode 100644 index 12c789440..000000000 --- a/.dockerignore +++ /dev/null @@ -1,8 +0,0 @@ -.idea -.vscode -misc -openapi -tmp -node_modules -src/assets/config/*.json -.env* diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 2c2cc3650..000000000 --- a/.editorconfig +++ /dev/null @@ -1,17 +0,0 @@ -# Editor configuration, see https://editorconfig.org -root = true - -[*] -charset = utf-8 -indent_style = space -indent_size = 2 -insert_final_newline = true -trim_trailing_whitespace = true -end_of_line = lf - -[*.ts] -quote_type = single - -[*.md] -max_line_length = off -trim_trailing_whitespace = false diff --git a/.env.local-dev b/.env.local-dev deleted file mode 100644 index ccb1d67d5..000000000 --- a/.env.local-dev +++ /dev/null @@ -1,11 +0,0 @@ -# .env file configured for default npm run start commands -# see app-config-properties.ts for list of all configurable values -EDC_UI_ACTIVE_PROFILE=sovity-open-source - -EDC_UI_USE_FAKE_BACKEND=true -EDC_UI_MANAGEMENT_API_URL=http://edc.fake-backend -EDC_UI_MANAGEMENT_API_KEY=no-api-key-required-in-local-dev -EDC_UI_CATALOG_URLS=http://existing-other-connector/api/dsp,http://does-not-exist-but-is-super-long-so-we-can-test/api/dsp, http://how-wrapping-works-in-subtext-of-catalog-url-select/api/dsp -EDC_UI_LOGOUT_URL=https://example.com/logout -EDC_UI_CONNECTOR_ENDPOINT=http://localhost:3000/api/dsp -EDC_UI_MANAGEMENT_API_URL_SHOWN_IN_DASHBOARD=http://localhost:3000/api/control/management diff --git a/.github/ISSUE_TEMPLATE/bug_report.yaml b/.github/ISSUE_TEMPLATE/bug_report.yaml deleted file mode 100644 index 93c91f3fd..000000000 --- a/.github/ISSUE_TEMPLATE/bug_report.yaml +++ /dev/null @@ -1,62 +0,0 @@ -name: Bug Report Template -description: Report a bug to help us improve -labels: ["kind/bug"] -body: - - type: textarea - id: description - attributes: - label: Description - What happened? * - description: A clear and concise description of the bug. - placeholder: Tell us what you see! - validations: - required: true - - type: textarea - id: expected - attributes: - label: Expected Behavior * - description: A clear and concise description of what you expected to happen. - placeholder: Tell us what you expected! - validations: - required: true - - type: textarea - id: observed - attributes: - label: Observed Behavior * - description: A clear and concise description of what happened instead. - placeholder: Tell us what you observed! - validations: - required: true - - type: textarea - id: steps - attributes: - label: Steps to Reproduce - description: Steps to reproduce the behavior. - placeholder: Tell us how to reproduce the issue! - validations: - required: false - - type: textarea - id: context - attributes: - label: Context Information - description: Add any other context about the problem here. - validations: - required: false - - type: textarea - id: logs - attributes: - label: Relevant log output - description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks. - render: shell - validations: - required: false - - type: textarea - id: screenshots - attributes: - label: Screenshots - description: If applicable, add screenshots or other information to help explain your problem. - validations: - required: false - - type: markdown - attributes: - value: | - _* These fields are mandatory, without filling them it is not possible to create the issue._ diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml deleted file mode 100644 index 0086358db..000000000 --- a/.github/ISSUE_TEMPLATE/config.yml +++ /dev/null @@ -1 +0,0 @@ -blank_issues_enabled: true diff --git a/.github/ISSUE_TEMPLATE/documentation.md b/.github/ISSUE_TEMPLATE/documentation.md deleted file mode 100644 index 4ca8c166d..000000000 --- a/.github/ISSUE_TEMPLATE/documentation.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -name: Documentation Update Request -about: Create a report to help us improve our documentation -title: "" -labels: "task/documentation" -assignees: "" ---- - -# Documentation Update Request - -## Description - - -## Current Documentation - - -## Proposed Changes - - -## Justification - - -## Additional Context - - -## Deadline - - -## Notes - diff --git a/.github/ISSUE_TEMPLATE/epic_template.md b/.github/ISSUE_TEMPLATE/epic_template.md deleted file mode 100644 index 390a48995..000000000 --- a/.github/ISSUE_TEMPLATE/epic_template.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -name: Epic -about: Help us with new ideas -title: "" -labels: "kind/epic" -assignees: "" ---- - -# Epic - -## Description - - -### Requirements - - - -## Work Breakdown - - -```[tasklist] -### Stories -- [ ] Create Stories which can be converted into issues -``` - -### Security Constraints - -- [ ] Final solution design has been challenged for security related topics - -## Initiative / goal - - -### Hypothesis - - -## Acceptance criteria and must have scope - - -## Stakeholders - - -## Timeline - - -## Need for refinement - diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index 979aa2a5b..000000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -name: Feature Request -about: Help us with new features -title: "" -labels: "kind/enhancement" -assignees: "" ---- - -# Feature Request - -## Description - -- As a USER who PRECONDITIONS, I want to DO_THING, so I can ACCOMPLISH_GOAL. - -## Which Areas Would Be Affected? - - -## Why Is the Feature Desired? - - -## How does this tie into our current product? - - -## Stakeholders - - -## Solution Proposal and Work Breakdown - - -```[tasklist] -- [ ] Fix the GitHub Projects Labels, Sprint and other Metadata -- [ ] Refine a Solution Proposal / Work Breakdown -- [ ] (For Tech Team): Include acceptance criteria for the sub-tasks of the work breakdown -- [ ] Add security related tasks and checks -- [ ] Final solution design has been challenged for security related topics -``` diff --git a/.github/ISSUE_TEMPLATE/process.md b/.github/ISSUE_TEMPLATE/process.md deleted file mode 100644 index f49cf43b2..000000000 --- a/.github/ISSUE_TEMPLATE/process.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -name: Refine Process Request -about: Existing processes must be adapted or new ones created -title: "" -labels: ["task/refine-process","task/documentation"] -assignees: "" ---- - -# Process Refinement Request - -## Description - - -## Current State - - -## Proposed Changes - - -## Related Issues or PRs - - -## Additional Information - diff --git a/.github/ISSUE_TEMPLATE/release.md b/.github/ISSUE_TEMPLATE/release.md deleted file mode 100644 index 247365ad8..000000000 --- a/.github/ISSUE_TEMPLATE/release.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -name: Release -about: Create an issue to track a release process. -title: "Release x.y.z" -labels: ["task/release", "scope/ce"] -assignees: "" ---- - -# Release - -## Work Breakdown - -Feel free to edit this release checklist in-progress depending on what tasks need to be done: -- [ ] Decide a release version depending on major/minor/patch changes in the CHANGELOG.md. -- [ ] Update this issue's title to the new version -- [ ] `release-prep` PR: - - [ ] Update the CHANGELOG.md. - - [ ] Check that all the entries have a link to an issue or a pull request. - - [ ] Add a clean `Unreleased` version. - - [ ] Add the version to the old section. - - [ ] Add the current date to the old version. - - [ ] Reorder, reword or combine changelog entries from a product perspective for consistency. - - [ ] Check the [Dependabot Alerts](https://github.com/sovity/edc-ui/security/dependabot) for anything fixable pre-release. - - [ ] Write or review a `Deployment Migration Notes` section. - - [ ] Write or review a release summary. - - [ ] Remove empty sections from the patch notes. - - [ ] Review the Screenshots in the Readme and update them if necessary. - - [ ] Merge the `release-prep` PR. -- [ ] Wait for the main branch to be green. -- [ ] Create a release and re-use the changelog section as release description, and the version as title. -- [ ] Check if the pipeline built the release versions in the Actions-Section (or you won't see it). -- [ ] Revisit the changed list of tasks and compare it with [.github/ISSUE_TEMPLATE/release.md](https://github.com/sovity/edc-ui/blob/main/.github/ISSUE_TEMPLATE/release.md). Propose changes where it - makes sense. -- [ ] Close this issue. diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index de7153040..000000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,10 +0,0 @@ -_What issues does this PR close?_ - - -```[tasklist] -### Checklist -- [ ] The PR title is short and expressive. -- [ ] I have updated the CHANGELOG.md and linked the changes to their issues. See [changelog_update.md](https://github.com/sovity/authority-portal/blob/main/docs/dev/changelog_updates.md) for more information. -- [ ] I have updated the Deployment Migration Notes Section in the CHANGELOG.md for any configuration / external API changes. -- [ ] I have performed a **self-review** -``` diff --git a/.github/workflows/add_issue_to_project.yml b/.github/workflows/add_issue_to_project.yml deleted file mode 100644 index 655427ddb..000000000 --- a/.github/workflows/add_issue_to_project.yml +++ /dev/null @@ -1,17 +0,0 @@ -name: Add issue to project action - -on: - issues: - types: - - opened - -jobs: - add_issue_to_project: - if: "!(startsWith(github.event.issue.title, '[Zammad Ticket') && github.event.issue.user.login == 'sovitybot')" - name: add_issue_to_project - runs-on: ubuntu-latest - steps: - - uses: actions/add-to-project@v1.0.2 - with: - project-url: https://github.com/orgs/sovity/projects/9 - github-token: ${{ secrets.ADD_ISSUE_TO_PROJECT_PAT }} diff --git a/.github/workflows/automerge.yml b/.github/workflows/automerge.yml deleted file mode 100644 index f0357d2b5..000000000 --- a/.github/workflows/automerge.yml +++ /dev/null @@ -1,18 +0,0 @@ -name: auto-merge - -on: - pull_request: - -jobs: - automerge: - runs-on: ubuntu-latest - continue-on-error: true - permissions: - pull-requests: write - contents: write - steps: - - uses: fastify/github-action-merge-dependabot@v3 - continue-on-error: true - with: - target: patch - diff --git a/.github/workflows/build-and-release-image.yaml b/.github/workflows/build-and-release-image.yaml deleted file mode 100644 index 8e57acc14..000000000 --- a/.github/workflows/build-and-release-image.yaml +++ /dev/null @@ -1,73 +0,0 @@ -name: Build and Release Image - - -on: - workflow_dispatch: - inputs: - imageName: - description: 'Name of the image, that will be available as package' - required: true - type: string - push: - branches: - - main - tags: - - "*" - - -env: - # Use docker.io for Docker Hub if empty - REGISTRY: ghcr.io - # github.repository as / - IMAGE_NAME: edc-ui - IMAGE_NAME_BASE: ${{ github.repository_owner }} - - -jobs: - build: - runs-on: ubuntu-latest - permissions: - contents: read - packages: write - steps: - # Checkout code - - uses: actions/checkout@v3 - - - name: Log in to the Container registry (push-only) - uses: docker/login-action@v2 - with: - registry: ${{ env.REGISTRY }} - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Store last commit's author, message and SHA - run: | - echo "Saving local commit details in src/assets/config/version.txt" - git log -1 > src/assets/config/version.txt - echo "Saving build date to src/assets/config/ui-build-date.txt" - date --utc +%FT%TZ > src/assets/config/ui-build-date.txt - - - name: Extract metadata (tags, labels) for Docker - id: meta - uses: docker/metadata-action@v4 - with: - images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME_BASE }}/${{ env.IMAGE_NAME }} - labels: | - org.opencontainers.image.title=EDC-UI extended by sovity - org.opencontainers.image.description=EDC-UI for sovity's extended EDC-Connector. - tags: | - type=semver,pattern={{version}},enable=${{ startsWith(github.ref, 'refs/tags/') }} - type=raw,value=latest,enable={{is_default_branch}} - type=sha,enable={{is_default_branch}} - type=raw,value=${{ inputs.imageName }},enabled=${{ github.event_name == 'workflow_dispatch' }} - - - name: Build EDC-UI image - uses: docker/build-push-action@v4 - with: - file: docker/Dockerfile - context: . - build-args: | - EDC_UI_CONFIGURATION=production - push: true - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} diff --git a/.github/workflows/code_analysis.yml b/.github/workflows/code_analysis.yml deleted file mode 100644 index 0e9cab29b..000000000 --- a/.github/workflows/code_analysis.yml +++ /dev/null @@ -1,59 +0,0 @@ -name: Code Analysis - -on: - workflow_dispatch: - pull_request: - branches: [main] - paths-ignore: - - "**.md" - - "docs/**" - -jobs: - is_java_project: - runs-on: ubuntu-latest - outputs: - pom_exists: ${{ steps.check_files.outputs.files_exists }} - checkstyle_active: ${{ steps.check_checkstyle.outputs.checkstyle_active }} - spotbugs_active: ${{ steps.check_spotbugs.outputs.spotbugs_active }} - steps: - - name: Checkout code - uses: actions/checkout@v3 - - name: Check file existence - id: check_files - uses: andstor/file-existence-action@v2 - with: - files: "pom.xml" - - name: check_checkstyle - id: check_checkstyle - run: echo "checkstyle_active=$(if grep -q "maven-checkstyle-plugin" pom.xml; then echo "true"; else echo "false"; fi)" >> $GITHUB_OUTPUT - - name: check_spotbugs - id: check_spotbugs - run: echo "spotbugs_active=$(if grep -q "spotbugs-maven-plugin" pom.xml; then echo "true"; else echo "false"; fi)" >> $GITHUB_OUTPUT - run_checkstyle: - needs: [is_java_project] - if: needs.is_java_project.outputs.pom_exists == 'true' && needs.is_java_project.outputs.checkstyle_active == 'true' - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - name: Set up JDK ${{ matrix.java }} - uses: actions/setup-java@v3 - with: - distribution: "temurin" - java-version: "17" - cache: "maven" - - name: Run style checks - run: mvn -B checkstyle:check --file pom.xml - run_spotbugs: - needs: [is_java_project] - if: needs.is_java_project.outputs.pom_exists == 'true' && needs.is_java_project.outputs.spotbugs_active == 'true' - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - name: Set up JDK ${{ matrix.java }} - uses: actions/setup-java@v3 - with: - distribution: "temurin" - java-version: "17" - cache: "maven" - - name: Run static code analysis - run: mvn -B compile spotbugs:check --file pom.xml diff --git a/.github/workflows/license_scan.yml b/.github/workflows/license_scan.yml deleted file mode 100644 index 52e335bcc..000000000 --- a/.github/workflows/license_scan.yml +++ /dev/null @@ -1,45 +0,0 @@ -name: Trivy License Scan - -on: - push: - -jobs: - license_scan1: - name: License scan (rootfs) - runs-on: ubuntu-latest - timeout-minutes: 30 - steps: - - name: Checkout code - uses: actions/checkout@v3 - - - name: Run license scanner - uses: aquasecurity/trivy-action@0.26.0 - env: - #try default GitHub DBs, if failing, use AWS mirror instead (https://github.com/aquasecurity/trivy-action/issues/389) - TRIVY_DB_REPOSITORY: ghcr.io/aquasecurity/trivy-db,public.ecr.aws/aquasecurity/trivy-db - TRIVY_JAVA_DB_REPOSITORY: ghcr.io/aquasecurity/trivy-java-db,public.ecr.aws/aquasecurity/trivy-java-db - with: - scan-type: "rootfs" - scan-ref: "." - scanners: "license" - severity: "CRITICAL,HIGH" - exit-code: 1 - license_scan2: - name: License scan (repo) - runs-on: ubuntu-latest - timeout-minutes: 30 - steps: - - name: Checkout code - uses: actions/checkout@v3 - - name: Run license scanner - uses: aquasecurity/trivy-action@0.26.0 - env: - #try default GitHub DBs, if failing, use AWS mirror instead (https://github.com/aquasecurity/trivy-action/issues/389) - TRIVY_DB_REPOSITORY: ghcr.io/aquasecurity/trivy-db,public.ecr.aws/aquasecurity/trivy-db - TRIVY_JAVA_DB_REPOSITORY: ghcr.io/aquasecurity/trivy-java-db,public.ecr.aws/aquasecurity/trivy-java-db - with: - scan-type: "repo" - scan-ref: "." - scanners: "license" - severity: "CRITICAL,HIGH" - exit-code: 1 diff --git a/.github/workflows/secret_scan.yml b/.github/workflows/secret_scan.yml deleted file mode 100644 index b0eb00f02..000000000 --- a/.github/workflows/secret_scan.yml +++ /dev/null @@ -1,29 +0,0 @@ -name: Trivy Secret Scan - -on: - push: - -env: - REGISTRY: ghcr.io - IMAGE_NAME: ${{ github.repository }} - -jobs: - secret-scan: - name: secret_scan - runs-on: ubuntu-latest - strategy: - fail-fast: false - steps: - - name: Checkout code - uses: actions/checkout@v3 - - name: Run vulnerability scanner - uses: aquasecurity/trivy-action@0.26.0 - env: - #try default GitHub DBs, if failing, use AWS mirror instead (https://github.com/aquasecurity/trivy-action/issues/389) - TRIVY_DB_REPOSITORY: ghcr.io/aquasecurity/trivy-db,public.ecr.aws/aquasecurity/trivy-db - TRIVY_JAVA_DB_REPOSITORY: ghcr.io/aquasecurity/trivy-java-db,public.ecr.aws/aquasecurity/trivy-java-db - with: - scan-type: "fs" - exit-code: "1" - ignore-unfixed: true - scanners: secret diff --git a/.github/workflows/security_scan.yml b/.github/workflows/security_scan.yml deleted file mode 100644 index 703d1dcc5..000000000 --- a/.github/workflows/security_scan.yml +++ /dev/null @@ -1,51 +0,0 @@ -name: Trivy Security Scan - -on: - push: - workflow_dispatch: - -jobs: - security_scan_rootfs: - name: security_scan_rootfs - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v4 - - name: Run static analysis (rootfs) - uses: aquasecurity/trivy-action@0.26.0 - env: - #try default GitHub DBs, if failing, use AWS mirror instead (https://github.com/aquasecurity/trivy-action/issues/389) - TRIVY_DB_REPOSITORY: ghcr.io/aquasecurity/trivy-db,public.ecr.aws/aquasecurity/trivy-db - TRIVY_JAVA_DB_REPOSITORY: ghcr.io/aquasecurity/trivy-java-db,public.ecr.aws/aquasecurity/trivy-java-db - with: - scan-type: "rootfs" - scanners: "vuln,misconfig" - ignore-unfixed: true - format: "sarif" - output: "trivy-results-rootfs.sarif" - severity: "CRITICAL,HIGH" - security_scan_repo: - name: security_scan_repo - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v4 - - name: Run static analysis (repo) - uses: aquasecurity/trivy-action@0.26.0 - env: - #try default GitHub DBs, if failing, use AWS mirror instead (https://github.com/aquasecurity/trivy-action/issues/389) - TRIVY_DB_REPOSITORY: ghcr.io/aquasecurity/trivy-db,public.ecr.aws/aquasecurity/trivy-db - TRIVY_JAVA_DB_REPOSITORY: ghcr.io/aquasecurity/trivy-java-db,public.ecr.aws/aquasecurity/trivy-java-db - with: - scan-type: "repo" - scanners: "vuln,misconfig" - ignore-unfixed: true - format: "sarif" - output: "trivy-results-repo.sarif" - severity: "CRITICAL,HIGH" - - name: Upload Trivy scan results to GitHub Security tab (repo) - uses: github/codeql-action/upload-sarif@v2 - continue-on-error: true - with: - sarif_file: "trivy-results-repo.sarif" - category: "code" diff --git a/.github/workflows/test_angular_project.yaml b/.github/workflows/test_angular_project.yaml deleted file mode 100644 index 4e7bf1eaa..000000000 --- a/.github/workflows/test_angular_project.yaml +++ /dev/null @@ -1,27 +0,0 @@ -name: Angular GitHub CI -on: - push: - branches: - - '*' - -jobs: - ci: - timeout-minutes: 5 - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v3 - - - uses: actions/setup-node@v3 - with: - node-version: 16 - cache: 'npm' - cache-dependency-path: 'package-lock.json' - - - name: Install Dependencies - run: | - npm ci - - - name: Test - run: | - npm run test -- --browsers=ChromeHeadless --watch=false diff --git a/.gitignore b/.gitignore deleted file mode 100644 index a165f8f24..000000000 --- a/.gitignore +++ /dev/null @@ -1,44 +0,0 @@ -# See http://help.github.com/ignore-files/ for more about ignoring files. - -# compiled output -/dist -/tmp -/out-tsc -# Only exists if Bazel was run -/bazel-out - -# dependencies -/node_modules - -# profiling files -chrome-profiler-events*.json - -# IDEs and editors -/.idea -.project -.classpath -.c9/ -*.launch -.settings/ -*.sublime-workspace - -# IDE - VSCode -.vscode/* -.history/* - -# misc -/.sass-cache -/connect.lock -/coverage -*.log -/typings - -# System Files -.DS_Store -Thumbs.db - -.terraform* -.angular/ - -# ENV -.env diff --git a/.pre-commit-README.md b/.pre-commit-README.md deleted file mode 100644 index 3f10297fa..000000000 --- a/.pre-commit-README.md +++ /dev/null @@ -1,28 +0,0 @@ -# Pre-Commit-Hook - -The defined pre-commit-hook prevents committing passwords to the repository. In -case a password is detected git commit fails. - -## Install pre-commit - -1. Install pre-commit-hook tool `$ pip install pre-commit` -2. Install detect-secrets `$ pip install detect-secrets` - -## Enable secret-scanning pre-commit hook - -1. Update pre-commit-hook `$ pre-commit autoupdate` -2. Enable defined pre-commit-hook `$ pre-commit install` - -## On repository initialization of pre-commit hook with detect-secrets - -If no `.secrets.baseline` is present, simply generate it: - -1. `$ detect-secrets scan --disable-plugin KeywordDetector --disable-plugin AWSKeyDetector > .secrets.baseline` -2. Use Notepad++ or IntelliJ-Editor to convert `.secrets.baseline` to UTF-8 - -## Add false-positives or force adding secrets - -1. `$ detect-secrets scan --baseline .secrets.baseline` -2. If secrets are identified, add them to .secrets.baseline manually For more - details see: - https://github.com/Yelp/detect-secrets#adding-secrets-to-baseline diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml deleted file mode 100644 index 199a5c037..000000000 --- a/.pre-commit-config.yaml +++ /dev/null @@ -1,7 +0,0 @@ -repos: - - repo: https://github.com/Yelp/detect-secrets - rev: v1.4.0 - hooks: - - id: detect-secrets - args: ['--baseline', '.secrets.baseline'] - exclude: package.lock.json diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index 753d16651..000000000 --- a/.prettierignore +++ /dev/null @@ -1,11 +0,0 @@ -build -coverage -e2e -node_modules -.angular -.github -dist - -package-lock.json - -openapi diff --git a/.secrets.baseline b/.secrets.baseline deleted file mode 100644 index aadd87dde..000000000 --- a/.secrets.baseline +++ /dev/null @@ -1,131 +0,0 @@ -{ - "version": "1.4.0", - "plugins_used": [ - { - "name": "ArtifactoryDetector" - }, - { - "name": "AzureStorageKeyDetector" - }, - { - "name": "Base64HighEntropyString", - "limit": 4.5 - }, - { - "name": "BasicAuthDetector" - }, - { - "name": "CloudantDetector" - }, - { - "name": "DiscordBotTokenDetector" - }, - { - "name": "GitHubTokenDetector" - }, - { - "name": "HexHighEntropyString", - "limit": 3.0 - }, - { - "name": "IbmCloudIamDetector" - }, - { - "name": "IbmCosHmacDetector" - }, - { - "name": "JwtTokenDetector" - }, - { - "name": "MailchimpDetector" - }, - { - "name": "NpmDetector" - }, - { - "name": "PrivateKeyDetector" - }, - { - "name": "SendGridDetector" - }, - { - "name": "SlackDetector" - }, - { - "name": "SoftlayerDetector" - }, - { - "name": "SquareOAuthDetector" - }, - { - "name": "StripeDetector" - }, - { - "name": "TwilioKeyDetector" - } - ], - "filters_used": [ - { - "path": "detect_secrets.filters.allowlist.is_line_allowlisted" - }, - { - "path": "detect_secrets.filters.common.is_ignored_due_to_verification_policies", - "min_level": 2 - }, - { - "path": "detect_secrets.filters.heuristic.is_indirect_reference" - }, - { - "path": "detect_secrets.filters.heuristic.is_likely_id_string" - }, - { - "path": "detect_secrets.filters.heuristic.is_lock_file" - }, - { - "path": "detect_secrets.filters.heuristic.is_not_alphanumeric_string" - }, - { - "path": "detect_secrets.filters.heuristic.is_potential_uuid" - }, - { - "path": "detect_secrets.filters.heuristic.is_prefixed_with_dollar_sign" - }, - { - "path": "detect_secrets.filters.heuristic.is_sequential_string" - }, - { - "path": "detect_secrets.filters.heuristic.is_swagger_file" - }, - { - "path": "detect_secrets.filters.heuristic.is_templated_secret" - } - ], - "results": { - "terraform\\terraform.tfstate.backup": [ - { - "type": "Base64 High Entropy String", - "filename": "terraform\\terraform.tfstate.backup", - "hashed_secret": "d9382ccd310be3886186f889ecf94f3994eb9529", - "is_verified": false, - "line_number": 101 - }, - { - "type": "Base64 High Entropy String", - "filename": "terraform\\terraform.tfstate.backup", - "hashed_secret": "2803e1c27bcb762d1877c3c2b286a7aa1bd0d55c", - "is_verified": false, - "line_number": 118 - } - ], - "terraform\\terraform.tfvars": [ - { - "type": "Base64 High Entropy String", - "filename": "terraform\\terraform.tfvars", - "hashed_secret": "d9382ccd310be3886186f889ecf94f3994eb9529", - "is_verified": false, - "line_number": 1 - } - ] - }, - "generated_at": "2022-12-06T12:00:42Z" -} diff --git a/.trivyignore b/.trivyignore deleted file mode 100644 index 3b17b7880..000000000 --- a/.trivyignore +++ /dev/null @@ -1,3 +0,0 @@ -# This concerns the dev dependency @angular-devkit/build-angular. -# This dependency uses webpack-merge@5.8.0 that uses wildcard which uses minimist 1.2.0 (which is causing the error) -CVE-2021-44906 diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 2aac1e4ce..000000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,1087 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file - formatted -and maintained according to the rules documented on . - -This file will not cover changes about documentation, code clean-up, samples, or -the CI pipeline. With each version (respectively milestone), the core features -are highlighted. Relevant changes to existing implementations can be found in -the detailed section referring to by linking pull requests or issues. - -## [vx.x.x] - UNRELEASED - -### Overview - -### Detailed Changes - -#### Major - -#### Minor - -#### Patch - -### Deployment Migration Notes - -_No special deployment migration steps required_ - -## [v4.1.8] - 2024-12-13 - -### Overview - -MDS Patch release - -### Detailed Changes - -#### Patch - -- Fix wrong placeholders for On Request data offer type - ([#878](https://github.com/sovity/edc-ui/issues/878)) -- Rearrange Sidebar Navigation Groups - ([#836](https://github.com/sovity/edc-ui/issues/836)) - -### Deployment Migration Notes - -_No special deployment migration steps required_ - -## [v4.1.7] - 2024-10-21 - -### Overview - -Fixing a label in the asset creation dialog. - -### Detailed Changes - -#### Patch - -- Fix wrong label for description field on asset creation dialog - ([#870](https://github.com/sovity/edc-ui/issues/870)) - -### Deployment Migration Notes - -_No special deployment migration steps required_ - -## [v4.1.6] - 2024-10-07 - -### Overview - -MDS Patch release - -### Detailed Changes - -#### Patch - -- Fixed a button label stating "Method Parameterization" instead of "Path - Parameterization" ([#857](https://github.com/sovity/edc-ui/issues/857)) -- Made the Custom Http Method mandatory if the corresponding option is chosen - ([#739](https://github.com/sovity/edc-ui/issues/739)) -- Fixed inconsistent renaming of "Contract Definition" to "Data Offer" after - i18n ([#831](https://github.com/sovity/edc-ui/issues/831)) - -### Deployment Migration Notes - -_No special deployment migration steps required_ - -## [v4.1.5] - 2024-09-26 - -### Overview - -MDS Patch release - -### Detailed Changes - -#### Patch - -- Fixed the gaps in renaming "Contract Definition" to "Data Offer" - ([#831](https://github.com/sovity/edc-ui/issues/831)) -- Replaced hints with info boxes in On Request data source - ([#820](https://github.com/sovity/edc-ui/issues/820)) -- Fixed cropping of Contract Offer Ids on catalog browser page - ([#795](https://github.com/sovity/edc-ui/issues/795)) -- Used the `createDataOffer` endpoint to create an asset, policies and a - contract definition in a single call - ([#841](https://github.com/sovity/edc-ui/issues/841)) -- Fixed config not being applied properly after a version upgrade -- Fixed Date to DateTime conversion issues when using operators less than `LT` - and greater than `GT` ([#846](https://github.com/sovity/edc-ui/issues/846)) -- Added initial support for UI internationalization - ([#680](https://github.com/sovity/edc-ui/issues/680)) -- Implemented Data Offer wizard wording change request by MDS -- ([PR#850](https://github.com/sovity/edc-ui/pull/850)) - -### Deployment Migration Notes - -_No special deployment migration steps required_ - -## [v4.1.4] - 2024-09-17 - -### Overview - -MDS Patch release - -### Detailed Changes - -Various bugfixes. - -#### Patch - -- Changed wording on the data offer creation page - ([#817](https://github.com/sovity/edc-ui/issues/795)) -- Data Offer details now display the contract ID for each contract offer - ([#795](https://github.com/sovity/edc-ui/issues/795)) -- Warn the user when using an invalid Policy Id - ([#746](https://github.com/sovity/edc-ui/issues/746)) -- Warn the user when using an invalid Data Offer Id - ([#745](https://github.com/sovity/edc-ui/issues/745)) -- Fixed time restriction upper bound "local day to datetime" conversion issues - ([#815](https://github.com/sovity/edc-ui/issues/815)) - -### Deployment Migration Notes - -_No special deployment migration steps required_ - -## [v4.1.3] - 2024-09-03 - -### Overview - -Bug fixes - -#### Patch - -- Check the contract limits before negotiating a new one. -- Changed the title of Contract Definitions to Data Offers. -- Enhanced EDC UI terminologies for the Create Data Offer tab. -- Date and time display fixes, unified date format. - -## [v4.1.2] - 2024-08-20 - -### Overview - -Bug fixes - -### Detailed Changes - -#### Patch - -- Added description for fields in asset creation mask -- Added description for fields in Create Data Offer page -- Added proper handling of custom JSON properties in edit asset process - -## [v4.1.1] - 2024-08-09 - -### Overview - -MDS 2.2 patch release - -### Detailed Changes - -Various UI improvements and bug fixing - -#### Patch - -- Copyable contact email and subject fields on asset and data offer detail - dialogs -- Assets Page search input field is now case-insensitive -- Markdown support for Reference files description, Conditions for use fields -- Fixed wrong date format when creating a new data offer -- Temporarily re-implemented the Create Asset Dialog -- Performance improvement when fetching a single contract agreement - -## [v4.1.0] - 2024-07-24 - -### Overview - -MDS 2.2 release - -### Detailed Changes - -#### Minor - -- Reworked data offer creation page for easier data sharing -- Complex policies using AND, OR and XONE -- Both providers and consumers can now terminate contracts -- Contracts can be filtered by their termination status -- Adjusted data offer card/detail dialog UI to differentiate live and on request - assets - -#### Patch - -- Fixed an issue that caused the auth information to get lost during asset - creation. - -### Deployment Migration Notes - -_No special deployment migration steps required_ - -## [v4.0.0] - 2024-07-15 - -### Overview - -Broker UI removal refactoring, ToS dialog. - -### Detailed Changes - -#### Major - -- Removed the Broker UI, as it has been moved into the Authority Portal. - -#### Minor - -- Added Initiate Negotiation Confirm ToS Dialog -- Support for creating "On Request" Data Offers - -### Deployment Migration Notes - -- Connector UI: - - _No special deployment migration steps required_ -- Broker UI: - - Can be undeployed, the Broker no longer exists as a stand-alone component. - -## [v3.2.2] - 2024-04-20 - -### Overview - -MDS Bufix Release - -### Detailed Changes - -#### Patch - -- Connector UI & Broker UI: Fixed an issue causing pages using asset cards to - crash if object custom properties were used. -- Removed HTTP Option "HEAD" as it is not supported by the backend. - -### Deployment Migration Notes - -_No special deployment migration steps required_ - -## [v3.2.1] - 2024-04-18 - -### Overview - -NGINX Config Fix - -### Detailed Changes - -#### Patch - -- Revert NGINX header changes because they disallow E2E testing of edc-ce - -### Deployment Migration Notes - -_No special deployment migration steps required_ - -## [v3.2.0] - 2024-04-18 - -MDS Bufix Release - -### Overview - -### Detailed Changes - -#### Minor - -- Security headers added to NGINX Docker Image - -#### Patch - -- Fix `nutsLocations` field - -### Deployment Migration Notes - -_No special deployment migration steps required_ - -## [v3.1.0] - 2024-04-11 - -### Overview - -Small improvements for Connector and Broker UI - -### Detailed Changes - -#### Minor - -- Management API URL now displayed on the dashboard page - -#### Patch - -- Broker UI: "Name" column renamed to "Title" -- Fix status icon for data offers - -### Deployment Migration Notes - -- New **optional** environment variable: - - `EDC_UI_MANAGEMENT_API_URL_SHOWN_IN_DASHBOARD` as override for shown - Management API URL on the dashboard - -## [v3.0.0] - 2024-03-22 - -### Overview - -Bugfixes and improvement of Broker UI integration with AP - -### Detailed Changes - -#### Major - -- Broker UI: Catalog page no longer supports query parameter `connectorEndpoint` - to filter connectors -- Broker UI: Catalog page now supports query parameter `mdsId` to filter - connectors - -#### Patch - -- Fixed an asset select issue caused by a bad compare function -- Asset: Fix double encoding of query params by disallowing '&' and '=' chars in - form field and sending them unencoded -- Fixed an issue that prevented custom headers from being included in HTTP Data - Transfers -- Fix `Content-Type` header being ignored by backend for transfers -- Fixed Method Parameterization always showing "GET", added unselected option. - -### Deployment Migration Notes - -_No special deployment migration steps required_ - -## [v2.5.0] - 2024-02-28 - -### Overview - -Enable better integration of Broker UI and Authority Portal - -### Detailed Changes - -#### Minor - -- Broker UI: Added query params for the connector endpoints filter - -### Deployment Migration Notes - -_No special deployment migration steps required_ - -## [v2.4.0] 2024-02-14 - -### Overview - -MDS feature and bugfix release for Connector UI and Broker UI - -### Detailed Changes - -#### Minor - -- Added new MDS fields to assets - -#### Patch - -- Ensured GDPR compliance of Fonts usage -- Fixed auth proxy issues - -### Deployment Migration Notes - -_No special deployment migration steps required_ - -## [v2.3.1] 2024-01-18 - -### Overview - -Bugfix release for minor UI bugs - -### Detailed Changes - -#### Patch - -- Fixed "No Description" only showing sometimes in cards. - -### Deployment Migration Notes - -_No special deployment migration steps required_ - -## [v2.3.0] 2024-01-17 - -### Overview - -MDS feature release for Connector UI and Broker UI - -### Detailed Changes - -#### Minor - -- Asset descriptions now support Markdown -- Asset metadata is now editable -- Negotiate button is no longer shown for own connector endpoints -- Broker: Catalog now supports list view -- Broker: Connectors page now shows organization names and connector IDs - -#### Patch - -- Improved handling of asset keywords in cards -- EE: Fixed issues around logout page - -### Deployment Migration Notes - -_No special deployment migration steps required_ - -## [v2.2.0] 05.12.2023 - -### Overview - -Aligned Participant ID / Connector ID and Connector Restricted Policy. - -### Detailed Changes - -#### Minor - -- MDS Connector UI: Renamed Participant IDs to MDS Connector IDs -- Connector Restricted Policy now supports entry of multiple connectors. -- New Transfer History Page Column: Participant ID / Connector ID - -### Deployment Migration Notes - -_No special deployment migration steps required_ - -## [v2.1.0] 17.11.2023 - -### Overview - -Broker UI EDC 0 Upgrade and some Connector UI bugfixes. - -### Detailed Changes - -#### Minor - -- New optional marketing banner for MDS Basic Enterprise Edition Connectors. -- Finalize Migrate Broker UI to EDC 0 - -#### Patch - -- Improved visibility of buttons in "Create New Asset" and "Initiate Transfer" - Dialogs -- Broker Server API now also has a type-safe fake backend. -- Fix Data Category not being set correctly when creating assets. - -### Deployment Migration Notes - -- Enterprise Edition only, MDS variants only: New optional config variable - `EDC_UI_SHOW_EE_BASIC_MARKETING=true`. Default `false` - -## [v2.0.0] 10.10.2023 - -### Overview - -EDC 0 compatible version (Connector UI only). - -### Detailed Changes - -#### Major - -- Switched to semantic versioning -- Migrated transfer history page to the api wrapper -- Migrated contract definition page to the api wrapper -- Migrated policy definition page to the api wrapper -- Migrated asset page to the api wrapper -- Migrated dashboard page to the api wrapper -- The Docker Container now uses the port `8080` instead of ~~`80`~~. - -#### Minor - -- Added custom 404 pages to connector and broker ui -- New Asset Property "Participant ID" - -#### Patch - -- Fixed HTTP Parameterization Hints not showing in Asset Details. -- Removed 404-causing login polling from broker UI -- Renamed button from cancel to close in json-dialogs -- Broker: Fixed popularity not logged when clicking on a data offer -- Broker: Fixed missing name in legal notice - -### Deployment Migration Notes - -- The Docker Container now uses the port `8080` instead of ~~`80`~~. -- The following ENV Vars were changed: - - ~~`EDC_UI_DATA_MANAGEMENT_API_URL`~~ became `EDC_UI_MANAGEMENT_API_URL` - - ~~`EDC_UI_DATA_MANAGEMENT_API_KEY`~~ became `EDC_UI_MANAGEMENT_API_KEY` -- The following ENV Vars were removed and should not be specified anymore: - - `EDC_UI_CONNECTOR_ID` - - `EDC_UI_CONNECTOR_NAME` - - `EDC_UI_CURATOR_ORGANIZATION_NAME` - - `EDC_UI_CURATOR_URL` - - `EDC_UI_DAPS_OAUTH_JWKS_URL` - - `EDC_UI_DAPS_OAUTH_TOKEN_URL` - - `EDC_UI_IDS_DESCRIPTION` - - `EDC_UI_IDS_ID` - - `EDC_UI_IDS_TITLE` - - `EDC_UI_MAINTAINER_ORGANIZATION_NAME` - - `EDC_UI_MAINTAINER_URL` - - `EDC_UI_ASSET_PROP_ORIGINATOR_ORGANIZATION` - - `EDC_UI_ASSET_PROP_ORIGINATOR` -- New **optional** ENV Vars: - - `NGINX_ACCESS_LOG`, default: `/dev/stdout` - - `NGINX_ERROR_LOG`, default: `/dev/stderr` - -## [v0.0.1-milestone-8-sovity12] 12.07.2023 - -### Overview - -Broker Server Feature + Bugfix Release - -### Detailed Changes - -#### Added - -- Broker Server: Connector Online Status is now visualized. - -#### Fixed - -- Fixed Policies not being displayed properly. - -## [v0.0.1-milestone-8-sovity11] 07.07.2023 - -### Overview - -Bugfix Release - -### Detailed Changes - -#### Fixed - -- Fixed a bug causing http parameterization not being accessible due to asset - properties not being persisted on the consumer side. - -## [v0.0.1-milestone-8-sovity10] 07.07.2023 - -### Overview - -Bugfix Release - -### Detailed Changes - -#### Fixed - -- Fixed a bug causing data address dtos to be built wrongly. - -## [v0.0.1-milestone-8-sovity9] 04.07.2023 - -### Overview - -Full support for parameterized HTTP Data Sources, some Basic EE features. - -### Detailed Changes - -#### Added - -- Parameterization of Http Data Sources. -- Enteprise Edition (Basic): Added support for consuming contract agreement - limits. - -## [v0.0.1-milestone-8-sovity8] 23.06.2023 - -### Overview - -Bugfix release. - -### Detailed Changes - -#### Fixed - -- Broker UI: Fixed sorting not applied. - -## [v0.0.1-milestone-8-sovity7] 23.06.2023 - -### Overview - -Build dates, open-ended date intervals, Broker UI MvP features. - -### Detailed Changes - -#### Added - -- Added Connector Build date and Commit Information to Additional Properties - section in Dashboard -- Added Open-Ended Date Option to Time-Period-Restricted Policies -- Broker UI: Added sorting, filtering and pagination to catalog page. -- Broker UI: Added legal notice page. - -## [v0.0.1-milestone-8-sovity6] 06.06.2023 - -### Overview - -Added Broker UI and minor Connector UI improvements. - -### Detailed Changes - -#### Added - -- Added Broker PoC UI: - - Refactored Module Structure - - Added Catalog Page - - Added Connector Page - - Added Copyright Footer -- Tooltips for Asset Properties that show the asset property names. - -#### Fixed - -- Fixed Card titles exploding when containing too large words. -- Fixed missing section header for consuming contract agreements. - -## [v0.0.1-milestone-8-sovity5] 09.05.2023 - -### Overview - -Removed catalog browser timeouts. - -### Detailed Changes - -#### Changed - -- Catalog Page now has no timeouts. -- Catalog Page now displays partial results. - -## [v0.0.1-milestone-8-sovity4] 03.05.2023 - -### Overview - -Bugfixes and minor UI improvements. - -### Detailed Changes - -#### Added - -- Added "Show Details" option to each entry in Transfer History Page - -#### Fixed - -- Fixed bug in contract definition page that prevented the entire page from - showing when any contract definition used a non-array operatorRight. -- Fixed contract agreement transfer button being available for providing - contract agreements. - -## [v0.0.1-milestone-8-sovity3] 28.04.2023 - -### Overview - -Reworked Contract Agreement Page, improved stability and full contract offer -information is now displayed. - -### Detailed Changes - -#### Added - -- Reworked the Contract Agreement Page, it now uses its own dedicated API - Wrapper endpoint. -- Added login polling to prevent auto-logout when page is open. -- Showing all asset properties for assets and contract offers via an "Additional - Properties" section. -- Showing policies for contract offers in the asset details dialog. - -#### Changed - -- Marked `EDC_UI_MANAGEMENT_API_URL` as deprecated in favor of - `EDC_UI_MANAGEMENT_API_URL`. -- Marked `EDC_UI_DATA_MANAGEMENT_API_KEY` as deprecated in favor of - `EDC_UI_MANAGEMENT_API_KEY`. - -#### Removed - -- Removed Datasource Payload support, it is probably only intended for Push - -#### Fixed - -- Fixed getting started docker-compose-yaml to use the newly renamed `edc-dev` - image. -- Fixed labels of MDS categories and sub-categories. -- Fixed issue when navigating back after clicking logout. - -## [v0.0.1-milestone-8-sovity2] 24.03.2023 - -### Overview - -Bugfixes for our productive connectors. - -### Detailed Changes - -#### Fixed - -- Fixed implicit limit of 50 being applied to all views. - -## [v0.0.1-milestone-8-sovity1] 20.03.2023 - -### Overview - -Organization names are now prominent in both asset cards and contract offer -cards. - -### Detailed Changes - -#### Added - -- Made asset IDs less prominent in favor of Organization Name - -#### Fixed - -- Removed password suggestions for ID and related fields in Chrome -- Fixed handling of http error response code 401 when user logout from edc-ui -- Bumped minor dependencies - -## [v0.0.1-milestone-7-sovity8] 07.03.2023 - -### Overview - -Minor UI fixes. - -### Detailed Changes - -#### Changed - -- Updated the icon for Fetch Status option in the catalog browser - -#### Fixed - -- Fixed closing of side nav-bar on pressing escape button -- Fixed "Your Contract Definitions" being called "Your Data Offers" in the - dashboard. - -## [v0.0.1-milestone-7-sovity7] 06.03.2023 - -### Overview - -More Connector Self-Description properties in Dashboard. - -### Detailed Changes - -#### Added - -- Added Connector Self-Description property grid in Dashboard. -- Added info texts to differentiate Connector ID and Connector Endpoint. -- Added support for loading additional config from `EDC_UI_CONFIG_URL` on - startup. - -#### Changed - -- Deprecated property `EDC_UI_ASSET_PROP_ORIGINATOR` in favor of - `EDC_UI_CONNECTOR_ENDPOINT`. -- Deprecated property `EDC_UI_ASSET_PROP_ORIGINATOR_ORGANIZATION_NAME` in favor - of `EDC_UI_CURATOR_ORGANIZATION_NAME`. - -#### Fixed - -- Fixed Contract Definition successfully created message. - -## [v0.0.1-milestone-7-sovity6] 02.03.2023 - -#### Changed - -- Navigation Item Order: Switched Contract Definitions and Asset Viewer - -#### Fixed - -- Fixed Contract Definition Page Button Typo. - -## [v0.0.1-milestone-7-sovity5] 24.02.2023 - -### Overview - -New contract definition list, catalog status info and Http Datasink fields. - -### Detailed Changes - -#### Added - -- Added Additional Http Datasink properties. -- Catalog Browser now shows if individual Connector Endpoints were unreachable. -- Reworked Contract Definition cards. - -#### Changed - -- Renamed Connector ID to Connector Endpoint to emphasize differentiate: - - Connector ID: Configured in certificate, contained in DAT. - - Connector Endpoint: Configured IDS Endpoint - -#### Fixed - -- Compatibility section in README.md - -## [v0.0.1-milestone-7-sovity4] 20.02.2023 - -### Overview - -New policy list, new http data source properties, UX improvements - -### Detailed Changes - -#### Added - -- Reworked page loading, empty messages and error states -- Reworked policy list, new cards, new detail dialog. -- Additional Http Datasource Properties: method, content type, request body, - auth header/value, headers - -#### Fixed - -- Placeholder URLs missing "/control/" path -- Fixed Keyword select not adding keywords on input field blur, causing loss of - input. -- Fixed transfer dialog submitting on cancel -- Fixed transfer dialog validation not working -- Fix exception on contract definition dialog cancel - -## [v0.0.1-milestone-7-sovity3] 06.02.2023 - -### Fixed - -- Fixed dashboard splitting transfers and contract agreements in incoming / - outgoing. Contract Agreements currently cannot be distinguished as incoming / - outgoing. - -## [v0.0.1-milestone-7-sovity2] 01.02.2023 - -### Overview - -A new dashboard and other quality of life improvements. - -### Detailed Changes - -#### Added - -- Dashboard with KPIs and charts. -- Current Connector Organization & URL on Landing Page / Dashboard -- Simplified adding of data sources in Catalog Browser via Connector ID. -- Source code version of deployed edc-ui can now be accessed under - /assets/config/version.txt - -#### Changed - -- Connector URL is now called Connector ID, fixed naming and added good - placeholders. - -#### Fixed - -- Fixed additional PolicyDefinition uid vs id issues. -- Fixed E-Mail in README.MD -- Added API Endpoint to workaround extension that fixes an API problem: - - Could not start transfer processes with just contract agreement ids when - asset came from a custom catalog provider. - - It would need the asset's originator url. - - Since contract agreements don't contain the asset and catalogs are not - guaranteed to still contain said asset's details due to policies, a new - endpoint / extension was required. -- Fixed MDS Logo not working. - -## [v0.0.1-milestone-7-sovity1] 19.01.2023 - -### Overview - -- Prepared this repository for its open source release: - - Better configuration via ENV Vars, documentation and CI. - - Changed versioning system to `$EDC_VERSION-sovity$EDC_UI_MINOR_VERSION`. - - Changed release image to `ghcr.io/sovity/edc-ui`. - -### Detailed Changes - -#### Added - -- Split mds and sovity profiles each into "open source" and "hosted by sovity" - variants. - -#### Changed - -- Releasing images now as `ghcr.io/sovity/edc-ui`. -- Changed configuration: - - Removed `app.config.json`. - - Configuration via `EDC_UI_` environment variables in both local dev and - docker container. - - See `app-config-properties.ts` for available properties. - - Configuration via single environment variable `EDC_UI_CONFIG_JSON` possible. -- Added prettier as code formatter. - - Formatted all non-generated code with prettier. - -#### Fixed - -- Menu of Navigation bar hiding behind feedback widget - -## [0.0.1-ab1b6fd0-sovity5] 17.01.2023 - -### Detailed Changes - -#### Added - -- Added support for connector restricted usage policy. -- Added additional asset fields: - - General fields (e.g. standard license). - - MDS specific fields (e.g. transport mode). -- Catalog Browser: - - Reworked cards to support to support some new fields. - - Added new detail dialog showing asset details. -- Asset Viewer: - - Reworked cards to support to support some new fields. - - Added new detail dialog showing asset details. - - Added field CONNECTOR ORIGINATOR ORGANIZATION to be fetched from - app.config.json -- Asset Create Dialog: - - Divided asset creation into stages with an Angular Material Stepper. - - Added title and fixed styling. - - Added validation for required fields. - - Added validation for URL fields. - - Added validation for ID field, no whitespaces. - - Added ID generation from name. - - Added vocabulary for MDS specific fields: Data Category, Data Subcategory, - Transport Mode. - - Added new MDS field: Data Subcategory -- Policy Definition Dialog: - - Added title and fixed styling. - - Added validation for required fields. -- Contract Definition Dialog: - - Added title and fixed styling. - - Added validation for required fields. - -#### Changed - -- Changed asset properties, especially ID property. See `asset-properties.ts`. - -#### Fixed - -- Error-Message Displayed when Creating and Cancelling the Create-Policy-Dialog -- Removed dead theming code at wrong places. -- Fixed "black" accent color having black text on black background. -- Asset Create Dialog: - - Fixed validation not preventing submit. - - Fixed data flow so submit errors don't close dialog. -- Policy Viewer - - Fixed filter / pagination bar styling. -- Policy Definition Dialog: - - Fixed validation not preventing submit. - - Fixed data flow so submit errors don't close dialog. -- Contract Definition Viewer - - Fixed filter / pagination bar styling. -- Contract Definition Dialog: - - Fixed validation not preventing submit. - - Fixed data flow so submit errors don't close dialog. - -## [0.0.1-ab1b6fd0-sovity4] 04.01.2023 - -### Overview - -Supporting communication with milestone 7 EDC. Working Logout. - -### Detailed Changes - -#### Added - -- Angular 14 and Angular Material 14 -- Add Help-Box (Zammad links) - (https://github.com/sovity/edc-sovity-ui/issues/55) -- Additional `logoutUrl` Property in app.config.json - (https://github.com/sovity/edc-sovity-ui/issues/24) - - OAuth2-Proxy-Config has to be adapted - - Setting: --whitelist-domain to {{KEYCLOAK_ASE_URL}} - - Schema: {{EDC_UI_BASE_URL}}/oauth2/sign_out?rd={{KEYCLOAK_LOGOUT_URL}} - - KEYCLOAK_LOGOUT_URL - - all url encoded including {{KEYCLOAK_BASE_URL}} and {{EDC_UI_BASE_URL}} - - Schema: - {{KEYCLOAK_BASE_URL}}%2Frealms%2Fsovity%2Fprotocol%2Fopenid-connect%2Flogout%3Fclient_id%3D{{OAUTH2_PROXY_KEYCLOAK_CLIENT_ID}}%26post_logout_redirect_uri%3D{{EDC_UI_BASE_URL}} -- Support customizing the NGINX listen address - (https://github.com/sovity/edc-sovity-ui/issues/42) - - Required Environment-Variables - - NGINX_BIND - - NGINX_PORT -- Added secret scanning to repo -- Added MDS logo in the tool bar and added MDS theme -- Added focus on nav-bar item -- Added test server setup -- Added Catalog Url Field in Catalog Browser - (https://github.com/sovity/edc-sovity-ui/issues/83) - -#### Changed - -- Renamed policyDefinition `uid` field to `id` -- Removed Logout-Button from Startpage and added it to the menu - (https://github.com/sovity/edc-sovity-ui/issues/24) - -#### Removed - -- Developer text description on start page - -## [0.0.1-ab1b6fd0-sovity3] 2022-11-10 - -### Overview - -Passing multiple Catalog Urls. - -### Detailed Changes - -#### Added - -- Support for Passing multiple Catalog Urls - (https://github.com/sovity/edc-sovity-ui/issues/46) - - `catalogUrl` in `app.config.json` may be set to following pattern: - {catalog1Url},{catalog2Url},... - -## [0.0.1-ab1b6fd0-sovity2] 2022-09-28 - -### Overview - -Robustness and convenience improvements. - -### Detailed Changes - -#### Added - -- Field `originator` in `app.config.json` - (https://github.com/sovity/edc-sovity-ui/pull/36) - -#### Changed - -- CreateAssetDialog (https://github.com/sovity/edc-sovity-ui/pull/31) - - Added ComboBox for Asset Datasource-Type - - Json: Passing a Datasource using Json - - Rest-Api: Just passing a Url - - Removed Originator Field - - Originator will now bet set using the `originator` from `app.config.json` - - Changed Json Input Field to TextArea -- TransferDialog (https://github.com/sovity/edc-sovity-ui/pull/33) - - Added ComboBox for Transfer Destination-Type - - Json: Passing a Data-Destination using Json - - Rest-Api: Just passing a Url -- PolicyDialog (https://github.com/sovity/edc-sovity-ui/pull/34) - - Removed fields (Assignee, Assigner, Permissions, Prohibitions and - Obligations) - - Added ComboBox for Choosing a fixed Policy - - Added Time-Interval-Selection Component for Time-Restricted Policy - -#### Removed - -- `Deprovision` Button in Transfer History: Has been used for AzureBlob Storage - before, but is not required for Rest-Api Transfers - (https://github.com/sovity/edc-sovity-ui/pull/35) - -#### Fixed - -- User-Input will be trimmed before sending it to the EDC-Backend - (https://github.com/sovity/edc-sovity-ui/pull/39) - -## [0.0.1-ab1b6fd0-sovity1] 2022-08-31 - -### Overview - -First release of sovity EDC-Data-Dashboard. Adds support for connecting -REST-APIs. - -### Detailed Changes - -#### Added - -- sovity Theming - -#### Changed - -- Sorting Transfer History Entries by Created Date -- Create Asset Dialog - - Field for arbitrary Data Destination - - Field for Originator - - Has to be set to connectors IDS Endpoint, for instance: - http://daps-connector-a-controlplane-1:8282/api/v1/ids/data -- Transfer Dialog in Contracts - - Field for arbitrary Data Destination - -#### Removed - -- Support for Azure Storage Blobs diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md deleted file mode 100644 index 6fd31637b..000000000 --- a/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,72 +0,0 @@ -# Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as -contributors and maintainers pledge to making participation in our project and -our community a harassment-free experience for everyone, regardless of age, body -size, disability, ethnicity, gender identity and expression, level of -experience, nationality, personal appearance, race, religion, or sexual identity -and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment -include: - -- Using welcoming and inclusive language -- Being respectful of differing viewpoints and experiences -- Gracefully accepting constructive criticism -- Focusing on what is best for the community -- Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -- The use of sexualized language or imagery and unwelcome sexual attention or - advances -- Trolling, insulting/derogatory comments, and personal or political attacks -- Public or private harassment -- Publishing others' private information, such as a physical or electronic - address, without explicit permission -- Other conduct which could reasonably be considered inappropriate in a - professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable -behavior and are expected to take appropriate and fair corrective action in -response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or reject -comments, commits, code, wiki edits, issues, and other contributions that are -not aligned to this Code of Conduct, or to ban temporarily or permanently any -contributor for other behaviors that they deem inappropriate, threatening, -offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces -when an individual is representing the project or its community. Examples of -representing a project or community include using an official project e-mail -address, posting via an official social media account, or acting as an appointed -representative at an online or offline event. Representation of a project may be -further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported by contacting the project team. All complaints will be reviewed and -investigated and will result in a response that is deemed necessary and -appropriate to the circumstances. The project team is obligated to maintain -confidentiality with regard to the reporter of an incident. Further details of -specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good -faith may face temporary or permanent repercussions as determined by other -members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the -[Contributor Covenant](http://contributor-covenant.org), version 1.4, available -at http://contributor-covenant.org/version/1/4. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index 0d9c09b64..000000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,195 +0,0 @@ -# Contributing to the Project - -Thank you for your interest in contributing to this project - -## Table of Contents - -- [Code Of Conduct](#code-of-conduct) -- [How to Contribute](#how-to-contribute) - - [Discuss](#discuss) - - [Create an Issue](#create-an-issue) - - [Submit a Pull Request](#submit-a-pull-request) - - [Report on Flaky Tests](#report-on-flaky-tests) -- [Etiquette for pull requests](#etiquette-for-pull-requests) -- [Contact Us](#contact-us) - -## Code Of Conduct - -See the [Code Of Conduct](CODE_OF_CONDUCT.md). - -## How to Contribute - -### Discuss - -If you want to share an idea to further enhance the project or discuss potential -use cases, please feel free to create a discussion at the -`GitHub Discussions page`] If you feel there is a bug or an issue, contribute to -the discussions in `existing issues` otherwise -[create a new issue](#create-an-issue). - -### Create an Issue - -If you have identified a bug or want to formulate a working item that you want -to concentrate on, feel free to create a new issue at our project's -corresponding `GitHub Issues page`. Before doing so, please consider searching -for potentially suitable `existing issues`. - -We also use -[GitHub's default label set](https://docs.github.com/en/issues/using-labels-and-milestones-to-track-work/managing-labels) -extended by custom ones to classify issues and improve findability. - -If an issue appears to cover changes that will have a (huge) impact on the code -base and needs to first be discussed, or if you just have a question regarding -the usage of the software, please create a `discussion` before raising an issue. - -Please note that if an issue covers a topic or the response to a question that -may be interesting for other developers or contributors, or for further -discussions, it should be converted to a discussion and not be closed. - -### Adhere to Coding Style Guide - -We aim for a coherent and consistent code base, thus the coding style detailed -in the [styleguide](STYLEGUIDE.md) should be followed. - -### Submit a Pull Request - -We would appreciate if your pull request applies to the following points: - -- Conform to following - [Etiquette for pull requests](#etiquette-for-pull-requests): - -- Make sure to adjust copyright headers appropriately. - -- The git commit messages should comply to the following format: - - ``` - (): - ``` - - Use the - [imperative mood](https://github.com/git/git/blob/master/Documentation/SubmittingPatches) - as in "Fix bug" or "Add feature" rather than "Fixed bug" or "Added feature" - and - [mention the GitHub issue](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue) - e.g. `chore(transfer process): improve logging`. - -- Add meaningful tests to verify your submission acts as expected. - -- Where code is not self-explanatory, add documentation providing extra - clarification. - -- PR descriptions should use the current - [PR template](.github/PULL_REQUEST_TEMPLATE.md) - -- Submit a draft pull request at early-stage and add people previously working - on the same code as reviewer. Make sure automatic checks pass before marking - it as "ready for review": - - - _Continuous Integration_ performing various test conventions. - -### Report on Flaky Tests - -If you discover a randomly failing ("flaky") test, please take the time to check -whether an issue for that already exists and if not, create an issue yourself, -providing meaningful description and a link to the failing run. Please also -label it with `Bug` and `github`. Then assign it to whoever was the original -author of the relevant piece of code or whoever worked on it last. If assigning -the issue is not possible due to missing rights, please just comment and -@mention the author/last editor. - -Please do not just restart the run, as this would overwrite the results. If you -need to, a better way of doing this is to push an empty commit. This will -trigger another run. - -```bash -git commit --allow-empty -m "trigger CI" && git push -``` - -If an issue labeled with `Bug` and `github` is assigned to you, please -prioritize addressing this issue as other people will be affected. We are taking -the quality of our code very serious and reporting on flaky tests is an -important step toward improvement in that area. - -## Etiquette for pull requests - -### As an author - -Submitting pull requests should be done while adhering to a couple of simple -rules. - -- Familiarize yourself with [coding style](STYLEGUIDE.md), architectural - patterns and other contribution guidelines. -- No surprise PRs please. Before you submit a PR, open a discussion or an issue - outlining your planned work and give people time to comment. It may even be - advisable to contact committers using the `@mention` feature. Unsolicited PRs - may get ignored or rejected. -- Create focused PRs: your work should be focused on one particular feature or - bug. Do not create broad-scoped PRs that solve multiple issues as reviewers - may reject those PR bombs outright. -- Provide a clear description and motivation in the PR description in GitHub. - This makes the reviewer's life much easier. It is also helpful to outline the - broad changes that were made, e.g. "Changes the schema of XYZ-Entity: the - `age` field changed from `long` to `String`". -- If you introduce new 3rd party dependencies, be sure to note them in the PR - description and explain why they are necessary. -- Stick to the established code style, please refer to the - [styleguide document](STYLEGUIDE.md). -- All tests should be green, especially when your PR is in `"Ready for review"` -- Mark PRs as `"Ready for review"` only when you're prepared to defend your - work. By that time you have completed your work and shouldn't need to push any - more commits other than to incorporate review comments. -- Merge conflicts should be resolved by squashing all commits on the PR branch, - rebasing onto `main` and force-pushing. Do this when your PR is ready to - review. -- If you require a reviewer's input while it's still in draft, please contact - the designated reviewer using the `@mention` feature and let them know what - you'd like them to look at. -- Re-request reviews after all remarks have been adopted. This helps reviewers - track their work in GitHub. -- If you disagree with a committer's remarks, feel free to object and argue, but - if no agreement is reached, you'll have to either accept the decision or - withdraw your PR. -- Be civil and objective. No foul language, insulting or otherwise abusive - language will be tolerated. -- The PR titles must follow - [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/). - - The title must follow the format as - `(): `. `build`, `chore`, `ci`, `docs`, - `feat`, `fix`, `perf`, `refactor`, `revert`, `style`, `test` are allowed for - the ``. - - The length must be kept under 80 characters. - -### As a reviewer - -- Have a look at - [Pull Request Review Pyramide](https://www.morling.dev/blog/the-code-review-pyramid/) -- Please complete reviews within two business days or delegate to another - committer, removing yourself as a reviewer. -- If you have been requested as reviewer, but cannot do the review for any - reason (time, lack of knowledge in particular area, etc.) please comment that - in the PR and remove yourself as a reviewer, suggesting a stand-in. -- Don't be overly pedantic. -- Don't argue basic principles (code style, architectural decisions, etc.) -- Use the `suggestion` feature of GitHub for small/simple changes. -- The following could serve you as a review checklist: - - no unnecessary dependencies in `build.gradle.kts` - - sensible unit tests, prefer unit tests over integration tests wherever - possible (test runtime). Also check the usage of test tags. - - code style - - simplicity and "uncluttered-ness" of the code - - overall focus of the PR -- Don't just wave through any PR. Please take the time to look at them - carefully. -- Be civil and objective. No foul language, insulting or otherwise abusive - language will be tolerated. The goal is to _encourage_ contributions. - -## Contact Us - -If you have questions or suggestions, do not hesitate to contact the project -developers via https://github.com/sovity. - -## Attribution - -This file is adapted from the -[eclipse-edc](https://github.com/eclipse-dataspaceconnector/DataSpaceConnector) -project. diff --git a/LICENSE b/LICENSE deleted file mode 100644 index d9a10c0d8..000000000 --- a/LICENSE +++ /dev/null @@ -1,176 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS diff --git a/NOTICE b/NOTICE deleted file mode 100644 index 11716f93b..000000000 --- a/NOTICE +++ /dev/null @@ -1,11 +0,0 @@ -sovity EDC UI -Copyright (c) 2024. sovity GmbH - -This product includes software developed at sovity GmbH (https://www.sovity.de). -Copyright (c) 2024. sovity GmbH - -The initial internationalization of the EDC UI and localization to German was done -by the Fraunhofer Institute for Applied Information Technology FIT (https://www.fit.fraunhofer.de/). -This project was part of the national flagship project "Datenraum Kultur" and was funded -by the Federal Government Commissioner for Culture and the Media from 2023 to 2025. -Copyright (c) 2024. Fraunhofer Institute for Applied Information Technology FIT diff --git a/README.md b/README.md index 54c494b64..057ca333d 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,3 @@ - - - - - - -[![Contributors][contributors-shield]][contributors-url] -[![Forks][forks-shield]][forks-url] [![Stargazers][stars-shield]][stars-url] -[![Issues][issues-shield]][issues-url] -[![MIT License][license-shield]][license-url] -[![LinkedIn][linkedin-shield]][linkedin-url] -
@@ -20,208 +8,16 @@

sovity EDC UI

- UI for sovity's extended EDC-Connector. + UI for sovity's extended EDC-Connector
- Report Bug - · - Request Feature -
-
- angular.io + <v11.0.0, archived, code now lives in sovity/edc-ce

- -
- Table of Contents -
    -
  1. About The Project
  2. -
  3. Getting Started
  4. -
  5. Configuration
  6. -
  7. Running dev mode
  8. -
  9. Build docker image
  10. -
  11. Contributing
  12. -
  13. License
  14. -
  15. Contact
  16. -
-
- - - -## About The Project - -[Eclipse Dataspace Components](https://github.com/eclipse-edc) is a framework -for building dataspaces, exchanging data securely with ensured data -sovereignity. - -[sovity](https://sovity.de/) extends the EDC functionality to offer -enterprise-ready managed "Connector-as-a-Service" services, bringing -out-of-the-box fully configured DAPS and integrations to existing other -dataspace technologies. - -Our extension of EDC DataDashboard functionalities has been made open source and -will be kept compatible to mostly stock EDCs with minimal API extending -extensions. - -

(back to top)

- -
-
- -
-
- -
-
- -
-
- -
- - - -## Getting Started - -The fastest way to get started is using our Getting Started Guide: -[sovity EDC CE Getting Started Guide](https://github.com/sovity/edc-ce#getting-started). - -

(back to top)

- - - -## Configuration - -A list of all available configuration properties can be found -[here](src/app/core/config/app-config-properties.ts). - -In general, all ENV vars `EDC_UI_*` are written to an `assets/app-config.json`, -either before starting the angular build server or before starting the nginx to -serve static files. - -### (Optional) Pass a JSON in an ENV Var - -The ENV var `EDC_UI_CONFIG_JSON` can be used to pass a JSON that can contain all -properties that would otherwise need to be specified individually. Individually -provided ENV vars take precedence, however. - -

(back to top)

- -### (Optional) Configuring the NGINX - -```yaml -# Customizable ENV Vars and their defaults -NGINX_BIND: '0.0.0.0' -NGINX_PORT: '8080' -NGINX_ACCESS_LOG: '/dev/stdout' -NGINX_ERROR_LOG: '/dev/stderr' -``` - - +## About this Component -## Running dev mode - -Requires Node.js version `^16.10.0`. - -```shell -# Fake backend -(cd fake-backend && npm i && npm run start) - -# Run Angular Application -npm i -npm run start -``` - -### Configuring Dev Mode - -For dev mode ENV vars are read from: - -- Current Environment Variables (highest precedence) -- `.env` file (not committed, in .gitignore) -- `.env.local-dev` file (defaults for working with fake backend). - -```properties -# Example: -# Create a .env file to easily switch between profiles -EDC_UI_ACTIVE_PROFILE=mds-open-source -``` - -

(back to top)

- - - -## Build docker image - -Requires docker. - -```shell -# Build docker image -docker build -f "docker/Dockerfile" -t "edc-ui:latest" . - -# Docker image will serve at :80 -``` - -

(back to top)

- - - -## Contributing - -Contributions are what make the open source community such an amazing place to -learn, inspire, and create. Any contributions you make are **greatly -appreciated**. - -If you have a suggestion that would make this better, please fork the repo and -create a pull request. You can also simply open an issue with the tag -"enhancement". Don't forget to give the project a star! Thanks again! - -1. Fork the Project -2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`) -3. Commit your Changes (`git commit -m 'Add some AmazingFeature'`) -4. Push to the Branch (`git push origin feature/AmazingFeature`) -5. Open a Pull Request - -Our contribution guide can be found in [CONTRIBUTING.md](CONTRIBUTING.md). - -

(back to top)

- - - -## License - -Distributed under the Apache 2.0 License. See `LICENSE` for more information. - -

(back to top)

- - +**This repository is retired and the contents have been moved into our [sovity/edc-ce](https://github.com/sovity/edc-ce) repository.** ## Contact -contact@sovity.de - -

(back to top)

- - - - -[contributors-shield]: - https://img.shields.io/github/contributors/sovity/edc-ui.svg?style=for-the-badge -[contributors-url]: https://github.com/sovity/edc-ui/graphs/contributors -[forks-shield]: - https://img.shields.io/github/forks/sovity/edc-ui.svg?style=for-the-badge -[forks-url]: https://github.com/sovity/edc-ui/network/members -[stars-shield]: - https://img.shields.io/github/stars/sovity/edc-ui.svg?style=for-the-badge -[stars-url]: https://github.com/sovity/edc-ui/stargazers -[issues-shield]: - https://img.shields.io/github/issues/sovity/edc-ui.svg?style=for-the-badge -[issues-url]: https://github.com/sovity/edc-ui/issues -[license-shield]: - https://img.shields.io/github/license/sovity/edc-ui.svg?style=for-the-badge -[license-url]: https://github.com/sovity/edc-ui/blob/master/LICENSE.txt -[linkedin-shield]: - https://img.shields.io/badge/-LinkedIn-black.svg?style=for-the-badge&logo=linkedin&colorB=555 -[linkedin-url]: https://www.linkedin.com/company/sovity -[Angular.io]: - https://img.shields.io/badge/Angular-DD0031?style=for-the-badge&logo=angular&logoColor=white -[Angular-url]: https://angular.io/ +contact@sovity.de \ No newline at end of file diff --git a/SECURITY.md b/SECURITY.md deleted file mode 100644 index 5b81c2e4d..000000000 --- a/SECURITY.md +++ /dev/null @@ -1,37 +0,0 @@ -## Security - -sovity GmbH takes the security of its software products and services seriously, -which includes all source code repositories managed through our GitHub -organization: [sovity](https://github.com/sovity). - -If you believe you have found a security vulnerability in any of sovity's owned -repositories, please report it to us as described below. - -## Reporting Security Issues - -**Please do not report security vulnerabilities through public GitHub issues.** - -Instead, please report them via mail: -[security@sovity.de](mailto:security@sovity.de) - -You should receive a response within 24 hours. If for some reason you do not, -please follow up via email to ensure we received your original message. - -Please include the requested information listed below (as much as you can -provide) to help us better understand the nature and scope of the possible -issue: - -- Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, - etc.) -- Full paths of source file(s) related to the manifestation of the issue -- The location of the affected source code (tag/branch/commit or direct URL) -- Any special configuration required to reproduce the issue -- Step-by-step instructions to reproduce the issue -- Proof-of-concept or exploit code (if possible) -- Impact of the issue, including how an attacker might exploit the issue - -This information will help us triage your report more quickly. - -## Preferred Languages - -We prefer all communications to be in English. diff --git a/STYLEGUIDE.md b/STYLEGUIDE.md deleted file mode 100644 index b394585ef..000000000 --- a/STYLEGUIDE.md +++ /dev/null @@ -1,10 +0,0 @@ -# Code Style Guide - -- We use prettier as code formatter. Check for code formatting issues with - `npm run format-all`. -- Angular code follows - [Angular Style Guide](https://angular.io/guide/styleguide). -- Reviewers will review for - [Clean Code principles](https://x-team.com/blog/principles-clean-code/#clean-code-principles) -- [SOLID](https://en.wikipedia.org/wiki/SOLID) ensure consistent, composable and - re-usable intra-project APIs. diff --git a/angular.json b/angular.json deleted file mode 100644 index d48360c8f..000000000 --- a/angular.json +++ /dev/null @@ -1,113 +0,0 @@ -{ - "$schema": "./node_modules/@angular/cli/lib/config/schema.json", - "version": 1, - "newProjectRoot": "projects", - "projects": { - "edc-demo-client": { - "projectType": "application", - "schematics": { - "@schematics/angular:component": { - "style": "scss" - }, - "@schematics/angular:application": { - "strict": true - } - }, - "root": "", - "sourceRoot": "src", - "prefix": "app", - "architect": { - "build": { - "builder": "ngx-build-plus:browser", - "options": { - "extraWebpackConfig": "webpack.config.js", - "outputPath": "dist/edc-demo-client", - "index": "src/index.html", - "main": "src/main.ts", - "polyfills": "src/polyfills.ts", - "tsConfig": "tsconfig.app.json", - "inlineStyleLanguage": "scss", - "assets": ["src/favicon.ico", "src/assets"], - "styles": ["src/styles.scss"], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "2.0mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "fileReplacements": [ - { - "replace": "src/environments/environment.ts", - "with": "src/environments/environment.prod.ts" - } - ], - "outputHashing": "all", - "sourceMap": { - "hidden": false, - "scripts": true, - "styles": true - } - }, - "development": { - "buildOptimizer": false, - "optimization": false, - "vendorChunk": true, - "extractLicenses": false, - "sourceMap": true, - "namedChunks": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "builder": "ngx-build-plus:dev-server", - "configurations": { - "production": { - "browserTarget": "edc-demo-client:build:production" - }, - "development": { - "browserTarget": "edc-demo-client:build:development" - } - }, - "options": { - "extraWebpackConfig": "webpack.config.js", - "browserTarget": "project-name:build" - }, - "defaultConfiguration": "development" - }, - "extract-i18n": { - "builder": "@angular-devkit/build-angular:extract-i18n", - "options": { - "browserTarget": "edc-demo-client:build" - } - }, - "test": { - "builder": "@angular-devkit/build-angular:karma", - "options": { - "main": "src/test.ts", - "polyfills": "src/polyfills.ts", - "tsConfig": "tsconfig.spec.json", - "karmaConfig": "karma.conf.js", - "inlineStyleLanguage": "scss", - "assets": ["src/favicon.ico", "src/assets"], - "styles": ["src/styles.scss"], - "scripts": [] - } - } - } - } - }, - "cli": { - "analytics": false - } -} diff --git a/config-generator.js b/config-generator.js deleted file mode 100644 index 8d6e1dadb..000000000 --- a/config-generator.js +++ /dev/null @@ -1,55 +0,0 @@ -const {writeFileSync, existsSync, readFileSync} = require('fs'); -const dotenv = require('dotenv'); - -// Generate app-config.json from ENV Vars -// Priority: ENV VAR > .env > .env.local-dev -// Usage: node ./config-generator.js - -// app-config.json in production is not generated by this script - -/** - * Reads given .env file - * - * @param path path to .env file - * @return vars (Record) - */ -const readEnvFileSync = (path) => { - if (existsSync(path)) { - return dotenv.parse(readFileSync(path)); - } - return {}; -}; - -/** - * Filter object properties by applying filter fn to each key. - * - * @param obj any object - * @param fn filter fn (applied to property name) - * @return subset of obj - */ -const objFilterKeys = (obj, fn) => - Object.fromEntries(Object.entries(obj).filter(([k, _]) => fn(k))); - -// Read ENV Vars from .env files as well -const allProps = { - ...readEnvFileSync('.env.local-dev'), - ...readEnvFileSync('.env'), - ...process.env, -}; - -// Collect ENV Vars with prefix EDC_UI_ -const prefix = 'EDC_UI_'; -const filteredProps = objFilterKeys(allProps, (k) => k.startsWith(prefix)); -if (!Object.keys(filteredProps).length) { - console.warn( - `No ${prefix} configuration properties are set in ENV, application might not be configured properly.`, - ); -} - -// Write app-config.json -const output = './src/assets/config/app-configuration.json'; -const json = JSON.stringify(filteredProps); -writeFileSync(output, json); - -// It is ok to log this config as the data will be available in all client browsers -console.log(`Writing app.configuration.json to ${output}: ${json}`); diff --git a/docker/99-generate-app-config.sh b/docker/99-generate-app-config.sh deleted file mode 100755 index 040c256ff..000000000 --- a/docker/99-generate-app-config.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh - -set -e - -jq -n 'env | with_entries( select(.key | startswith("EDC_UI_") ) )' > /tmp/app-config.json diff --git a/docker/Dockerfile b/docker/Dockerfile deleted file mode 100644 index 8642d6426..000000000 --- a/docker/Dockerfile +++ /dev/null @@ -1,44 +0,0 @@ -# Stage 1: Install node modules -FROM docker.io/library/node:lts as npm-install - -WORKDIR /app -COPY ./package*.json /app/ -RUN npm install - -# Stage 2: Build Project -FROM docker.io/library/node:lts as build - -WORKDIR /app -COPY --from=npm-install /app/node_modules /app/node_modules -COPY ./ /app/ -RUN npm run ng build --no-progress --configuration=production - -# Stage 3: Serve app with nginx -FROM docker.io/nginxinc/nginx-unprivileged:1.27-alpine3.20 - -# Temporarily switch to root to install packages and create symlink in restricted location -USER root -RUN apk add --no-cache jq curl - -COPY --from=build /app/dist/edc-demo-client /usr/share/nginx/html -COPY --from=build /app/src/assets /usr/share/nginx/html/assets -COPY docker/default.conf.template etc/nginx/templates/default.conf.template -# Before starting nginx, apply ENV vars to create app-config.json from EDC_UI_* ENV Vars -# Use an entrypoint drop-in instead of modifying the default entrypoint or command, -# so that the automatic envsubst templating is not disabled. -COPY docker/99-generate-app-config.sh /docker-entrypoint.d/99-generate-app-config.sh - -RUN ln -sf /tmp/app-config.json /usr/share/nginx/html/assets/config/app-configuration.json \ - # Nginx is configured to reject symlinks that point to a file owned by a different user, for security reasons - && chown --no-dereference nginx:root /usr/share/nginx/html/assets/config/app-configuration.json - -# Switch back to unprivileged user for runtime -USER nginx:nginx - -ENV NGINX_BIND="0.0.0.0" -ENV NGINX_PORT=8080 -ENV NGINX_ACCESS_LOG=/dev/stdout -ENV NGINX_ERROR_LOG=/dev/stderr - -HEALTHCHECK --interval=2s --timeout=5s --retries=10 \ - CMD curl -f http://$NGINX_BIND:$NGINX_PORT/ || exit 1 diff --git a/docker/default.conf.template b/docker/default.conf.template deleted file mode 100644 index 605cb15fe..000000000 --- a/docker/default.conf.template +++ /dev/null @@ -1,28 +0,0 @@ -access_log ${NGINX_ACCESS_LOG}; -error_log ${NGINX_ERROR_LOG}; -disable_symlinks if_not_owner; -server_tokens off; - -server { - listen ${NGINX_BIND}:${NGINX_PORT}; - server_name localhost; - - root /usr/share/nginx/html; - - location / { - index do-not-use-me.html; - try_files $uri @index; - } - - location @index { - add_header Cache-Control no-cache; - expires 0; - index index.html; - try_files /index.html =404; - } - - location ~* ^/assets/config/app-configuration\.json$ { - add_header Cache-Control "no-store, no-cache, must-revalidate"; - expires -1; - } -} diff --git a/docs/dev/changelog_updates.md b/docs/dev/changelog_updates.md deleted file mode 100644 index 8892e534a..000000000 --- a/docs/dev/changelog_updates.md +++ /dev/null @@ -1,67 +0,0 @@ -Updating the Changelog -====================== - -This project uses a [CHANGELOG.md](../../CHANGELOG.md). - -## Structure of the Changelog - -Each pull request should also update the "Unreleased" section of the changelog. -It should also update the "Deployment Migration Notes" Section of the unreleased section as preparation for the release. - -For each release there will be a separate section especially with an "Overview" section containing a summary -from a product perspective. - -Releases will especially contain a "Compatible Versions" section with the final docker -images and versions of other software components that are connected by APIs. - -## How to categorize a change - -The changelog uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -Changes are categorized as either Major, Minor or Patch Changes. - -For this project, changes are categorized as the following: - -### Major Changes - -Major changes include: - -- UX / Product overhauls. -- Breaking changes in Connector-To-Connector communication. -- Breaking changes to the required deployment units (our UI doesn't count). -- Breaking changes in our API Wrapper Use Case API. - -### Minor Changes - -Minor changes include: - -- Any changes from a product perspective to our UI or API Wrapper UI API. -- Additions to our API Wrapper Use Case API. -- New APIs with API contracts with other deployment units (our UI doesn't count). -- New Product Documentation - -### Patch Changes - -Patch changes are basically everything else, that does not add, change or remove any product or external API features. - -- Product Fixes, Bugfixes, Refactorings -- Changes to existing Product Documentation -- New or changes to Developer Documentation -- Everything else - -## Released Versions - -On releases the "Unreleased" section is emptied in favor of a new section for the release. - -Whether a release will bump the major, minor or patch version is decided by the unreleased changes in the changelog. - -The Release sections will be cleaned up on release, improved with additional information and made -useful for the customer and people deploying the application, containing both product changes and -deployment migration notes. - -More on that can be found in the [Release Issue Template](../../.github/ISSUE_TEMPLATE/release.md). - -## Linking - -The entries in the changelog should be linked to their corresponding issue. - -If for some reason the issue is not accessible for the public, link to the pull request instead. diff --git a/docs/screenshots/screenshot-assets.png b/docs/screenshots/screenshot-assets.png deleted file mode 100644 index f8bee909fe3fef70bb37bc3b168c8d23fc2f90e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 149643 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

ThjROqSdYR+mFvEllonAUVkj1 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

p`XxsjIBIRTwXlgoaF28F0JHW2 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 TZs+RrIQZx0;=Vf1nHl{*I(4j5 diff --git a/docs/screenshots/screenshot-dashboard.png b/docs/screenshots/screenshot-dashboard.png deleted file mode 100644 index 6956c16c7a183e47790b30bbdb71d88e98477865..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 324536 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

6{sntt{8{IK8zO*TB}Nu;=D&?I^GYnVgn~i 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

>5vxXzF+LN;LSj1z<*VTKYhzJ(b1GcSpK1aE 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

wXd!P^cT|9$+#bjFCWRa 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 z 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 Mn&Q=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@angular-devkit/architect": { - "version": "0.1402.13", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1402.13.tgz", - "integrity": "sha512-n0ISBuvkZHoOpAzuAZql1TU9VLHUE9e/a9g4VNOPHewjMzpN02VqeGKvJfOCKtzkCs6gVssIlILm2/SXxkIFxQ==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "14.2.13", - "rxjs": "6.6.7" - }, - "engines": { - "node": "^14.15.0 || >=16.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-devkit/architect/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/@angular-devkit/architect/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@angular-devkit/build-angular": { - "version": "14.2.13", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-14.2.13.tgz", - "integrity": "sha512-FJZKQ3xYFvEJ807sxVy4bCVyGU2NMl3UUPNfLIdIdzwwDEP9tx/cc+c4VtVPEZZfU8jVenu8XOvL6L0vpjt3yg==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "2.2.0", - "@angular-devkit/architect": "0.1402.13", - "@angular-devkit/build-webpack": "0.1402.13", - "@angular-devkit/core": "14.2.13", - "@babel/core": "7.18.10", - "@babel/generator": "7.18.12", - "@babel/helper-annotate-as-pure": "7.18.6", - "@babel/plugin-proposal-async-generator-functions": "7.18.10", - "@babel/plugin-transform-async-to-generator": "7.18.6", - "@babel/plugin-transform-runtime": "7.18.10", - "@babel/preset-env": "7.18.10", - "@babel/runtime": "7.18.9", - "@babel/template": "7.18.10", - "@discoveryjs/json-ext": "0.5.7", - "@ngtools/webpack": "14.2.13", - "ansi-colors": "4.1.3", - "babel-loader": "8.2.5", - "babel-plugin-istanbul": "6.1.1", - "browserslist": "^4.9.1", - "cacache": "16.1.2", - "copy-webpack-plugin": "11.0.0", - "critters": "0.0.16", - "css-loader": "6.7.1", - "esbuild-wasm": "0.15.5", - "glob": "8.0.3", - "https-proxy-agent": "5.0.1", - "inquirer": "8.2.4", - "jsonc-parser": "3.1.0", - "karma-source-map-support": "1.4.0", - "less": "4.1.3", - "less-loader": "11.0.0", - "license-webpack-plugin": "4.0.2", - "loader-utils": "3.2.1", - "mini-css-extract-plugin": "2.6.1", - "minimatch": "5.1.0", - "open": "8.4.0", - "ora": "5.4.1", - "parse5-html-rewriting-stream": "6.0.1", - "piscina": "3.2.0", - "postcss": "8.4.31", - "postcss-import": "15.0.0", - "postcss-loader": "7.0.1", - "postcss-preset-env": "7.8.0", - "regenerator-runtime": "0.13.9", - "resolve-url-loader": "5.0.0", - "rxjs": "6.6.7", - "sass": "1.54.4", - "sass-loader": "13.0.2", - "semver": "7.5.3", - "source-map-loader": "4.0.0", - "source-map-support": "0.5.21", - "stylus": "0.59.0", - "stylus-loader": "7.0.0", - "terser": "5.14.2", - "text-table": "0.2.0", - "tree-kill": "1.2.2", - "tslib": "2.4.0", - "webpack": "5.76.1", - "webpack-dev-middleware": "5.3.3", - "webpack-dev-server": "4.11.0", - "webpack-merge": "5.8.0", - "webpack-subresource-integrity": "5.1.0" - }, - "engines": { - "node": "^14.15.0 || >=16.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "optionalDependencies": { - "esbuild": "0.15.5" - }, - "peerDependencies": { - "@angular/compiler-cli": "^14.0.0", - "@angular/localize": "^14.0.0", - "@angular/service-worker": "^14.0.0", - "karma": "^6.3.0", - "ng-packagr": "^14.0.0", - "protractor": "^7.0.0", - "tailwindcss": "^2.0.0 || ^3.0.0", - "typescript": ">=4.6.2 <4.9" - }, - "peerDependenciesMeta": { - "@angular/localize": { - "optional": true - }, - "@angular/service-worker": { - "optional": true - }, - "karma": { - "optional": true - }, - "ng-packagr": { - "optional": true - }, - "protractor": { - "optional": true - }, - "tailwindcss": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", - "dev": true - }, - "node_modules/@angular-devkit/build-angular/node_modules/@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "dev": true, - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "dev": true - }, - "node_modules/@angular-devkit/build-angular/node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "dev": true - }, - "node_modules/@angular-devkit/build-angular/node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "dev": true - }, - "node_modules/@angular-devkit/build-angular/node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "dev": true, - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "dev": true - }, - "node_modules/@angular-devkit/build-angular/node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "dev": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "dev": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "dev": true - }, - "node_modules/@angular-devkit/build-angular/node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "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" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/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, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "dev": true, - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "dev": true - }, - "node_modules/@angular-devkit/build-angular/node_modules/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 - }, - "node_modules/@angular-devkit/build-angular/node_modules/postcss-import": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.0.0.tgz", - "integrity": "sha512-Y20shPQ07RitgBGv2zvkEAu9bqvrD77C9axhj/aA1BQj4czape2MdClCExvB27EwYEJdGgKZBpKanb0t1rK2Kg==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/postcss-loader": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.1.tgz", - "integrity": "sha512-VRviFEyYlLjctSM93gAZtcJJ/iSkPZ79zWbN/1fSH+NisBByEiVLqpdVDrPLVSi8DX0oJo12kL/GppTBdKVXiQ==", - "dev": true, - "dependencies": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.5", - "semver": "^7.3.7" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/rxjs/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@angular-devkit/build-angular/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "dev": true - }, - "node_modules/@angular-devkit/build-angular/node_modules/webpack": { - "version": "5.76.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.76.1.tgz", - "integrity": "sha512-4+YIK4Abzv8172/SGqObnUjaIHjLEuUasz9EwQj/9xmPPkYJy2Mh03Q/lJfSD3YLzbxy5FeTq5Uw0323Oh6SJQ==", - "dev": true, - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/build-angular/node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@angular-devkit/build-webpack": { - "version": "0.1402.13", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1402.13.tgz", - "integrity": "sha512-K27aJmuw86ZOdiu5PoGeGDJ2v7g2ZCK0bGwc8jzkjTLRfvd4FRKIIZumGv3hbQ3vQRLikiU6WMDRTFyCZky/EA==", - "dev": true, - "dependencies": { - "@angular-devkit/architect": "0.1402.13", - "rxjs": "6.6.7" - }, - "engines": { - "node": "^14.15.0 || >=16.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "webpack": "^5.30.0", - "webpack-dev-server": "^4.0.0" - } - }, - "node_modules/@angular-devkit/build-webpack/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/@angular-devkit/build-webpack/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@angular-devkit/core": { - "version": "14.2.13", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-14.2.13.tgz", - "integrity": "sha512-aIefeZcbjghQg/V6U9CTLtyB5fXDJ63KwYqVYkWP+i0XriS5A9puFgq2u/OVsWxAfYvqpDqp5AdQ0g0bi3CAsA==", - "dev": true, - "dependencies": { - "ajv": "8.11.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.1.0", - "rxjs": "6.6.7", - "source-map": "0.7.4" - }, - "engines": { - "node": "^14.15.0 || >=16.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/core/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/@angular-devkit/core/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@angular-devkit/schematics": { - "version": "14.2.13", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-14.2.13.tgz", - "integrity": "sha512-2zczyeNzeBcrT2HOysv52X9SH3tZoHfWJvVf6H0SIa74rfDKEl7hFpKNXnh3x8sIMLj5mZn05n5RCqGxCczcIg==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "14.2.13", - "jsonc-parser": "3.1.0", - "magic-string": "0.26.2", - "ora": "5.4.1", - "rxjs": "6.6.7" - }, - "engines": { - "node": "^14.15.0 || >=16.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-devkit/schematics/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/@angular-devkit/schematics/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@angular/animations": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-14.3.0.tgz", - "integrity": "sha512-QoBcIKy1ZiU+4qJsAh5Ls20BupWiXiZzKb0s6L9/dntPt5Msr4Ao289XR2P6O1L+kTsCprH9Kt41zyGQ/bkRqg==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^14.15.0 || >=16.10.0" - }, - "peerDependencies": { - "@angular/core": "14.3.0" - } - }, - "node_modules/@angular/cdk": { - "version": "14.2.7", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-14.2.7.tgz", - "integrity": "sha512-/tEsYaUbDSnfEmKVvAMramIptmhI67O+9STjOV0i+74XR2NospeK0fkbywIANu1n3w6AHGMotvRWJrjmbCElFg==", - "dependencies": { - "tslib": "^2.3.0" - }, - "optionalDependencies": { - "parse5": "^5.0.0" - }, - "peerDependencies": { - "@angular/common": "^14.0.0 || ^15.0.0", - "@angular/core": "^14.0.0 || ^15.0.0", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/cli": { - "version": "14.2.13", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-14.2.13.tgz", - "integrity": "sha512-I5EepRem2CCyS3GDzQxZ2ZrqQwVqoGoLY+ZQhsK1QGWUnUyFOjbv3OlUGxRUYwcedu19V1EBAKjmQ96HzMIcVQ==", - "dev": true, - "dependencies": { - "@angular-devkit/architect": "0.1402.13", - "@angular-devkit/core": "14.2.13", - "@angular-devkit/schematics": "14.2.13", - "@schematics/angular": "14.2.13", - "@yarnpkg/lockfile": "1.1.0", - "ansi-colors": "4.1.3", - "debug": "4.3.4", - "ini": "3.0.0", - "inquirer": "8.2.4", - "jsonc-parser": "3.1.0", - "npm-package-arg": "9.1.0", - "npm-pick-manifest": "7.0.1", - "open": "8.4.0", - "ora": "5.4.1", - "pacote": "13.6.2", - "resolve": "1.22.1", - "semver": "7.5.3", - "symbol-observable": "4.0.0", - "uuid": "8.3.2", - "yargs": "17.5.1" - }, - "bin": { - "ng": "bin/ng.js" - }, - "engines": { - "node": "^14.15.0 || >=16.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular/common": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-14.3.0.tgz", - "integrity": "sha512-pV9oyG3JhGWeQ+TFB0Qub6a1VZWMNZ6/7zEopvYivdqa5yDLLDSBRWb6P80RuONXyGnM1pa7l5nYopX+r/23GQ==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^14.15.0 || >=16.10.0" - }, - "peerDependencies": { - "@angular/core": "14.3.0", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/compiler": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-14.3.0.tgz", - "integrity": "sha512-E15Rh0t3vA+bctbKnBCaDmLvc3ix+ZBt6yFZmhZalReQ+KpOlvOJv+L9oiFEgg+rYVl2QdvN7US1fvT0PqswLw==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^14.15.0 || >=16.10.0" - }, - "peerDependencies": { - "@angular/core": "14.3.0" - }, - "peerDependenciesMeta": { - "@angular/core": { - "optional": true - } - } - }, - "node_modules/@angular/compiler-cli": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-14.3.0.tgz", - "integrity": "sha512-eoKpKdQ2X6axMgzcPUMZVYl3bIlTMzMeTo5V29No4BzgiUB+QoOTYGNJZkGRyqTNpwD9uSBJvmT2vG9+eC4ghQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.17.2", - "chokidar": "^3.0.0", - "convert-source-map": "^1.5.1", - "dependency-graph": "^0.11.0", - "magic-string": "^0.26.0", - "reflect-metadata": "^0.1.2", - "semver": "^7.0.0", - "sourcemap-codec": "^1.4.8", - "tslib": "^2.3.0", - "yargs": "^17.2.1" - }, - "bin": { - "ng-xi18n": "bundles/src/bin/ng_xi18n.js", - "ngc": "bundles/src/bin/ngc.js", - "ngcc": "bundles/ngcc/main-ngcc.js" - }, - "engines": { - "node": "^14.15.0 || >=16.10.0" - }, - "peerDependencies": { - "@angular/compiler": "14.3.0", - "typescript": ">=4.6.2 <4.9" - } - }, - "node_modules/@angular/core": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-14.3.0.tgz", - "integrity": "sha512-wYiwItc0Uyn4FWZ/OAx/Ubp2/WrD3EgUJ476y1XI7yATGPF8n9Ld5iCXT08HOvc4eBcYlDfh90kTXR6/MfhzdQ==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^14.15.0 || >=16.10.0" - }, - "peerDependencies": { - "rxjs": "^6.5.3 || ^7.4.0", - "zone.js": "~0.11.4 || ~0.12.0" - } - }, - "node_modules/@angular/flex-layout": { - "version": "14.0.0-beta.41", - "resolved": "https://registry.npmjs.org/@angular/flex-layout/-/flex-layout-14.0.0-beta.41.tgz", - "integrity": "sha512-x1YcxqkdFlcbVXEy9ebCgW/F+7n/MXkEkwEcVEIPf5v5qn7HZsjQxgIj35Lf0amvMyF7h35prpoxO1uX5+ntFg==", - "deprecated": "This package has been deprecated. Please see https://blog.angular.io/modern-css-in-angular-layouts-4a259dca9127", - "dependencies": { - "tslib": "^2.3.0" - }, - "peerDependencies": { - "@angular/cdk": "^14.0.0", - "@angular/common": "^14.0.0", - "@angular/core": "^14.0.0", - "@angular/platform-browser": "^14.0.0", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/forms": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-14.3.0.tgz", - "integrity": "sha512-fBZZC2UFMom2AZPjGQzROPXFWO6kvCsPDKctjJwClVC8PuMrkm+RRyiYRdBbt2qxWHEqOZM2OCQo73xUyZOYHw==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^14.15.0 || >=16.10.0" - }, - "peerDependencies": { - "@angular/common": "14.3.0", - "@angular/core": "14.3.0", - "@angular/platform-browser": "14.3.0", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/material": { - "version": "14.2.7", - "resolved": "https://registry.npmjs.org/@angular/material/-/material-14.2.7.tgz", - "integrity": "sha512-WXHh8pEStpgkXZJmYOg2cI8BSHkV82ET4XTJCNPdveumaCn1UYnaNzsXD13kw5z+zmy8CufhFEzdXTrv/yt7KQ==", - "dependencies": { - "tslib": "^2.3.0" - }, - "peerDependencies": { - "@angular/animations": "^14.0.0 || ^15.0.0", - "@angular/cdk": "14.2.7", - "@angular/common": "^14.0.0 || ^15.0.0", - "@angular/core": "^14.0.0 || ^15.0.0", - "@angular/forms": "^14.0.0 || ^15.0.0", - "@angular/platform-browser": "^14.0.0 || ^15.0.0", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/platform-browser": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-14.3.0.tgz", - "integrity": "sha512-w9Y3740UmTz44T0Egvc+4QV9sEbO61L+aRHbpkLTJdlEGzHByZvxJmJyBYmdqeyTPwc/Zpy7c02frlpfAlyB7A==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^14.15.0 || >=16.10.0" - }, - "peerDependencies": { - "@angular/animations": "14.3.0", - "@angular/common": "14.3.0", - "@angular/core": "14.3.0" - }, - "peerDependenciesMeta": { - "@angular/animations": { - "optional": true - } - } - }, - "node_modules/@angular/platform-browser-dynamic": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-14.3.0.tgz", - "integrity": "sha512-rneZiMrIiYRhrkQvdL40E2ErKRn4Zdo6EtjBM9pAmWeyoM8oMnOZb9gz5vhrkNWg06kVMVg0yKqluP5How7j3A==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^14.15.0 || >=16.10.0" - }, - "peerDependencies": { - "@angular/common": "14.3.0", - "@angular/compiler": "14.3.0", - "@angular/core": "14.3.0", - "@angular/platform-browser": "14.3.0" - } - }, - "node_modules/@angular/router": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-14.3.0.tgz", - "integrity": "sha512-uip0V7w7k7xyxxpTPbr7EuMnYLj3FzJrwkLVJSEw3TMMGHt5VU5t4BBa9veGZOta2C205XFrTAHnp8mD+XYY1w==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^14.15.0 || >=16.10.0" - }, - "peerDependencies": { - "@angular/common": "14.3.0", - "@angular/core": "14.3.0", - "@angular/platform-browser": "14.3.0", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@assemblyscript/loader": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", - "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==", - "dev": true - }, - "node_modules/@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", - "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.10.tgz", - "integrity": "sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.10", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-module-transforms": "^7.18.9", - "@babel/helpers": "^7.18.9", - "@babel/parser": "^7.18.10", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.18.10", - "@babel/types": "^7.18.10", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.18.12", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.12.tgz", - "integrity": "sha512-dfQ8ebCN98SvyL7IxNMCUtZQSq5R7kxgN+r8qYTGDmmSion1hX2C0zq2yo1bsCDhXixokv1SAWTZUMYbO/V5zg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.10", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", - "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz", - "integrity": "sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.9", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.9.tgz", - "integrity": "sha512-Pwyi89uO4YrGKxL/eNJ8lfEH55DnRloGPOseaA8NFNL6jAUnn+KccaISiFazCj5IolPPDjGSdzQzXVzODVRqUQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz", - "integrity": "sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "regexpu-core": "^5.3.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", - "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name/node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", - "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", - "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz", - "integrity": "sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-wrap-function": "^7.22.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", - "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.9.tgz", - "integrity": "sha512-sZ+QzfauuUEfxSEjKFmi3qDSHgLsTPK/pEpoD/qonZKOtTPTLbf59oabPQ4rKekt9lFcj/hTZaOhWwFYrgjk+Q==", - "dev": true, - "dependencies": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function/node_modules/@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz", - "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.6", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers/node_modules/@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", - "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.3.tgz", - "integrity": "sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", - "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", - "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.10.tgz", - "integrity": "sha512-1mFuY2TOsR1hxbjCo4QL+qlIjV07p4H4EUYw2J/WCqsvFV6V9X9z9YhXbWndc/4fw+hYGlDT7egYxliMp5O6Ew==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz", - "integrity": "sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", - "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", - "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", - "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", - "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.11.tgz", - "integrity": "sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", - "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", - "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", - "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-remap-async-to-generator": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", - "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", - "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz", - "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-classes/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", - "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties/node_modules/@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", - "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", - "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", - "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", - "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", - "dev": true, - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", - "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", - "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", - "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", - "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", - "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", - "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", - "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", - "dev": true, - "dependencies": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", - "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", - "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", - "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", - "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.6.tgz", - "integrity": "sha512-Vd5HiWml0mDVtcLHIoEU5sw6HOUW/Zk0acLs/SAeuLzkGNOPc9DB4nkUajemhCmTIz3eiaKREZn2hQQqF79YTg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", - "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", - "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", - "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "regenerator-transform": "^0.15.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", - "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.10.tgz", - "integrity": "sha512-q5mMeYAdfEbpBAgzl7tBre/la3LeCxmDO1+wMXRdPWbcoMjR3GiXlCLk7JBZVVye0bqTGNMbt0yYVXX1B1jEWQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.9", - "babel-plugin-polyfill-corejs2": "^0.3.2", - "babel-plugin-polyfill-corejs3": "^0.5.3", - "babel-plugin-polyfill-regenerator": "^0.4.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", - "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", - "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", - "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", - "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", - "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", - "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", - "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.10.tgz", - "integrity": "sha512-wVxs1yjFdW3Z/XkNfXKoblxoHgbtUF7/l3PvvP4m02Qz9TZ6uZGxRVYjSQeR87oQmHco9zWitW5J82DJ7sCjvA==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.18.8", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.18.10", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.18.9", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.18.9", - "@babel/plugin-transform-classes": "^7.18.9", - "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.18.9", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.8", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.18.6", - "@babel/plugin-transform-modules-commonjs": "^7.18.6", - "@babel/plugin-transform-modules-systemjs": "^7.18.9", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.18.6", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.18.8", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.18.9", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.10", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.18.10", - "babel-plugin-polyfill-corejs2": "^0.3.2", - "babel-plugin-polyfill-corejs3": "^0.5.3", - "babel-plugin-polyfill-regenerator": "^0.4.0", - "core-js-compat": "^3.22.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6.tgz", - "integrity": "sha512-ID2yj6K/4lKfhuU3+EX4UvNbIt7eACFbHmNUjzA+ep+B5971CknnA/9DEWKbRokfbbtblxxxXFJJrH47UEAMVg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "dev": true - }, - "node_modules/@babel/runtime": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz", - "integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==", - "dev": true, - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", - "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.0", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.0", - "@babel/types": "^7.23.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/@babel/generator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.3.tgz", - "integrity": "sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.23.3", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/types": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.3.tgz", - "integrity": "sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@csstools/postcss-cascade-layers": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz", - "integrity": "sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==", - "dev": true, - "dependencies": { - "@csstools/selector-specificity": "^2.0.2", - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-color-function": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz", - "integrity": "sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==", - "dev": true, - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-font-format-keywords": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz", - "integrity": "sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-hwb-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz", - "integrity": "sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-ic-unit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz", - "integrity": "sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==", - "dev": true, - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-is-pseudo-class": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz", - "integrity": "sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==", - "dev": true, - "dependencies": { - "@csstools/selector-specificity": "^2.0.0", - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-nested-calc": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz", - "integrity": "sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-normalize-display-values": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz", - "integrity": "sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-oklab-function": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz", - "integrity": "sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==", - "dev": true, - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-progressive-custom-properties": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz", - "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.3" - } - }, - "node_modules/@csstools/postcss-stepped-value-functions": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz", - "integrity": "sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-text-decoration-shorthand": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz", - "integrity": "sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-trigonometric-functions": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz", - "integrity": "sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-unset-value": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz", - "integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==", - "dev": true, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/selector-specificity": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz", - "integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==", - "dev": true, - "engines": { - "node": "^14 || ^16 || >=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss-selector-parser": "^6.0.10" - } - }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.5.tgz", - "integrity": "sha512-UHkDFCfSGTuXq08oQltXxSZmH1TXyWsL+4QhZDWvvLl6mEJQqk3u7/wq1LjhrrAXYIllaTtRSzUXl4Olkf2J8A==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "dev": true - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "node_modules/@kurkle/color": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz", - "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==", - "peer": true - }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", - "dev": true - }, - "node_modules/@ng-apimock/core": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@ng-apimock/core/-/core-3.11.0.tgz", - "integrity": "sha512-Gy4b0hdwuExADS00TMQ1gcj4TciDQveIVCRD+B/EInRYfO+IODvZH58Iw/dV+mjcAXIOEsrql2MES7/tWyqScA==", - "dependencies": { - "body-parser": "1.20.2", - "chokidar": "3.5.3", - "debug": "4.3.4", - "fs-extra": "11.1.1", - "glob": "8.1.0", - "inversify": "6.0.1", - "node-fetch": "2.6.9", - "reflect-metadata": "0.1.13", - "uuid": "9.0.0" - } - }, - "node_modules/@ng-apimock/core/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@ng-apimock/core/node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/@ngtools/webpack": { - "version": "14.2.13", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-14.2.13.tgz", - "integrity": "sha512-RQx/rGX7K/+R55x1R6Ax1JzyeHi8cW11dEXpzHWipyuSpusQLUN53F02eMB4VTakXsL3mFNWWy4bX3/LSq8/9w==", - "dev": true, - "engines": { - "node": "^14.15.0 || >=16.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "@angular/compiler-cli": "^14.0.0", - "typescript": ">=4.6.2 <4.9", - "webpack": "^5.54.0" - } - }, - "node_modules/@ngx-translate/core": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/@ngx-translate/core/-/core-14.0.0.tgz", - "integrity": "sha512-UevdwNCXMRCdJv//0kC8h2eSfmi02r29xeE8E9gJ1Al4D4jEJ7eiLPdjslTMc21oJNGguqqWeEVjf64SFtvw2w==", - "dependencies": { - "tslib": "^2.3.0" - }, - "peerDependencies": { - "@angular/core": ">=13.0.0", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@ngx-translate/http-loader": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@ngx-translate/http-loader/-/http-loader-7.0.0.tgz", - "integrity": "sha512-j+NpXXlcGVdyUNyY/qsJrqqeAdJdizCd+GKh3usXExSqy1aE9866jlAIL+xrfDU4w+LiMoma5pgE4emvFebZmA==", - "dependencies": { - "tslib": "^2.3.0" - }, - "peerDependencies": { - "@angular/common": ">=13.0.0", - "@ngx-translate/core": ">=14.0.0", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@ngxs/store": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@ngxs/store/-/store-3.8.1.tgz", - "integrity": "sha512-nbapLdMx+mtnb57BUWXbD6qYfVICv6Rp2NdoGx1++qDbc44ALC49KbF7rSjyPltlExxharAzoNpzO3JuueCP+A==", - "dependencies": { - "tslib": "^2.2.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/ngxs" - }, - "peerDependencies": { - "@angular/core": ">=12.0.0 <17.0.0", - "rxjs": ">=6.5.5" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@npmcli/fs": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", - "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", - "dev": true, - "dependencies": { - "@gar/promisify": "^1.1.3", - "semver": "^7.3.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@npmcli/git": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-3.0.2.tgz", - "integrity": "sha512-CAcd08y3DWBJqJDpfuVL0uijlq5oaXaOJEKHKc4wqrjd00gkvTZB+nFuLn+doOOKddaQS9JfqtNoFCO2LCvA3w==", - "dev": true, - "dependencies": { - "@npmcli/promise-spawn": "^3.0.0", - "lru-cache": "^7.4.4", - "mkdirp": "^1.0.4", - "npm-pick-manifest": "^7.0.0", - "proc-log": "^2.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^2.0.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@npmcli/git/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@npmcli/git/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@npmcli/installed-package-contents": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", - "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", - "dev": true, - "dependencies": { - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - }, - "bin": { - "installed-package-contents": "index.js" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@npmcli/move-file": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", - "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", - "deprecated": "This functionality has been moved to @npmcli/fs", - "dev": true, - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@npmcli/node-gyp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz", - "integrity": "sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@npmcli/promise-spawn": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz", - "integrity": "sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g==", - "dev": true, - "dependencies": { - "infer-owner": "^1.0.4" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@npmcli/run-script": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.2.1.tgz", - "integrity": "sha512-7dqywvVudPSrRCW5nTHpHgeWnbBtz8cFkOuKrecm6ih+oO9ciydhWt6OF7HlqupRRmB8Q/gECVdB9LMfToJbRg==", - "dev": true, - "dependencies": { - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/promise-spawn": "^3.0.0", - "node-gyp": "^9.0.0", - "read-package-json-fast": "^2.0.3", - "which": "^2.0.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@npmcli/run-script/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@schematics/angular": { - "version": "14.2.13", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-14.2.13.tgz", - "integrity": "sha512-MLxTpTU3E8QACQ/5c0sENMR2gRiMXpGaKeD5IHY+3wyU2fUSJVB0QPU/l1WhoyZbX8N9ospBgf5UEG7taVF9rg==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "14.2.13", - "@angular-devkit/schematics": "14.2.13", - "jsonc-parser": "3.1.0" - }, - "engines": { - "node": "^14.15.0 || >=16.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@socket.io/component-emitter": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", - "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==", - "dev": true - }, - "node_modules/@sovity.de/edc-client": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/@sovity.de/edc-client/-/edc-client-10.4.0.tgz", - "integrity": "sha512-CBC7bHdIWD1K5plc+tgdJOb5YT82YyyaZ1xMKCy5Ox77KgQEOKG5W/95VzzZkap91xV5zNO5j7I5KJXj18jz8g==", - "dependencies": { - "zod": "^3.22.4" - } - }, - "node_modules/@tailwindcss/typography": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.10.tgz", - "integrity": "sha512-Pe8BuPJQJd3FfRnm6H0ulKIGoMEQS+Vq01R6M5aCrFB/ccR/shT+0kXLjouGC1gFLm9hopTFN+DMP0pfwRWzPw==", - "dev": true, - "dependencies": { - "lodash.castarray": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.merge": "^4.6.2", - "postcss-selector-parser": "6.0.10" - }, - "peerDependencies": { - "tailwindcss": ">=3.0.0 || insiders" - } - }, - "node_modules/@tailwindcss/typography/node_modules/postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@trivago/prettier-plugin-sort-imports": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@trivago/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-4.3.0.tgz", - "integrity": "sha512-r3n0onD3BTOVUNPhR4lhVK4/pABGpbA7bW3eumZnYdKaHkf1qEC+Mag6DPbGNuuh0eG8AaYj+YqmVHSiGslaTQ==", - "dev": true, - "dependencies": { - "@babel/generator": "7.17.7", - "@babel/parser": "^7.20.5", - "@babel/traverse": "7.23.2", - "@babel/types": "7.17.0", - "javascript-natural-sort": "0.7.1", - "lodash": "^4.17.21" - }, - "peerDependencies": { - "@vue/compiler-sfc": "3.x", - "prettier": "2.x - 3.x" - }, - "peerDependenciesMeta": { - "@vue/compiler-sfc": { - "optional": true - } - } - }, - "node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/generator": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.7.tgz", - "integrity": "sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.17.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@trivago/prettier-plugin-sort-imports/node_modules/@babel/types": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", - "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@trivago/prettier-plugin-sort-imports/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", - "dev": true, - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/bonjour": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", - "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.3.tgz", - "integrity": "sha512-6mfQ6iNvhSKCZJoY6sIG3m0pKkdUcweVNOLuBBKvoWGzl2yRxOJcYOTRyLKt3nxXvBLJWa6QkW//tgbIwJehmA==", - "dev": true, - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "node_modules/@types/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", - "dev": true - }, - "node_modules/@types/cors": { - "version": "2.8.17", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", - "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/dompurify": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/dompurify/-/dompurify-3.0.5.tgz", - "integrity": "sha512-1Wg0g3BtQF7sSb27fJQAKck1HECM6zV1EB66j8JH9i3LCjYabJa0FSdiSgsD5K/RbrsR0SiraKacLB+T8ZVYAg==", - "dependencies": { - "@types/trusted-types": "*" - } - }, - "node_modules/@types/eslint": { - "version": "8.44.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.1.tgz", - "integrity": "sha512-XpNDc4Z5Tb4x+SW1MriMVeIsMoONHCkWFMkR/aPJbzEsxqHy+4Glu/BqTdPrApfDeMaXbtNh6bseNgl5KaWrSg==", - "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "dev": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", - "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", - "dev": true - }, - "node_modules/@types/express": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", - "dev": true, - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.41", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", - "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/http-errors": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", - "dev": true - }, - "node_modules/@types/http-proxy": { - "version": "1.17.14", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", - "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/jasmine": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-4.3.6.tgz", - "integrity": "sha512-3N0FpQTeiWjm+Oo1WUYWguUS7E6JLceiGTriFrG8k5PU7zRLJCzLcWURU3wjMbZGS//a2/LgjsnO3QxIlwxt9g==", - "dev": true - }, - "node_modules/@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", - "dev": true - }, - "node_modules/@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "dev": true - }, - "node_modules/@types/node": { - "version": "18.17.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.1.tgz", - "integrity": "sha512-xlR1jahfizdplZYRU59JlUx9uzF1ARa8jbhM11ccpCJya8kvos5jwdm2ZAgxSCwOl0fq21svP18EVwPBXMQudw==", - "dev": true - }, - "node_modules/@types/node-forge": { - "version": "1.3.9", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.9.tgz", - "integrity": "sha512-meK88cx/sTalPSLSoCzkiUB4VPIFHmxtXm5FaaqRDqBX2i/Sy8bJ4odsan0b20RBjPh06dAQ+OTTdnyQyhJZyQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "node_modules/@types/qs": { - "version": "6.9.10", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.10.tgz", - "integrity": "sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==", - "dev": true - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "dev": true - }, - "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "dev": true - }, - "node_modules/@types/send": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", - "dev": true, - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/serve-index": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", - "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", - "dev": true, - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", - "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", - "dev": true, - "dependencies": { - "@types/http-errors": "*", - "@types/mime": "*", - "@types/node": "*" - } - }, - "node_modules/@types/sockjs": { - "version": "0.3.36", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", - "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/trusted-types": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", - "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==" - }, - "node_modules/@types/ws": { - "version": "8.5.9", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.9.tgz", - "integrity": "sha512-jbdrY0a8lxfdTp/+r7Z4CkycbOFN8WX+IOchLJr3juT/xzbJ8URyTVSJ/hvNdadTgM1mnedb47n+Y31GsFnQlg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", - "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", - "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", - "dev": true, - "peer": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", - "dev": true, - "peer": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", - "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", - "dev": true, - "peer": true - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", - "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", - "dev": true, - "peer": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", - "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", - "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", - "dev": true, - "peer": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", - "dev": true, - "peer": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", - "dev": true, - "peer": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", - "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", - "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", - "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", - "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", - "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", - "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", - "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", - "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", - "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", - "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@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 - }, - "node_modules/@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 - }, - "node_modules/@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", - "dev": true - }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "dev": true - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", - "dev": true, - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/adjust-sourcemap-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", - "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", - "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/agentkeepalive": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz", - "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==", - "dev": true, - "dependencies": { - "debug": "^4.1.0", - "depd": "^2.0.0", - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "dev": true, - "engines": [ - "node >= 0.8.0" - ], - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - }, - "node_modules/are-we-there-yet": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", - "dev": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/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 - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/autoprefixer": { - "version": "10.4.14", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", - "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - } - ], - "dependencies": { - "browserslist": "^4.21.5", - "caniuse-lite": "^1.0.30001464", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/babel-loader": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz", - "integrity": "sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==", - "dev": true, - "dependencies": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "engines": { - "node": ">= 8.9" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" - } - }, - "node_modules/babel-loader/node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", - "semver": "^6.1.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz", - "integrity": "sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.2", - "core-js-compat": "^3.21.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", - "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/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, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/base64id": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", - "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", - "dev": true, - "engines": { - "node": "^4.5.0 || >= 5.9" - } - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true - }, - "node_modules/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, - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/bonjour-service": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", - "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", - "dev": true, - "dependencies": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.21.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", - "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "dependencies": { - "semver": "^7.0.0" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacache": { - "version": "16.1.2", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.2.tgz", - "integrity": "sha512-Xx+xPlfCZIUHagysjjOAje9nRo8pRDczQCcXb4J2O0BLtH+xeVue6ba4y1kfJfQMAnM2mkcoMIAyOctlaRGWYA==", - "dev": true, - "dependencies": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "infer-owner": "^1.0.4", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11", - "unique-filename": "^1.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/cacache/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001517", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001517.tgz", - "integrity": "sha512-Vdhm5S11DaFVLlyiKu4hiUTkpZu+y1KA/rZZqVQfOD5YdDT/eQKlkt7NaE0WGOFgX32diqt9MiP9CAiFeRklaA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "node_modules/chart.js": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.3.1.tgz", - "integrity": "sha512-QHuISG3hTJ0ftq0I0f5jqH9mNVO9bqG8P+zvMOVslgKajQVvFEX7QAhYNJ+QEmw+uYTwo8XpTimaB82oeTWjxw==", - "peer": true, - "dependencies": { - "@kurkle/color": "^0.3.0" - }, - "engines": { - "pnpm": ">=7" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/clean-deep": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/clean-deep/-/clean-deep-3.4.0.tgz", - "integrity": "sha512-Lo78NV5ItJL/jl+B5w0BycAisaieJGXK1qYi/9m4SjR8zbqmrUtO7Yhro40wEShGmmxs/aJLI/A+jNhdkXK8mw==", - "dependencies": { - "lodash.isempty": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.transform": "^4.6.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", - "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true, - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dev": true, - "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" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/compression/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/connect/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/connect/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "dev": true - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true - }, - "node_modules/copy-anything": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", - "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", - "dev": true, - "dependencies": { - "is-what": "^3.14.1" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" - } - }, - "node_modules/copy-webpack-plugin": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", - "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", - "dev": true, - "dependencies": { - "fast-glob": "^3.2.11", - "glob-parent": "^6.0.1", - "globby": "^13.1.1", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/core-js-compat": { - "version": "3.31.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.1.tgz", - "integrity": "sha512-wIDWd2s5/5aJSdpOJHfSibxNODxoGoWOBHt8JSPB41NOE94M7kuTPZCYLOlTtuoXTsBPKobpJ6T+y0SSy5L9SA==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.9" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dev": true, - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/cosmiconfig": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", - "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", - "dev": true, - "dependencies": { - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - } - }, - "node_modules/cosmiconfig/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/cosmiconfig/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/critters": { - "version": "0.0.16", - "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.16.tgz", - "integrity": "sha512-JwjgmO6i3y6RWtLYmXwO5jMd+maZt8Tnfu7VVISmEWyQqfLpB8soBswf8/2bu6SBXxtKA68Al3c+qIG1ApT68A==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "css-select": "^4.2.0", - "parse5": "^6.0.1", - "parse5-htmlparser2-tree-adapter": "^6.0.1", - "postcss": "^8.3.7", - "pretty-bytes": "^5.3.0" - } - }, - "node_modules/critters/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/critters/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/critters/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/critters/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/critters/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/critters/node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "node_modules/critters/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/cross-spawn/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/css-blank-pseudo": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", - "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.9" - }, - "bin": { - "css-blank-pseudo": "dist/cli.cjs" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/css-has-pseudo": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", - "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.9" - }, - "bin": { - "css-has-pseudo": "dist/cli.cjs" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/css-loader": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.1.tgz", - "integrity": "sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw==", - "dev": true, - "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.7", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.3.5" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/css-prefers-color-scheme": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", - "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", - "dev": true, - "bin": { - "css-prefers-color-scheme": "dist/cli.cjs" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssdb": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.7.0.tgz", - "integrity": "sha512-1hN+I3r4VqSNQ+OmMXxYexnumbOONkSil0TWMebVXHtzYW4tRRPovUNHPHj2d4nrgOuYJ8Vs3XwvywsuwwXNNA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - } - ] - }, - "node_modules/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, - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssstyle": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-3.0.0.tgz", - "integrity": "sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==", - "dependencies": { - "rrweb-cssom": "^0.6.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/custom-event": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", - "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==", - "dev": true - }, - "node_modules/data-urls": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", - "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", - "dependencies": { - "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/data-urls/node_modules/tr46": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz", - "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==", - "dependencies": { - "punycode": "^2.3.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/data-urls/node_modules/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "engines": { - "node": ">=12" - } - }, - "node_modules/data-urls/node_modules/whatwg-url": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.0.0.tgz", - "integrity": "sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==", - "dependencies": { - "tr46": "^5.0.0", - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/date-fns": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", - "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", - "dependencies": { - "@babel/runtime": "^7.21.0" - }, - "engines": { - "node": ">=0.11" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/date-fns" - } - }, - "node_modules/date-fns-tz": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/date-fns-tz/-/date-fns-tz-2.0.1.tgz", - "integrity": "sha512-fJCG3Pwx8HUoLhkepdsP7Z5RsucUi+ZBOxyM5d0ZZ6c4SdYustq0VMmOu6Wf7bli+yS/Jwp91TOCqn9jMcVrUA==", - "peerDependencies": { - "date-fns": "2.x" - } - }, - "node_modules/date-fns/node_modules/@babel/runtime": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", - "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", - "dependencies": { - "regenerator-runtime": "^0.13.11" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/date-fns/node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" - }, - "node_modules/date-format": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", - "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" - }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "dev": true, - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/dependency-graph": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", - "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true - }, - "node_modules/di": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", - "integrity": "sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==", - "dev": true - }, - "node_modules/didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "dev": true - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true - }, - "node_modules/dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", - "dev": true - }, - "node_modules/dns-packet": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", - "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", - "dev": true, - "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/dom-serialize": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", - "integrity": "sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==", - "dev": true, - "dependencies": { - "custom-event": "~1.0.0", - "ent": "~2.2.0", - "extend": "^3.0.0", - "void-elements": "^2.0.0" - } - }, - "node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dev": true, - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dev": true, - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/dompurify": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.7.tgz", - "integrity": "sha512-BViYTZoqP3ak/ULKOc101y+CtHDUvBsVgSxIF1ku0HmK6BRf+C03MC+tArMvOPtVtZp83DDh5puywKDu4sbVjQ==" - }, - "node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dev": true, - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dotenv": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", - "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/motdotla/dotenv?sponsor=1" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/electron-to-chromium": { - "version": "1.4.471", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.471.tgz", - "integrity": "sha512-GpmGRC1vTl60w/k6YpQ18pSiqnmr0j3un//5TV1idPi6aheNfkT1Ye71tMEabWyNDO6sBMgAR+95Eb0eUUr1tA==", - "dev": true - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/engine.io": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.5.tgz", - "integrity": "sha512-C5Pn8Wk+1vKBoHghJODM63yk8MvrO9EWZUfkAt5HAqIgPE4/8FF0PEGHXtEd40l223+cE5ABWuPzm38PHFXfMA==", - "dev": true, - "dependencies": { - "@types/cookie": "^0.4.1", - "@types/cors": "^2.8.12", - "@types/node": ">=10.0.0", - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "~0.4.1", - "cors": "~2.8.5", - "debug": "~4.3.1", - "engine.io-parser": "~5.2.1", - "ws": "~8.17.1" - }, - "engines": { - "node": ">=10.2.0" - } - }, - "node_modules/engine.io-parser": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.2.tgz", - "integrity": "sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/ent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==", - "dev": true - }, - "node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true - }, - "node_modules/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, - "optional": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-module-lexer": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", - "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", - "dev": true, - "peer": true - }, - "node_modules/esbuild": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.5.tgz", - "integrity": "sha512-VSf6S1QVqvxfIsSKb3UKr3VhUCis7wgDbtF4Vd9z84UJr05/Sp2fRKmzC+CSPG/dNAPPJZ0BTBLTT1Fhd6N9Gg==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/linux-loong64": "0.15.5", - "esbuild-android-64": "0.15.5", - "esbuild-android-arm64": "0.15.5", - "esbuild-darwin-64": "0.15.5", - "esbuild-darwin-arm64": "0.15.5", - "esbuild-freebsd-64": "0.15.5", - "esbuild-freebsd-arm64": "0.15.5", - "esbuild-linux-32": "0.15.5", - "esbuild-linux-64": "0.15.5", - "esbuild-linux-arm": "0.15.5", - "esbuild-linux-arm64": "0.15.5", - "esbuild-linux-mips64le": "0.15.5", - "esbuild-linux-ppc64le": "0.15.5", - "esbuild-linux-riscv64": "0.15.5", - "esbuild-linux-s390x": "0.15.5", - "esbuild-netbsd-64": "0.15.5", - "esbuild-openbsd-64": "0.15.5", - "esbuild-sunos-64": "0.15.5", - "esbuild-windows-32": "0.15.5", - "esbuild-windows-64": "0.15.5", - "esbuild-windows-arm64": "0.15.5" - } - }, - "node_modules/esbuild-android-64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.5.tgz", - "integrity": "sha512-dYPPkiGNskvZqmIK29OPxolyY3tp+c47+Fsc2WYSOVjEPWNCHNyqhtFqQadcXMJDQt8eN0NMDukbyQgFcHquXg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-android-arm64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.5.tgz", - "integrity": "sha512-YyEkaQl08ze3cBzI/4Cm1S+rVh8HMOpCdq8B78JLbNFHhzi4NixVN93xDrHZLztlocEYqi45rHHCgA8kZFidFg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.5.tgz", - "integrity": "sha512-Cr0iIqnWKx3ZTvDUAzG0H/u9dWjLE4c2gTtRLz4pqOBGjfjqdcZSfAObFzKTInLLSmD0ZV1I/mshhPoYSBMMCQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-arm64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.5.tgz", - "integrity": "sha512-WIfQkocGtFrz7vCu44ypY5YmiFXpsxvz2xqwe688jFfSVCnUsCn2qkEVDo7gT8EpsLOz1J/OmqjExePL1dr1Kg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.5.tgz", - "integrity": "sha512-M5/EfzV2RsMd/wqwR18CELcenZ8+fFxQAAEO7TJKDmP3knhWSbD72ILzrXFMMwshlPAS1ShCZ90jsxkm+8FlaA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-arm64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.5.tgz", - "integrity": "sha512-2JQQ5Qs9J0440F/n/aUBNvY6lTo4XP/4lt1TwDfHuo0DY3w5++anw+jTjfouLzbJmFFiwmX7SmUhMnysocx96w==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-32": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.5.tgz", - "integrity": "sha512-gO9vNnIN0FTUGjvTFucIXtBSr1Woymmx/aHQtuU+2OllGU6YFLs99960UD4Dib1kFovVgs59MTXwpFdVoSMZoQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.5.tgz", - "integrity": "sha512-ne0GFdNLsm4veXbTnYAWjbx3shpNKZJUd6XpNbKNUZaNllDZfYQt0/zRqOg0sc7O8GQ+PjSMv9IpIEULXVTVmg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.5.tgz", - "integrity": "sha512-wvAoHEN+gJ/22gnvhZnS/+2H14HyAxM07m59RSLn3iXrQsdS518jnEWRBnJz3fR6BJa+VUTo0NxYjGaNt7RA7Q==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.5.tgz", - "integrity": "sha512-7EgFyP2zjO065XTfdCxiXVEk+f83RQ1JsryN1X/VSX2li9rnHAt2swRbpoz5Vlrl6qjHrCmq5b6yxD13z6RheA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-mips64le": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.5.tgz", - "integrity": "sha512-KdnSkHxWrJ6Y40ABu+ipTZeRhFtc8dowGyFsZY5prsmMSr1ZTG9zQawguN4/tunJ0wy3+kD54GaGwdcpwWAvZQ==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-ppc64le": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.5.tgz", - "integrity": "sha512-QdRHGeZ2ykl5P0KRmfGBZIHmqcwIsUKWmmpZTOq573jRWwmpfRmS7xOhmDHBj9pxv+6qRMH8tLr2fe+ZKQvCYw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-riscv64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.5.tgz", - "integrity": "sha512-p+WE6RX+jNILsf+exR29DwgV6B73khEQV0qWUbzxaycxawZ8NE0wA6HnnTxbiw5f4Gx9sJDUBemh9v49lKOORA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-s390x": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.5.tgz", - "integrity": "sha512-J2ngOB4cNzmqLHh6TYMM/ips8aoZIuzxJnDdWutBw5482jGXiOzsPoEF4j2WJ2mGnm7FBCO4StGcwzOgic70JQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-netbsd-64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.5.tgz", - "integrity": "sha512-MmKUYGDizYjFia0Rwt8oOgmiFH7zaYlsoQ3tIOfPxOqLssAsEgG0MUdRDm5lliqjiuoog8LyDu9srQk5YwWF3w==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-openbsd-64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.5.tgz", - "integrity": "sha512-2mMFfkLk3oPWfopA9Plj4hyhqHNuGyp5KQyTT9Rc8hFd8wAn5ZrbJg+gNcLMo2yzf8Uiu0RT6G9B15YN9WQyMA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-sunos-64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.5.tgz", - "integrity": "sha512-2sIzhMUfLNoD+rdmV6AacilCHSxZIoGAU2oT7XmJ0lXcZWnCvCtObvO6D4puxX9YRE97GodciRGDLBaiC6x1SA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-wasm": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.15.5.tgz", - "integrity": "sha512-lTJOEKekN/4JI/eOEq0wLcx53co2N6vaT/XjBz46D1tvIVoUEyM0o2K6txW6gEotf31szFD/J1PbxmnbkGlK9A==", - "dev": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-32": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.5.tgz", - "integrity": "sha512-e+duNED9UBop7Vnlap6XKedA/53lIi12xv2ebeNS4gFmu7aKyTrok7DPIZyU5w/ftHD4MUDs5PJUkQPP9xJRzg==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.5.tgz", - "integrity": "sha512-v+PjvNtSASHOjPDMIai9Yi+aP+Vwox+3WVdg2JB8N9aivJ7lyhp4NVU+J0MV2OkWFPnVO8AE/7xH+72ibUUEnw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-arm64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.5.tgz", - "integrity": "sha512-Yz8w/D8CUPYstvVQujByu6mlf48lKmXkq6bkeSZZxTA626efQOJb26aDGLzmFWx6eg/FwrXgt6SZs9V8Pwy/aA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/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, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/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, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eventemitter-asyncresource": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", - "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", - "dev": true - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exponential-backoff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", - "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", - "dev": true - }, - "node_modules/express": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", - "dev": true, - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.2", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.6.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true - }, - "node_modules/express/node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "node_modules/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, - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/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 - }, - "node_modules/fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", - "dev": true, - "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" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "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" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/finalhandler/node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", - "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", - "dev": true, - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://www.patreon.com/infusion" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs-monkey": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz", - "integrity": "sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==", - "dev": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/gauge": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", - "dev": true, - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", - "dev": true, - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "node_modules/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 - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "dev": true - }, - "node_modules/hdr-histogram-js": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", - "integrity": "sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==", - "dev": true, - "dependencies": { - "@assemblyscript/loader": "^0.10.1", - "base64-js": "^1.2.0", - "pako": "^1.0.3" - } - }, - "node_modules/hdr-histogram-percentiles-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", - "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", - "dev": true - }, - "node_modules/hosted-git-info": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz", - "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", - "dev": true, - "dependencies": { - "lru-cache": "^7.5.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "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" - } - }, - "node_modules/hpack.js/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/hpack.js/node_modules/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, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/html-encoding-sniffer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", - "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", - "dependencies": { - "whatwg-encoding": "^3.1.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/html-entities": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", - "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" - } - ] - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "dev": true - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "dev": true - }, - "node_modules/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, - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", - "dev": true, - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "dev": true, - "dependencies": { - "ms": "^2.0.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/ignore-walk": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz", - "integrity": "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==", - "dev": true, - "dependencies": { - "minimatch": "^5.0.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/image-size": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", - "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", - "dev": true, - "optional": true, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/immutable": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.1.tgz", - "integrity": "sha512-lj9cnmB/kVS0QHsJnYKD1uo3o39nrbKxszjnqS9Fr6NB7bZzW45U6WSGBPKXDL/CvDKqDNPA4r3DoDQ8GTxo2A==", - "dev": true - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/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 - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-3.0.0.tgz", - "integrity": "sha512-TxYQaeNW/N8ymDvwAxPyRbhMBtnEwuvaTYpOQkFx1nSeusgezHniEc/l35Vo4iCq/mMiTJbpD7oYxN98hFlfmw==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/inquirer": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz", - "integrity": "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/inquirer/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/inquirer/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/inquirer/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/inquirer/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/inquirer/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/inquirer/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/inversify": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/inversify/-/inversify-6.0.1.tgz", - "integrity": "sha512-B3ex30927698TJENHR++8FfEaJGqoWOgI6ZY5Ht/nLUsFCwHn6akbwtnUAPCgUepAnTpe2qHxhDNjoKLyz6rgQ==" - }, - "node_modules/ip-address": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", - "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", - "dev": true, - "dependencies": { - "jsbn": "1.1.0", - "sprintf-js": "^1.1.3" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/ip-address/node_modules/sprintf-js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", - "dev": true - }, - "node_modules/ipaddr.js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", - "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "dev": true - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/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, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-what": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", - "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", - "dev": true - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/isbinaryfile": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", - "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", - "dev": true, - "engines": { - "node": ">= 8.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/gjtorikian/" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isomorphic-dompurify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isomorphic-dompurify/-/isomorphic-dompurify-2.0.0.tgz", - "integrity": "sha512-BJvrSQzg7jleSaySaWyhzGqH9/QxYc3sflm5fvjcXWAQcHQvQPQdCN0ORyqvMqnQDbwFuZXvqh2IcuVa3dG/DA==", - "dependencies": { - "@types/dompurify": "^3.0.3", - "dompurify": "^3.0.6", - "jsdom": "^23.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", - "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jackspeak": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.2.tgz", - "integrity": "sha512-mgNtVv4vUuaKA97yxUHoA3+FkuhtxkjdXEWOyB/N76fjy0FjezEt34oy3epBtvCvS+7DyKwqCFWx/oJLV5+kCg==", - "dev": true, - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jasmine-core": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.6.0.tgz", - "integrity": "sha512-O236+gd0ZXS8YAjFx8xKaJ94/erqUliEkJTDedyE7iHvv4ZVqi+q+8acJxu05/WJDKm512EUNn809In37nWlAQ==", - "dev": true - }, - "node_modules/javascript-natural-sort": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", - "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==", - "dev": true - }, - "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jiti": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.19.1.tgz", - "integrity": "sha512-oVhqoRDaBXf7sjkll95LHVS6Myyyb1zaunVwk4Z0+WPSW4gjS0pl01zYKHScTuyEhQsFxV5L4DR5r+YqSyqyyg==", - "dev": true, - "bin": { - "jiti": "bin/jiti.js" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsbn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", - "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", - "dev": true - }, - "node_modules/jsdom": { - "version": "23.0.1", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-23.0.1.tgz", - "integrity": "sha512-2i27vgvlUsGEBO9+/kJQRbtqtm+191b5zAZrU/UezVmnC2dlDAFLgDYJvAEi94T4kjsRKkezEtLQTgsNEsW2lQ==", - "dependencies": { - "cssstyle": "^3.0.0", - "data-urls": "^5.0.0", - "decimal.js": "^10.4.3", - "form-data": "^4.0.0", - "html-encoding-sniffer": "^4.0.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.2", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.7", - "parse5": "^7.1.2", - "rrweb-cssom": "^0.6.0", - "saxes": "^6.0.0", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.3", - "w3c-xmlserializer": "^5.0.0", - "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^3.1.1", - "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.0.0", - "ws": "^8.14.2", - "xml-name-validator": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "canvas": "^2.11.2" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jsdom/node_modules/agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/jsdom/node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/jsdom/node_modules/http-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", - "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/jsdom/node_modules/https-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", - "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", - "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/jsdom/node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/jsdom/node_modules/tr46": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz", - "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==", - "dependencies": { - "punycode": "^2.3.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/jsdom/node_modules/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "engines": { - "node": ">=12" - } - }, - "node_modules/jsdom/node_modules/whatwg-url": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.0.0.tgz", - "integrity": "sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==", - "dependencies": { - "tr46": "^5.0.0", - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/json-stable-stringify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.2.tgz", - "integrity": "sha512-eunSSaEnxV12z+Z73y/j5N37/In40GK4GmsSy+tEHJMxknvqnA7/djeYtAgW0GsWHUfg+847WJjKaEylk2y09g==", - "dependencies": { - "jsonify": "^0.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonc-parser": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.1.0.tgz", - "integrity": "sha512-DRf0QjnNeCUds3xTjKlQQ3DpJD51GvDjJfnxUVWg6PZTo2otSm+slzNAxU/35hF8/oJIKoG9slq30JYOsF2azg==", - "dev": true - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", - "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dev": true, - "engines": [ - "node >= 0.2.0" - ] - }, - "node_modules/karma": { - "version": "6.4.3", - "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.3.tgz", - "integrity": "sha512-LuucC/RE92tJ8mlCwqEoRWXP38UMAqpnq98vktmS9SznSoUPPUJQbc91dHcxcunROvfQjdORVA/YFviH+Xci9Q==", - "dev": true, - "dependencies": { - "@colors/colors": "1.5.0", - "body-parser": "^1.19.0", - "braces": "^3.0.2", - "chokidar": "^3.5.1", - "connect": "^3.7.0", - "di": "^0.0.1", - "dom-serialize": "^2.2.1", - "glob": "^7.1.7", - "graceful-fs": "^4.2.6", - "http-proxy": "^1.18.1", - "isbinaryfile": "^4.0.8", - "lodash": "^4.17.21", - "log4js": "^6.4.1", - "mime": "^2.5.2", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.5", - "qjobs": "^1.2.0", - "range-parser": "^1.2.1", - "rimraf": "^3.0.2", - "socket.io": "^4.7.2", - "source-map": "^0.6.1", - "tmp": "^0.2.1", - "ua-parser-js": "^0.7.30", - "yargs": "^16.1.1" - }, - "bin": { - "karma": "bin/karma" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/karma-chrome-launcher": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.2.0.tgz", - "integrity": "sha512-rE9RkUPI7I9mAxByQWkGJFXfFD6lE4gC5nPuZdobf/QdTEJI6EU4yIay/cfU/xV4ZxlM5JiTv7zWYgA64NpS5Q==", - "dev": true, - "dependencies": { - "which": "^1.2.1" - } - }, - "node_modules/karma-coverage": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.2.1.tgz", - "integrity": "sha512-yj7hbequkQP2qOSb20GuNSIyE//PgJWHwC2IydLE6XRtsnaflv+/OSGNssPjobYUlhVVagy99TQpqUt3vAUG7A==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.1", - "istanbul-reports": "^3.0.5", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/karma-coverage/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/karma-coverage/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/karma-jasmine": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-5.1.0.tgz", - "integrity": "sha512-i/zQLFrfEpRyQoJF9fsCdTMOF5c2dK7C7OmsuKg2D0YSsuZSfQDiLuaiktbuio6F2wiCsZSnSnieIQ0ant/uzQ==", - "dev": true, - "dependencies": { - "jasmine-core": "^4.1.0" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "karma": "^6.0.0" - } - }, - "node_modules/karma-jasmine-html-reporter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-2.1.0.tgz", - "integrity": "sha512-sPQE1+nlsn6Hwb5t+HHwyy0A1FNCVKuL1192b+XNauMYWThz2kweiBVW1DqloRpVvZIJkIoHVB7XRpK78n1xbQ==", - "dev": true, - "peerDependencies": { - "jasmine-core": "^4.0.0 || ^5.0.0", - "karma": "^6.0.0", - "karma-jasmine": "^5.0.0" - } - }, - "node_modules/karma-source-map-support": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", - "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", - "dev": true, - "dependencies": { - "source-map-support": "^0.5.5" - } - }, - "node_modules/karma/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/karma/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/karma/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/karma/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/karma/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/karma/node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, - "node_modules/karma/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/karma/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/klona": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", - "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/less": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/less/-/less-4.1.3.tgz", - "integrity": "sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==", - "dev": true, - "dependencies": { - "copy-anything": "^2.0.1", - "parse-node-version": "^1.0.1", - "tslib": "^2.3.0" - }, - "bin": { - "lessc": "bin/lessc" - }, - "engines": { - "node": ">=6" - }, - "optionalDependencies": { - "errno": "^0.1.1", - "graceful-fs": "^4.1.2", - "image-size": "~0.5.0", - "make-dir": "^2.1.0", - "mime": "^1.4.1", - "needle": "^3.1.0", - "source-map": "~0.6.0" - } - }, - "node_modules/less-loader": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-11.0.0.tgz", - "integrity": "sha512-9+LOWWjuoectIEx3zrfN83NAGxSUB5pWEabbbidVQVgZhN+wN68pOvuyirVlH1IK4VT1f3TmlyvAnCXh8O5KEw==", - "dev": true, - "dependencies": { - "klona": "^2.0.4" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "less": "^3.5.0 || ^4.0.0", - "webpack": "^5.0.0" - } - }, - "node_modules/less/node_modules/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, - "optional": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/less/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "optional": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/less/node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/less/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "optional": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/less/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/license-webpack-plugin": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz", - "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==", - "dev": true, - "dependencies": { - "webpack-sources": "^3.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-sources": { - "optional": true - } - } - }, - "node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true, - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", - "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", - "dev": true, - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash-es": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" - }, - "node_modules/lodash.castarray": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", - "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==", - "dev": true - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "node_modules/lodash.isempty": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", - "integrity": "sha512-oKMuF3xEeqDltrGMfDxAPGIVMSSRv8tbRSODbrs4KGsRRLEhrW8N8Rd4DRgB2+621hY8A8XwwrTVhXWpxFvMzg==" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lodash.transform": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.transform/-/lodash.transform-4.6.0.tgz", - "integrity": "sha512-LO37ZnhmBVx0GvOU/caQuipEh4GN82TcWv3yHlebGDgOxbxiwwzW5Pcx2AcvpIv2WmvmSMoC492yQFNhy/l/UQ==" - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/log-symbols/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/log4js": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz", - "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==", - "dev": true, - "dependencies": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "flatted": "^3.2.7", - "rfdc": "^1.3.0", - "streamroller": "^3.1.5" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/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, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/magic-string": { - "version": "0.26.2", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.2.tgz", - "integrity": "sha512-NzzlXpclt5zAbmo6h6jNc8zl2gNRGHvmsZW4IvZhTC4W7k4OlLP+S5YLussa/r3ixNT66KOQfNORlXHSOy/X4A==", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.8" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/make-fetch-happen": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", - "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", - "dev": true, - "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^10.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/make-fetch-happen/node_modules/@npmcli/fs": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", - "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", - "dev": true, - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/make-fetch-happen/node_modules/cacache": { - "version": "17.1.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.3.tgz", - "integrity": "sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==", - "dev": true, - "dependencies": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/make-fetch-happen/node_modules/fs-minipass": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.2.tgz", - "integrity": "sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g==", - "dev": true, - "dependencies": { - "minipass": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/make-fetch-happen/node_modules/glob": { - "version": "10.3.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.3.tgz", - "integrity": "sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - }, - "bin": { - "glob": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/make-fetch-happen/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/make-fetch-happen/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/make-fetch-happen/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/make-fetch-happen/node_modules/ssri": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", - "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", - "dev": true, - "dependencies": { - "minipass": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/make-fetch-happen/node_modules/unique-filename": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", - "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", - "dev": true, - "dependencies": { - "unique-slug": "^4.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/make-fetch-happen/node_modules/unique-slug": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", - "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/marked": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/marked/-/marked-11.1.1.tgz", - "integrity": "sha512-EgxRjgK9axsQuUa/oKMx5DEY8oXpKJfk61rT5iY3aRlgU6QJtUcxU5OAymdhCvWvhYcd9FKmO5eQoX8m9VGJXg==", - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", - "dev": true, - "dependencies": { - "fs-monkey": "^1.0.4" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.1.tgz", - "integrity": "sha512-wd+SD57/K6DiV7jIR34P+s3uckTRuQvx0tKPcvjFlrEylk6P4mQ2KSWk1hblj1Kxaqok7LogKOieygXqBczNlg==", - "dev": true, - "dependencies": { - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/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 - }, - "node_modules/minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-fetch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz", - "integrity": "sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==", - "dev": true, - "dependencies": { - "minipass": "^5.0.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/minipass-fetch/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-json-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", - "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", - "dev": true, - "dependencies": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } - }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "dev": true, - "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/needle": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-3.2.0.tgz", - "integrity": "sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==", - "dev": true, - "optional": true, - "dependencies": { - "debug": "^3.2.6", - "iconv-lite": "^0.6.3", - "sax": "^1.2.4" - }, - "bin": { - "needle": "bin/needle" - }, - "engines": { - "node": ">= 4.4.x" - } - }, - "node_modules/needle/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "optional": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/needle/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node_modules/ng2-charts": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ng2-charts/-/ng2-charts-4.1.1.tgz", - "integrity": "sha512-iHwXDbmX86lfeH8VRcsaW2tJATsuAZo4kvvC/Yk2l35zOHjevja1qBvO6BAibiDazi9r9aS6ZRJOqWPsz1pP2w==", - "dependencies": { - "lodash-es": "^4.17.15", - "tslib": "^2.3.0" - }, - "peerDependencies": { - "@angular/cdk": ">=14.0.0", - "@angular/common": ">=14.0.0", - "@angular/core": ">=14.0.0", - "chart.js": "^3.4.0 || ^4.0.0", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/ngx-build-plus": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/ngx-build-plus/-/ngx-build-plus-14.0.0.tgz", - "integrity": "sha512-Rq23dNx9jL34+hbCrSa7LYrkopZpKN6WGAfPRaFlCeuJ/b5YIPVk8cePjj3/CDZr7LlNPedTrEtMC1dpG4AXww==", - "dev": true, - "dependencies": { - "@angular-devkit/build-angular": ">=14.0.0", - "@schematics/angular": ">=14.0.0", - "webpack-merge": "^5.0.0" - }, - "peerDependencies": { - "@angular-devkit/build-angular": ">=12.0.0", - "rxjs": ">= 6.0.0" - } - }, - "node_modules/ngx-json-viewer": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ngx-json-viewer/-/ngx-json-viewer-3.2.1.tgz", - "integrity": "sha512-TTHtXsrBX+IXPqqAIsxklHPqSNmyGeQaziFZbCDJq1PnPOQmTrEHfwNrzN3LnWGhf7UxeM1cK0njegVPChwEcg==", - "dependencies": { - "tslib": "^2.3.0" - } - }, - "node_modules/nice-napi": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", - "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "!win32" - ], - "dependencies": { - "node-addon-api": "^3.0.0", - "node-gyp-build": "^4.2.2" - } - }, - "node_modules/node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true, - "optional": true - }, - "node_modules/node-fetch": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", - "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "dev": true, - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-gyp": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz", - "integrity": "sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==", - "dev": true, - "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^11.0.3", - "nopt": "^6.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": "^12.13 || ^14.13 || >=16" - } - }, - "node_modules/node-gyp-build": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", - "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", - "dev": true, - "optional": true, - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/node-gyp/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/node-gyp/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/node-gyp/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/node-gyp/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", - "dev": true - }, - "node_modules/nopt": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", - "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", - "dev": true, - "dependencies": { - "abbrev": "^1.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/normalize-package-data": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.1.tgz", - "integrity": "sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg==", - "dev": true, - "dependencies": { - "hosted-git-info": "^5.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-bundled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", - "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", - "dev": true, - "dependencies": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "node_modules/npm-install-checks": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-5.0.0.tgz", - "integrity": "sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA==", - "dev": true, - "dependencies": { - "semver": "^7.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", - "dev": true - }, - "node_modules/npm-package-arg": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", - "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", - "dev": true, - "dependencies": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm-packlist": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.3.tgz", - "integrity": "sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg==", - "dev": true, - "dependencies": { - "glob": "^8.0.1", - "ignore-walk": "^5.0.1", - "npm-bundled": "^2.0.0", - "npm-normalize-package-bin": "^2.0.0" - }, - "bin": { - "npm-packlist": "bin/index.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm-packlist/node_modules/npm-bundled": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-2.0.1.tgz", - "integrity": "sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw==", - "dev": true, - "dependencies": { - "npm-normalize-package-bin": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm-packlist/node_modules/npm-normalize-package-bin": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", - "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm-pick-manifest": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.1.tgz", - "integrity": "sha512-IA8+tuv8KujbsbLQvselW2XQgmXWS47t3CB0ZrzsRZ82DbDfkcFunOaPm4X7qNuhMfq+FmV7hQT4iFVpHqV7mg==", - "dev": true, - "dependencies": { - "npm-install-checks": "^5.0.0", - "npm-normalize-package-bin": "^1.0.1", - "npm-package-arg": "^9.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm-registry-fetch": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.3.1.tgz", - "integrity": "sha512-eukJPi++DKRTjSBRcDZSDDsGqRK3ehbxfFUcgaRd0Yp6kRwOwh2WVn0r+8rMB4nnuzvAk6rQVzl6K5CkYOmnvw==", - "dev": true, - "dependencies": { - "make-fetch-happen": "^10.0.6", - "minipass": "^3.1.6", - "minipass-fetch": "^2.0.3", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^9.0.1", - "proc-log": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm-registry-fetch/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/npm-registry-fetch/node_modules/make-fetch-happen": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", - "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", - "dev": true, - "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^16.1.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^9.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm-registry-fetch/node_modules/minipass-fetch": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", - "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", - "dev": true, - "dependencies": { - "minipass": "^3.1.6", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npmlog": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", - "dev": true, - "dependencies": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/nwsapi": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", - "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==" - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/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, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "dev": true, - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ora/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/ora/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/ora/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/ora/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "dev": true, - "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-retry/node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pacote": { - "version": "13.6.2", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.6.2.tgz", - "integrity": "sha512-Gu8fU3GsvOPkak2CkbojR7vjs3k3P9cA6uazKTHdsdV0gpCEQq2opelnEv30KRQWgVzP5Vd/5umjcedma3MKtg==", - "dev": true, - "dependencies": { - "@npmcli/git": "^3.0.0", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/promise-spawn": "^3.0.0", - "@npmcli/run-script": "^4.1.0", - "cacache": "^16.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "infer-owner": "^1.0.4", - "minipass": "^3.1.6", - "mkdirp": "^1.0.4", - "npm-package-arg": "^9.0.0", - "npm-packlist": "^5.1.0", - "npm-pick-manifest": "^7.0.0", - "npm-registry-fetch": "^13.0.1", - "proc-log": "^2.0.0", - "promise-retry": "^2.0.1", - "read-package-json": "^5.0.0", - "read-package-json-fast": "^2.0.3", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11" - }, - "bin": { - "pacote": "lib/bin.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-node-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", - "optional": true - }, - "node_modules/parse5-html-rewriting-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-6.0.1.tgz", - "integrity": "sha512-vwLQzynJVEfUlURxgnf51yAJDQTtVpNyGD8tKi2Za7m+akukNHxCcUQMAa/mUGLhCeicFdpy7Tlvj8ZNKadprg==", - "dev": true, - "dependencies": { - "parse5": "^6.0.1", - "parse5-sax-parser": "^6.0.1" - } - }, - "node_modules/parse5-html-rewriting-stream/node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", - "dev": true, - "dependencies": { - "parse5": "^6.0.1" - } - }, - "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "node_modules/parse5-sax-parser": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-6.0.1.tgz", - "integrity": "sha512-kXX+5S81lgESA0LsDuGjAlBybImAChYRMT+/uKCEXFBFOeEhS52qUCydGhU3qLRD8D9DVjaUo821WK7DM4iCeg==", - "dev": true, - "dependencies": { - "parse5": "^6.0.1" - } - }, - "node_modules/parse5-sax-parser/node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", - "dev": true, - "dependencies": { - "lru-cache": "^9.1.1 || ^10.0.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.0.tgz", - "integrity": "sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==", - "dev": true, - "engines": { - "node": "14 || >=16.14" - } - }, - "node_modules/path-scurry/node_modules/minipass": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.2.tgz", - "integrity": "sha512-eL79dXrE1q9dBbDCLg7xfn/vl7MS4F1gvJAgjJrQli/jbQWdUttuVawphqpffoIYfRdq78LHx6GP4bU/EQ2ATA==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dev": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/piscina": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz", - "integrity": "sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA==", - "dev": true, - "dependencies": { - "eventemitter-asyncresource": "^1.0.0", - "hdr-histogram-js": "^2.0.1", - "hdr-histogram-percentiles-obj": "^3.0.0" - }, - "optionalDependencies": { - "nice-napi": "^1.0.2" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-attribute-case-insensitive": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz", - "integrity": "sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-clamp": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", - "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=7.6.0" - }, - "peerDependencies": { - "postcss": "^8.4.6" - } - }, - "node_modules/postcss-color-functional-notation": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz", - "integrity": "sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-color-hex-alpha": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz", - "integrity": "sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-color-rebeccapurple": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz", - "integrity": "sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-custom-media": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz", - "integrity": "sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.3" - } - }, - "node_modules/postcss-custom-properties": { - "version": "12.1.11", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz", - "integrity": "sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-custom-selectors": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz", - "integrity": "sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.3" - } - }, - "node_modules/postcss-dir-pseudo-class": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz", - "integrity": "sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-double-position-gradients": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz", - "integrity": "sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==", - "dev": true, - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-env-function": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz", - "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-focus-visible": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", - "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.9" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-focus-within": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", - "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.9" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-font-variant": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", - "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", - "dev": true, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-gap-properties": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz", - "integrity": "sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==", - "dev": true, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-image-set-function": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz", - "integrity": "sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-import": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", - "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-initial": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", - "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", - "dev": true, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-js": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", - "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", - "dev": true, - "dependencies": { - "camelcase-css": "^2.0.1" - }, - "engines": { - "node": "^12 || ^14 || >= 16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.4.21" - } - }, - "node_modules/postcss-lab-function": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz", - "integrity": "sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==", - "dev": true, - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-load-config": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", - "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", - "dev": true, - "dependencies": { - "lilconfig": "^2.0.5", - "yaml": "^2.1.1" - }, - "engines": { - "node": ">= 14" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/postcss-loader": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.3.tgz", - "integrity": "sha512-YgO/yhtevGO/vJePCQmTxiaEwER94LABZN0ZMT4A0vsak9TpO+RvKRs7EmJ8peIlB9xfXCsS7M8LjqncsUZ5HA==", - "dev": true, - "dependencies": { - "cosmiconfig": "^8.2.0", - "jiti": "^1.18.2", - "semver": "^7.3.8" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - } - }, - "node_modules/postcss-logical": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", - "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", - "dev": true, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-media-minmax": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", - "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", - "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-nested": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", - "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.11" - }, - "engines": { - "node": ">=12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.2.14" - } - }, - "node_modules/postcss-nesting": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz", - "integrity": "sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==", - "dev": true, - "dependencies": { - "@csstools/selector-specificity": "^2.0.0", - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-opacity-percentage": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.3.tgz", - "integrity": "sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==", - "dev": true, - "funding": [ - { - "type": "kofi", - "url": "https://ko-fi.com/mrcgrtz" - }, - { - "type": "liberapay", - "url": "https://liberapay.com/mrcgrtz" - } - ], - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-overflow-shorthand": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz", - "integrity": "sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-page-break": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", - "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", - "dev": true, - "peerDependencies": { - "postcss": "^8" - } - }, - "node_modules/postcss-place": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.5.tgz", - "integrity": "sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-preset-env": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.8.0.tgz", - "integrity": "sha512-leqiqLOellpLKfbHkD06E04P6d9ZQ24mat6hu4NSqun7WG0UhspHR5Myiv/510qouCjoo4+YJtNOqg5xHaFnCA==", - "dev": true, - "dependencies": { - "@csstools/postcss-cascade-layers": "^1.0.5", - "@csstools/postcss-color-function": "^1.1.1", - "@csstools/postcss-font-format-keywords": "^1.0.1", - "@csstools/postcss-hwb-function": "^1.0.2", - "@csstools/postcss-ic-unit": "^1.0.1", - "@csstools/postcss-is-pseudo-class": "^2.0.7", - "@csstools/postcss-nested-calc": "^1.0.0", - "@csstools/postcss-normalize-display-values": "^1.0.1", - "@csstools/postcss-oklab-function": "^1.1.1", - "@csstools/postcss-progressive-custom-properties": "^1.3.0", - "@csstools/postcss-stepped-value-functions": "^1.0.1", - "@csstools/postcss-text-decoration-shorthand": "^1.0.0", - "@csstools/postcss-trigonometric-functions": "^1.0.2", - "@csstools/postcss-unset-value": "^1.0.2", - "autoprefixer": "^10.4.8", - "browserslist": "^4.21.3", - "css-blank-pseudo": "^3.0.3", - "css-has-pseudo": "^3.0.4", - "css-prefers-color-scheme": "^6.0.3", - "cssdb": "^7.0.0", - "postcss-attribute-case-insensitive": "^5.0.2", - "postcss-clamp": "^4.1.0", - "postcss-color-functional-notation": "^4.2.4", - "postcss-color-hex-alpha": "^8.0.4", - "postcss-color-rebeccapurple": "^7.1.1", - "postcss-custom-media": "^8.0.2", - "postcss-custom-properties": "^12.1.8", - "postcss-custom-selectors": "^6.0.3", - "postcss-dir-pseudo-class": "^6.0.5", - "postcss-double-position-gradients": "^3.1.2", - "postcss-env-function": "^4.0.6", - "postcss-focus-visible": "^6.0.4", - "postcss-focus-within": "^5.0.4", - "postcss-font-variant": "^5.0.0", - "postcss-gap-properties": "^3.0.5", - "postcss-image-set-function": "^4.0.7", - "postcss-initial": "^4.0.1", - "postcss-lab-function": "^4.2.1", - "postcss-logical": "^5.0.4", - "postcss-media-minmax": "^5.0.0", - "postcss-nesting": "^10.1.10", - "postcss-opacity-percentage": "^1.1.2", - "postcss-overflow-shorthand": "^3.0.4", - "postcss-page-break": "^3.0.4", - "postcss-place": "^7.0.5", - "postcss-pseudo-class-any-link": "^7.1.6", - "postcss-replace-overflow-wrap": "^4.0.0", - "postcss-selector-not": "^6.0.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-pseudo-class-any-link": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz", - "integrity": "sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-replace-overflow-wrap": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", - "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", - "dev": true, - "peerDependencies": { - "postcss": "^8.0.3" - } - }, - "node_modules/postcss-scss": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz", - "integrity": "sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss-scss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "engines": { - "node": ">=12.0" - }, - "peerDependencies": { - "postcss": "^8.4.29" - } - }, - "node_modules/postcss-selector-not": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz", - "integrity": "sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prettier-plugin-organize-attributes": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/prettier-plugin-organize-attributes/-/prettier-plugin-organize-attributes-0.0.5.tgz", - "integrity": "sha512-dSts16q8wd+oq8Zwk5mwmYXo1aN3B+ZkEJqx/ar5fedNHdOvx7S4XDMH/pNK7rmBW0bPXkp/kJX5gAANsWzh3A==", - "dev": true, - "engines": { - "node": ">=11.0.0" - }, - "peerDependencies": { - "prettier": "^2.0.0" - } - }, - "node_modules/pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/proc-log": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", - "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/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 - }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true - }, - "node_modules/promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "dev": true, - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-addr/node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true, - "optional": true - }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/qjobs": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", - "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", - "dev": true, - "engines": { - "node": ">=0.9" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dev": true, - "dependencies": { - "pify": "^2.3.0" - } - }, - "node_modules/read-package-json": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.2.tgz", - "integrity": "sha512-BSzugrt4kQ/Z0krro8zhTwV1Kd79ue25IhNN/VtHFy1mG/6Tluyi+msc0UpwaoQzxSHa28mntAjIZY6kEgfR9Q==", - "dev": true, - "dependencies": { - "glob": "^8.0.1", - "json-parse-even-better-errors": "^2.3.1", - "normalize-package-data": "^4.0.0", - "npm-normalize-package-bin": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/read-package-json-fast": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", - "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", - "dev": true, - "dependencies": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/read-package-json/node_modules/npm-normalize-package-bin": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", - "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/reflect-metadata": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", - "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", - "dev": true - }, - "node_modules/regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regex-parser": { - "version": "2.2.11", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", - "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", - "dev": true - }, - "node_modules/regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", - "dev": true, - "dependencies": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": true, - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" - }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-url-loader": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", - "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", - "dev": true, - "dependencies": { - "adjust-sourcemap-loader": "^4.0.0", - "convert-source-map": "^1.7.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.14", - "source-map": "0.6.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/resolve-url-loader/node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/resolve-url-loader/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/rrweb-cssom": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", - "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==" - }, - "node_modules/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, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/sass": { - "version": "1.54.4", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.54.4.tgz", - "integrity": "sha512-3tmF16yvnBwtlPrNBHw/H907j8MlOX8aTBnlNX1yrKx24RKcJGPyLhFUwkoKBKesR3unP93/2z14Ll8NicwQUA==", - "dev": true, - "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/sass-loader": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.0.2.tgz", - "integrity": "sha512-BbiqbVmbfJaWVeOOAu2o7DhYWtcNmTfvroVgFXa6k2hHheMxNAeDHLNoDy/Q5aoaVlz0LH+MbMktKwm9vN/j8Q==", - "dev": true, - "dependencies": { - "klona": "^2.0.4", - "neo-async": "^2.6.2" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "fibers": ">= 3.1.0", - "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", - "sass": "^1.3.0", - "sass-embedded": "*", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "fibers": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - } - } - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "node_modules/saxes": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", - "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=v12.22.7" - } - }, - "node_modules/schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/schema-utils/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "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" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/schema-utils/node_modules/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, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/schema-utils/node_modules/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 - }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "dev": true - }, - "node_modules/selfsigned": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", - "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", - "dev": true, - "dependencies": { - "@types/node-forge": "^1.3.0", - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/send/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "dev": true, - "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" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dev": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - }, - "node_modules/serve-index/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dev": true, - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true, - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socket.io": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.4.tgz", - "integrity": "sha512-DcotgfP1Zg9iP/dH9zvAQcWrE0TtbMVwXmlV4T4mqsvY+gw+LqUGPfx2AoVyRk0FLME+GQhufDMyacFmw7ksqw==", - "dev": true, - "dependencies": { - "accepts": "~1.3.4", - "base64id": "~2.0.0", - "cors": "~2.8.5", - "debug": "~4.3.2", - "engine.io": "~6.5.2", - "socket.io-adapter": "~2.5.2", - "socket.io-parser": "~4.2.4" - }, - "engines": { - "node": ">=10.2.0" - } - }, - "node_modules/socket.io-adapter": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", - "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", - "dev": true, - "dependencies": { - "debug": "~4.3.4", - "ws": "~8.17.1" - } - }, - "node_modules/socket.io-parser": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", - "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", - "dev": true, - "dependencies": { - "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "dev": true, - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/socks": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.3.tgz", - "integrity": "sha512-vfuYK48HXCTFD03G/1/zkIls3Ebr2YNa4qU9gHDZdblHLiqhJrJGkY3+0Nx0JpN9qBhJbVObc1CNciT1bIZJxw==", - "dev": true, - "dependencies": { - "ip-address": "^9.0.5", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", - "dev": true, - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-4.0.0.tgz", - "integrity": "sha512-i3KVgM3+QPAHNbGavK+VBq03YoJl24m9JWNbLgsjTj8aJzXG9M61bantBTNBt7CNwY2FYf+RJRYJ3pzalKjIrw==", - "dev": true, - "dependencies": { - "abab": "^2.0.6", - "iconv-lite": "^0.6.3", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.72.1" - } - }, - "node_modules/source-map-loader/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "deprecated": "Please use @jridgewell/sourcemap-codec instead", - "dev": true - }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/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 - }, - "node_modules/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, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", - "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", - "dev": true - }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dev": true, - "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" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/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, - "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" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "node_modules/ssri": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", - "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", - "dev": true, - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/streamroller": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz", - "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==", - "dev": true, - "dependencies": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "fs-extra": "^8.1.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/streamroller/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/streamroller/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/streamroller/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/stylus": { - "version": "0.59.0", - "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.59.0.tgz", - "integrity": "sha512-lQ9w/XIOH5ZHVNuNbWW8D822r+/wBSO/d6XvtyHLF7LW4KaCIDeVbvn5DF8fGCJAUCwVhVi/h6J0NUcnylUEjg==", - "dev": true, - "dependencies": { - "@adobe/css-tools": "^4.0.1", - "debug": "^4.3.2", - "glob": "^7.1.6", - "sax": "~1.2.4", - "source-map": "^0.7.3" - }, - "bin": { - "stylus": "bin/stylus" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://opencollective.com/stylus" - } - }, - "node_modules/stylus-loader": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-7.0.0.tgz", - "integrity": "sha512-WTbtLrNfOfLgzTaR9Lj/BPhQroKk/LC1hfTXSUbrxmxgfUo3Y3LpmKRVA2R1XbjvTAvOfaian9vOyfv1z99E+A==", - "dev": true, - "dependencies": { - "fast-glob": "^3.2.11", - "klona": "^2.0.5", - "normalize-path": "^3.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "stylus": ">=0.52.4", - "webpack": "^5.0.0" - } - }, - "node_modules/stylus/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/stylus/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/stylus/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/sucrase": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", - "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "glob": "7.1.6", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "bin": { - "sucrase": "bin/sucrase", - "sucrase-node": "bin/sucrase-node" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/sucrase/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/sucrase/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/sucrase/node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "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" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/sucrase/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/symbol-observable": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", - "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/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==" - }, - "node_modules/tailwindcss": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.3.tgz", - "integrity": "sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==", - "dev": true, - "dependencies": { - "@alloc/quick-lru": "^5.2.0", - "arg": "^5.0.2", - "chokidar": "^3.5.3", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.2.12", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "jiti": "^1.18.2", - "lilconfig": "^2.1.0", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.23", - "postcss-import": "^15.1.0", - "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.1", - "postcss-nested": "^6.0.1", - "postcss-selector-parser": "^6.0.11", - "resolve": "^1.22.2", - "sucrase": "^3.32.0" - }, - "bin": { - "tailwind": "lib/cli.js", - "tailwindcss": "lib/cli.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/tailwindcss/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/tailwindcss/node_modules/resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", - "dev": true, - "dependencies": { - "is-core-module": "^2.11.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", - "dev": true, - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/tar/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/terser": { - "version": "5.14.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", - "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", - "dev": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.9", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", - "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.17", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.16.8" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "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" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/terser-webpack-plugin/node_modules/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, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/terser-webpack-plugin/node_modules/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 - }, - "node_modules/terser-webpack-plugin/node_modules/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 - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/terser-webpack-plugin/node_modules/terser": { - "version": "5.19.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.2.tgz", - "integrity": "sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==", - "dev": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser/node_modules/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 - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/test-exclude/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/test-exclude/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/test-exclude/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dev": true, - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tough-cookie": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", - "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tough-cookie/node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true, - "bin": { - "tree-kill": "cli.js" - } - }, - "node_modules/ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "dev": true - }, - "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typed-assert": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", - "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==", - "dev": true - }, - "node_modules/typescript": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", - "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/ua-parser-js": { - "version": "0.7.35", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.35.tgz", - "integrity": "sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - } - ], - "engines": { - "node": "*" - } - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/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, - "dependencies": { - "unique-slug": "^2.0.0" - } - }, - "node_modules/unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4" - } - }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url-join": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz", - "integrity": "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/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, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/validate-npm-package-name": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", - "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", - "dev": true, - "dependencies": { - "builtins": "^5.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", - "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", - "dependencies": { - "xml-name-validator": "^5.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dev": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dev": true, - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/webpack": { - "version": "5.88.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.2.tgz", - "integrity": "sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==", - "dev": true, - "peer": true, - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.0", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.15.0", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.7", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", - "dev": true, - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-middleware/node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack-dev-server": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.0.tgz", - "integrity": "sha512-L5S4Q2zT57SK7tazgzjMiSMBdsw+rGYIX27MgPgx7LDhWO0lViPrHKoLS7jo5In06PWYAhlYu3PbyoC6yAThbw==", - "dev": true, - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.0.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.4.2" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "dev": true, - "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack-subresource-integrity": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz", - "integrity": "sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==", - "dev": true, - "dependencies": { - "typed-assert": "^1.0.8" - }, - "engines": { - "node": ">= 12" - }, - "peerDependencies": { - "html-webpack-plugin": ">= 5.0.0-beta.1 < 6", - "webpack": "^5.12.0" - }, - "peerDependenciesMeta": { - "html-webpack-plugin": { - "optional": true - } - } - }, - "node_modules/webpack/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "peer": true, - "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" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack/node_modules/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, - "peer": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/webpack/node_modules/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, - "peer": true - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "peer": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/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, - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/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, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/whatwg-encoding": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", - "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", - "dependencies": { - "iconv-lite": "0.6.3" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/whatwg-encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/whatwg-mimetype": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", - "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", - "engines": { - "node": ">=18" - } - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "node_modules/wildcard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", - "dev": true - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xml-name-validator": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", - "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", - "engines": { - "node": ">=18" - } - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/yaml": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", - "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", - "dev": true, - "engines": { - "node": ">= 14" - } - }, - "node_modules/yargs": { - "version": "17.5.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", - "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/zod": { - "version": "3.22.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", - "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, - "node_modules/zone.js": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.12.0.tgz", - "integrity": "sha512-XtC+I5dXU14HrzidAKBNMqneIVUykLEAA1x+v4KVrd6AUPWlwYORF8KgsVqvgdHiKZ4BkxxjvYi/ksEixTPR0Q==", - "dependencies": { - "tslib": "^2.3.0" - } - } - }, - "dependencies": { - "@adobe/css-tools": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.2.tgz", - "integrity": "sha512-DA5a1C0gD/pLOvhv33YMrbf2FK3oUzwNl9oOJqE4XVjuEtt6XIakRcsd7eLiOSPkp1kTRQGICTA8cKra/vFbjw==", - "dev": true - }, - "@alloc/quick-lru": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", - "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", - "dev": true - }, - "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@angular-devkit/architect": { - "version": "0.1402.13", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1402.13.tgz", - "integrity": "sha512-n0ISBuvkZHoOpAzuAZql1TU9VLHUE9e/a9g4VNOPHewjMzpN02VqeGKvJfOCKtzkCs6gVssIlILm2/SXxkIFxQ==", - "dev": true, - "requires": { - "@angular-devkit/core": "14.2.13", - "rxjs": "6.6.7" - }, - "dependencies": { - "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" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@angular-devkit/build-angular": { - "version": "14.2.13", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-14.2.13.tgz", - "integrity": "sha512-FJZKQ3xYFvEJ807sxVy4bCVyGU2NMl3UUPNfLIdIdzwwDEP9tx/cc+c4VtVPEZZfU8jVenu8XOvL6L0vpjt3yg==", - "dev": true, - "requires": { - "@ampproject/remapping": "2.2.0", - "@angular-devkit/architect": "0.1402.13", - "@angular-devkit/build-webpack": "0.1402.13", - "@angular-devkit/core": "14.2.13", - "@babel/core": "7.18.10", - "@babel/generator": "7.18.12", - "@babel/helper-annotate-as-pure": "7.18.6", - "@babel/plugin-proposal-async-generator-functions": "7.18.10", - "@babel/plugin-transform-async-to-generator": "7.18.6", - "@babel/plugin-transform-runtime": "7.18.10", - "@babel/preset-env": "7.18.10", - "@babel/runtime": "7.18.9", - "@babel/template": "7.18.10", - "@discoveryjs/json-ext": "0.5.7", - "@ngtools/webpack": "14.2.13", - "ansi-colors": "4.1.3", - "babel-loader": "8.2.5", - "babel-plugin-istanbul": "6.1.1", - "browserslist": "^4.9.1", - "cacache": "16.1.2", - "copy-webpack-plugin": "11.0.0", - "critters": "0.0.16", - "css-loader": "6.7.1", - "esbuild": "0.15.5", - "esbuild-wasm": "0.15.5", - "glob": "8.0.3", - "https-proxy-agent": "5.0.1", - "inquirer": "8.2.4", - "jsonc-parser": "3.1.0", - "karma-source-map-support": "1.4.0", - "less": "4.1.3", - "less-loader": "11.0.0", - "license-webpack-plugin": "4.0.2", - "loader-utils": "3.2.1", - "mini-css-extract-plugin": "2.6.1", - "minimatch": "5.1.0", - "open": "8.4.0", - "ora": "5.4.1", - "parse5-html-rewriting-stream": "6.0.1", - "piscina": "3.2.0", - "postcss": "8.4.31", - "postcss-import": "15.0.0", - "postcss-loader": "7.0.1", - "postcss-preset-env": "7.8.0", - "regenerator-runtime": "0.13.9", - "resolve-url-loader": "5.0.0", - "rxjs": "6.6.7", - "sass": "1.54.4", - "sass-loader": "13.0.2", - "semver": "7.5.3", - "source-map-loader": "4.0.0", - "source-map-support": "0.5.21", - "stylus": "0.59.0", - "stylus-loader": "7.0.0", - "terser": "5.14.2", - "text-table": "0.2.0", - "tree-kill": "1.2.2", - "tslib": "2.4.0", - "webpack": "5.76.1", - "webpack-dev-middleware": "5.3.3", - "webpack-dev-server": "4.11.0", - "webpack-merge": "5.8.0", - "webpack-subresource-integrity": "5.1.0" - }, - "dependencies": { - "@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", - "dev": true - }, - "@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "dev": true, - "requires": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "dev": true - }, - "@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "dev": true, - "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "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" - } - }, - "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, - "requires": {} - }, - "cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "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 - }, - "postcss-import": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.0.0.tgz", - "integrity": "sha512-Y20shPQ07RitgBGv2zvkEAu9bqvrD77C9axhj/aA1BQj4czape2MdClCExvB27EwYEJdGgKZBpKanb0t1rK2Kg==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - } - }, - "postcss-loader": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.1.tgz", - "integrity": "sha512-VRviFEyYlLjctSM93gAZtcJJ/iSkPZ79zWbN/1fSH+NisBByEiVLqpdVDrPLVSi8DX0oJo12kL/GppTBdKVXiQ==", - "dev": true, - "requires": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.5", - "semver": "^7.3.7" - } - }, - "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" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "dev": true - }, - "webpack": { - "version": "5.76.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.76.1.tgz", - "integrity": "sha512-4+YIK4Abzv8172/SGqObnUjaIHjLEuUasz9EwQj/9xmPPkYJy2Mh03Q/lJfSD3YLzbxy5FeTq5Uw0323Oh6SJQ==", - "dev": true, - "requires": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - } - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true - } - } - }, - "@angular-devkit/build-webpack": { - "version": "0.1402.13", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1402.13.tgz", - "integrity": "sha512-K27aJmuw86ZOdiu5PoGeGDJ2v7g2ZCK0bGwc8jzkjTLRfvd4FRKIIZumGv3hbQ3vQRLikiU6WMDRTFyCZky/EA==", - "dev": true, - "requires": { - "@angular-devkit/architect": "0.1402.13", - "rxjs": "6.6.7" - }, - "dependencies": { - "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" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@angular-devkit/core": { - "version": "14.2.13", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-14.2.13.tgz", - "integrity": "sha512-aIefeZcbjghQg/V6U9CTLtyB5fXDJ63KwYqVYkWP+i0XriS5A9puFgq2u/OVsWxAfYvqpDqp5AdQ0g0bi3CAsA==", - "dev": true, - "requires": { - "ajv": "8.11.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.1.0", - "rxjs": "6.6.7", - "source-map": "0.7.4" - }, - "dependencies": { - "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" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@angular-devkit/schematics": { - "version": "14.2.13", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-14.2.13.tgz", - "integrity": "sha512-2zczyeNzeBcrT2HOysv52X9SH3tZoHfWJvVf6H0SIa74rfDKEl7hFpKNXnh3x8sIMLj5mZn05n5RCqGxCczcIg==", - "dev": true, - "requires": { - "@angular-devkit/core": "14.2.13", - "jsonc-parser": "3.1.0", - "magic-string": "0.26.2", - "ora": "5.4.1", - "rxjs": "6.6.7" - }, - "dependencies": { - "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" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "@angular/animations": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-14.3.0.tgz", - "integrity": "sha512-QoBcIKy1ZiU+4qJsAh5Ls20BupWiXiZzKb0s6L9/dntPt5Msr4Ao289XR2P6O1L+kTsCprH9Kt41zyGQ/bkRqg==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/cdk": { - "version": "14.2.7", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-14.2.7.tgz", - "integrity": "sha512-/tEsYaUbDSnfEmKVvAMramIptmhI67O+9STjOV0i+74XR2NospeK0fkbywIANu1n3w6AHGMotvRWJrjmbCElFg==", - "requires": { - "parse5": "^5.0.0", - "tslib": "^2.3.0" - } - }, - "@angular/cli": { - "version": "14.2.13", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-14.2.13.tgz", - "integrity": "sha512-I5EepRem2CCyS3GDzQxZ2ZrqQwVqoGoLY+ZQhsK1QGWUnUyFOjbv3OlUGxRUYwcedu19V1EBAKjmQ96HzMIcVQ==", - "dev": true, - "requires": { - "@angular-devkit/architect": "0.1402.13", - "@angular-devkit/core": "14.2.13", - "@angular-devkit/schematics": "14.2.13", - "@schematics/angular": "14.2.13", - "@yarnpkg/lockfile": "1.1.0", - "ansi-colors": "4.1.3", - "debug": "4.3.4", - "ini": "3.0.0", - "inquirer": "8.2.4", - "jsonc-parser": "3.1.0", - "npm-package-arg": "9.1.0", - "npm-pick-manifest": "7.0.1", - "open": "8.4.0", - "ora": "5.4.1", - "pacote": "13.6.2", - "resolve": "1.22.1", - "semver": "7.5.3", - "symbol-observable": "4.0.0", - "uuid": "8.3.2", - "yargs": "17.5.1" - } - }, - "@angular/common": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-14.3.0.tgz", - "integrity": "sha512-pV9oyG3JhGWeQ+TFB0Qub6a1VZWMNZ6/7zEopvYivdqa5yDLLDSBRWb6P80RuONXyGnM1pa7l5nYopX+r/23GQ==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/compiler": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-14.3.0.tgz", - "integrity": "sha512-E15Rh0t3vA+bctbKnBCaDmLvc3ix+ZBt6yFZmhZalReQ+KpOlvOJv+L9oiFEgg+rYVl2QdvN7US1fvT0PqswLw==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/compiler-cli": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-14.3.0.tgz", - "integrity": "sha512-eoKpKdQ2X6axMgzcPUMZVYl3bIlTMzMeTo5V29No4BzgiUB+QoOTYGNJZkGRyqTNpwD9uSBJvmT2vG9+eC4ghQ==", - "dev": true, - "requires": { - "@babel/core": "^7.17.2", - "chokidar": "^3.0.0", - "convert-source-map": "^1.5.1", - "dependency-graph": "^0.11.0", - "magic-string": "^0.26.0", - "reflect-metadata": "^0.1.2", - "semver": "^7.0.0", - "sourcemap-codec": "^1.4.8", - "tslib": "^2.3.0", - "yargs": "^17.2.1" - } - }, - "@angular/core": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-14.3.0.tgz", - "integrity": "sha512-wYiwItc0Uyn4FWZ/OAx/Ubp2/WrD3EgUJ476y1XI7yATGPF8n9Ld5iCXT08HOvc4eBcYlDfh90kTXR6/MfhzdQ==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/flex-layout": { - "version": "14.0.0-beta.41", - "resolved": "https://registry.npmjs.org/@angular/flex-layout/-/flex-layout-14.0.0-beta.41.tgz", - "integrity": "sha512-x1YcxqkdFlcbVXEy9ebCgW/F+7n/MXkEkwEcVEIPf5v5qn7HZsjQxgIj35Lf0amvMyF7h35prpoxO1uX5+ntFg==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/forms": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-14.3.0.tgz", - "integrity": "sha512-fBZZC2UFMom2AZPjGQzROPXFWO6kvCsPDKctjJwClVC8PuMrkm+RRyiYRdBbt2qxWHEqOZM2OCQo73xUyZOYHw==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/material": { - "version": "14.2.7", - "resolved": "https://registry.npmjs.org/@angular/material/-/material-14.2.7.tgz", - "integrity": "sha512-WXHh8pEStpgkXZJmYOg2cI8BSHkV82ET4XTJCNPdveumaCn1UYnaNzsXD13kw5z+zmy8CufhFEzdXTrv/yt7KQ==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/platform-browser": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-14.3.0.tgz", - "integrity": "sha512-w9Y3740UmTz44T0Egvc+4QV9sEbO61L+aRHbpkLTJdlEGzHByZvxJmJyBYmdqeyTPwc/Zpy7c02frlpfAlyB7A==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/platform-browser-dynamic": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-14.3.0.tgz", - "integrity": "sha512-rneZiMrIiYRhrkQvdL40E2ErKRn4Zdo6EtjBM9pAmWeyoM8oMnOZb9gz5vhrkNWg06kVMVg0yKqluP5How7j3A==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@angular/router": { - "version": "14.3.0", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-14.3.0.tgz", - "integrity": "sha512-uip0V7w7k7xyxxpTPbr7EuMnYLj3FzJrwkLVJSEw3TMMGHt5VU5t4BBa9veGZOta2C205XFrTAHnp8mD+XYY1w==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@assemblyscript/loader": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", - "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==", - "dev": true - }, - "@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", - "dev": true, - "requires": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" - } - }, - "@babel/compat-data": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", - "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", - "dev": true - }, - "@babel/core": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.10.tgz", - "integrity": "sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw==", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.10", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-module-transforms": "^7.18.9", - "@babel/helpers": "^7.18.9", - "@babel/parser": "^7.18.10", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.18.10", - "@babel/types": "^7.18.10", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.18.12", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.12.tgz", - "integrity": "sha512-dfQ8ebCN98SvyL7IxNMCUtZQSq5R7kxgN+r8qYTGDmmSion1hX2C0zq2yo1bsCDhXixokv1SAWTZUMYbO/V5zg==", - "dev": true, - "requires": { - "@babel/types": "^7.18.10", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", - "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz", - "integrity": "sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.9", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - } - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.9.tgz", - "integrity": "sha512-Pwyi89uO4YrGKxL/eNJ8lfEH55DnRloGPOseaA8NFNL6jAUnn+KccaISiFazCj5IolPPDjGSdzQzXVzODVRqUQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "semver": "^6.3.1" - }, - "dependencies": { - "@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - } - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz", - "integrity": "sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "regexpu-core": "^5.3.1", - "semver": "^6.3.1" - }, - "dependencies": { - "@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - } - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", - "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - } - } - }, - "@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "dev": true - }, - "@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dev": true, - "requires": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - }, - "dependencies": { - "@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" - } - } - } - }, - "@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", - "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-module-transforms": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", - "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.5" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz", - "integrity": "sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-wrap-function": "^7.22.9" - }, - "dependencies": { - "@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - } - } - }, - "@babel/helper-replace-supers": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", - "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5" - } - }, - "@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - }, - "@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", - "dev": true - }, - "@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", - "dev": true - }, - "@babel/helper-wrap-function": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.9.tgz", - "integrity": "sha512-sZ+QzfauuUEfxSEjKFmi3qDSHgLsTPK/pEpoD/qonZKOtTPTLbf59oabPQ4rKekt9lFcj/hTZaOhWwFYrgjk+Q==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "dependencies": { - "@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" - } - } - } - }, - "@babel/helpers": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz", - "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==", - "dev": true, - "requires": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.6", - "@babel/types": "^7.22.5" - }, - "dependencies": { - "@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" - } - } - } - }, - "@babel/highlight": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", - "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.3.tgz", - "integrity": "sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw==", - "dev": true - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", - "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", - "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.5" - } - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.10.tgz", - "integrity": "sha512-1mFuY2TOsR1hxbjCo4QL+qlIjV07p4H4EUYw2J/WCqsvFV6V9X9z9YhXbWndc/4fw+hYGlDT7egYxliMp5O6Ew==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-class-static-block": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz", - "integrity": "sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", - "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", - "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", - "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.7" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", - "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.11.tgz", - "integrity": "sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-import-assertions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", - "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", - "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", - "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-remap-async-to-generator": "^7.18.6" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", - "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", - "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz", - "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "globals": "^11.1.0" - }, - "dependencies": { - "@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dev": true, - "requires": { - "@babel/types": "^7.22.5" - } - } - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", - "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.5" - }, - "dependencies": { - "@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" - } - } - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", - "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", - "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", - "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", - "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", - "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", - "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", - "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", - "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", - "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", - "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", - "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", - "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", - "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", - "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", - "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5" - } - }, - "@babel/plugin-transform-optional-chaining": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.6.tgz", - "integrity": "sha512-Vd5HiWml0mDVtcLHIoEU5sw6HOUW/Zk0acLs/SAeuLzkGNOPc9DB4nkUajemhCmTIz3eiaKREZn2hQQqF79YTg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", - "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", - "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", - "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "regenerator-transform": "^0.15.1" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", - "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.10.tgz", - "integrity": "sha512-q5mMeYAdfEbpBAgzl7tBre/la3LeCxmDO1+wMXRdPWbcoMjR3GiXlCLk7JBZVVye0bqTGNMbt0yYVXX1B1jEWQ==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.9", - "babel-plugin-polyfill-corejs2": "^0.3.2", - "babel-plugin-polyfill-corejs3": "^0.5.3", - "babel-plugin-polyfill-regenerator": "^0.4.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - } - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", - "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", - "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", - "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", - "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", - "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", - "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", - "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - } - }, - "@babel/preset-env": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.10.tgz", - "integrity": "sha512-wVxs1yjFdW3Z/XkNfXKoblxoHgbtUF7/l3PvvP4m02Qz9TZ6uZGxRVYjSQeR87oQmHco9zWitW5J82DJ7sCjvA==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.18.8", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.18.10", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.18.9", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.18.9", - "@babel/plugin-transform-classes": "^7.18.9", - "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.18.9", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.8", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.18.6", - "@babel/plugin-transform-modules-commonjs": "^7.18.6", - "@babel/plugin-transform-modules-systemjs": "^7.18.9", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.18.6", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.18.8", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.18.9", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.10", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.18.10", - "babel-plugin-polyfill-corejs2": "^0.3.2", - "babel-plugin-polyfill-corejs3": "^0.5.3", - "babel-plugin-polyfill-regenerator": "^0.4.0", - "core-js-compat": "^3.22.1", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - } - } - }, - "@babel/preset-modules": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6.tgz", - "integrity": "sha512-ID2yj6K/4lKfhuU3+EX4UvNbIt7eACFbHmNUjzA+ep+B5971CknnA/9DEWKbRokfbbtblxxxXFJJrH47UEAMVg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "dev": true - }, - "@babel/runtime": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz", - "integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" - } - }, - "@babel/traverse": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", - "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.0", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.0", - "@babel/types": "^7.23.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "dependencies": { - "@babel/generator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.3.tgz", - "integrity": "sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg==", - "dev": true, - "requires": { - "@babel/types": "^7.23.3", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - } - }, - "@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@babel/types": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.3.tgz", - "integrity": "sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw==", - "dev": true, - "requires": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" - } - }, - "@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "dev": true - }, - "@csstools/postcss-cascade-layers": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz", - "integrity": "sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==", - "dev": true, - "requires": { - "@csstools/selector-specificity": "^2.0.2", - "postcss-selector-parser": "^6.0.10" - } - }, - "@csstools/postcss-color-function": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz", - "integrity": "sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==", - "dev": true, - "requires": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-font-format-keywords": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz", - "integrity": "sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-hwb-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz", - "integrity": "sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-ic-unit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz", - "integrity": "sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==", - "dev": true, - "requires": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-is-pseudo-class": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz", - "integrity": "sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==", - "dev": true, - "requires": { - "@csstools/selector-specificity": "^2.0.0", - "postcss-selector-parser": "^6.0.10" - } - }, - "@csstools/postcss-nested-calc": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz", - "integrity": "sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-normalize-display-values": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz", - "integrity": "sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-oklab-function": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz", - "integrity": "sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==", - "dev": true, - "requires": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-progressive-custom-properties": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz", - "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-stepped-value-functions": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz", - "integrity": "sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-text-decoration-shorthand": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz", - "integrity": "sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-trigonometric-functions": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz", - "integrity": "sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-unset-value": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz", - "integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==", - "dev": true, - "requires": {} - }, - "@csstools/selector-specificity": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz", - "integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==", - "dev": true, - "requires": {} - }, - "@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "dev": true - }, - "@esbuild/linux-loong64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.5.tgz", - "integrity": "sha512-UHkDFCfSGTuXq08oQltXxSZmH1TXyWsL+4QhZDWvvLl6mEJQqk3u7/wq1LjhrrAXYIllaTtRSzUXl4Olkf2J8A==", - "dev": true, - "optional": true - }, - "@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "dev": true - }, - "@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "requires": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true - }, - "ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "requires": { - "ansi-regex": "^6.0.1" - } - }, - "wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "requires": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - } - } - } - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true - }, - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true - }, - "@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - }, - "dependencies": { - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - } - } - }, - "@kurkle/color": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz", - "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==", - "peer": true - }, - "@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", - "dev": true - }, - "@ng-apimock/core": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@ng-apimock/core/-/core-3.11.0.tgz", - "integrity": "sha512-Gy4b0hdwuExADS00TMQ1gcj4TciDQveIVCRD+B/EInRYfO+IODvZH58Iw/dV+mjcAXIOEsrql2MES7/tWyqScA==", - "requires": { - "body-parser": "1.20.2", - "chokidar": "3.5.3", - "debug": "4.3.4", - "fs-extra": "11.1.1", - "glob": "8.1.0", - "inversify": "6.0.1", - "node-fetch": "2.6.9", - "reflect-metadata": "0.1.13", - "uuid": "9.0.0" - }, - "dependencies": { - "glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - }, - "uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" - } - } - }, - "@ngtools/webpack": { - "version": "14.2.13", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-14.2.13.tgz", - "integrity": "sha512-RQx/rGX7K/+R55x1R6Ax1JzyeHi8cW11dEXpzHWipyuSpusQLUN53F02eMB4VTakXsL3mFNWWy4bX3/LSq8/9w==", - "dev": true, - "requires": {} - }, - "@ngx-translate/core": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/@ngx-translate/core/-/core-14.0.0.tgz", - "integrity": "sha512-UevdwNCXMRCdJv//0kC8h2eSfmi02r29xeE8E9gJ1Al4D4jEJ7eiLPdjslTMc21oJNGguqqWeEVjf64SFtvw2w==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@ngx-translate/http-loader": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@ngx-translate/http-loader/-/http-loader-7.0.0.tgz", - "integrity": "sha512-j+NpXXlcGVdyUNyY/qsJrqqeAdJdizCd+GKh3usXExSqy1aE9866jlAIL+xrfDU4w+LiMoma5pgE4emvFebZmA==", - "requires": { - "tslib": "^2.3.0" - } - }, - "@ngxs/store": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/@ngxs/store/-/store-3.8.1.tgz", - "integrity": "sha512-nbapLdMx+mtnb57BUWXbD6qYfVICv6Rp2NdoGx1++qDbc44ALC49KbF7rSjyPltlExxharAzoNpzO3JuueCP+A==", - "requires": { - "tslib": "^2.2.0" - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@npmcli/fs": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", - "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", - "dev": true, - "requires": { - "@gar/promisify": "^1.1.3", - "semver": "^7.3.5" - } - }, - "@npmcli/git": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-3.0.2.tgz", - "integrity": "sha512-CAcd08y3DWBJqJDpfuVL0uijlq5oaXaOJEKHKc4wqrjd00gkvTZB+nFuLn+doOOKddaQS9JfqtNoFCO2LCvA3w==", - "dev": true, - "requires": { - "@npmcli/promise-spawn": "^3.0.0", - "lru-cache": "^7.4.4", - "mkdirp": "^1.0.4", - "npm-pick-manifest": "^7.0.0", - "proc-log": "^2.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^2.0.2" - }, - "dependencies": { - "lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "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" - } - } - } - }, - "@npmcli/installed-package-contents": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", - "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", - "dev": true, - "requires": { - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "@npmcli/move-file": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", - "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", - "dev": true, - "requires": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - } - }, - "@npmcli/node-gyp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz", - "integrity": "sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A==", - "dev": true - }, - "@npmcli/promise-spawn": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz", - "integrity": "sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g==", - "dev": true, - "requires": { - "infer-owner": "^1.0.4" - } - }, - "@npmcli/run-script": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.2.1.tgz", - "integrity": "sha512-7dqywvVudPSrRCW5nTHpHgeWnbBtz8cFkOuKrecm6ih+oO9ciydhWt6OF7HlqupRRmB8Q/gECVdB9LMfToJbRg==", - "dev": true, - "requires": { - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/promise-spawn": "^3.0.0", - "node-gyp": "^9.0.0", - "read-package-json-fast": "^2.0.3", - "which": "^2.0.2" - }, - "dependencies": { - "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" - } - } - } - }, - "@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "optional": true - }, - "@schematics/angular": { - "version": "14.2.13", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-14.2.13.tgz", - "integrity": "sha512-MLxTpTU3E8QACQ/5c0sENMR2gRiMXpGaKeD5IHY+3wyU2fUSJVB0QPU/l1WhoyZbX8N9ospBgf5UEG7taVF9rg==", - "dev": true, - "requires": { - "@angular-devkit/core": "14.2.13", - "@angular-devkit/schematics": "14.2.13", - "jsonc-parser": "3.1.0" - } - }, - "@socket.io/component-emitter": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", - "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==", - "dev": true - }, - "@sovity.de/edc-client": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/@sovity.de/edc-client/-/edc-client-10.4.0.tgz", - "integrity": "sha512-CBC7bHdIWD1K5plc+tgdJOb5YT82YyyaZ1xMKCy5Ox77KgQEOKG5W/95VzzZkap91xV5zNO5j7I5KJXj18jz8g==", - "requires": { - "zod": "^3.22.4" - } - }, - "@tailwindcss/typography": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.10.tgz", - "integrity": "sha512-Pe8BuPJQJd3FfRnm6H0ulKIGoMEQS+Vq01R6M5aCrFB/ccR/shT+0kXLjouGC1gFLm9hopTFN+DMP0pfwRWzPw==", - "dev": true, - "requires": { - "lodash.castarray": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.merge": "^4.6.2", - "postcss-selector-parser": "6.0.10" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - } - } - }, - "@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true - }, - "@trivago/prettier-plugin-sort-imports": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@trivago/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-4.3.0.tgz", - "integrity": "sha512-r3n0onD3BTOVUNPhR4lhVK4/pABGpbA7bW3eumZnYdKaHkf1qEC+Mag6DPbGNuuh0eG8AaYj+YqmVHSiGslaTQ==", - "dev": true, - "requires": { - "@babel/generator": "7.17.7", - "@babel/parser": "^7.20.5", - "@babel/traverse": "7.23.2", - "@babel/types": "7.17.0", - "javascript-natural-sort": "0.7.1", - "lodash": "^4.17.21" - }, - "dependencies": { - "@babel/generator": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.7.tgz", - "integrity": "sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==", - "dev": true, - "requires": { - "@babel/types": "^7.17.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/types": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", - "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true - } - } - }, - "@types/body-parser": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", - "dev": true, - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/bonjour": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", - "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/connect-history-api-fallback": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.3.tgz", - "integrity": "sha512-6mfQ6iNvhSKCZJoY6sIG3m0pKkdUcweVNOLuBBKvoWGzl2yRxOJcYOTRyLKt3nxXvBLJWa6QkW//tgbIwJehmA==", - "dev": true, - "requires": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "@types/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", - "dev": true - }, - "@types/cors": { - "version": "2.8.17", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", - "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/dompurify": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/dompurify/-/dompurify-3.0.5.tgz", - "integrity": "sha512-1Wg0g3BtQF7sSb27fJQAKck1HECM6zV1EB66j8JH9i3LCjYabJa0FSdiSgsD5K/RbrsR0SiraKacLB+T8ZVYAg==", - "requires": { - "@types/trusted-types": "*" - } - }, - "@types/eslint": { - "version": "8.44.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.1.tgz", - "integrity": "sha512-XpNDc4Z5Tb4x+SW1MriMVeIsMoONHCkWFMkR/aPJbzEsxqHy+4Glu/BqTdPrApfDeMaXbtNh6bseNgl5KaWrSg==", - "dev": true, - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "dev": true, - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "@types/estree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", - "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", - "dev": true - }, - "@types/express": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", - "dev": true, - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.17.41", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", - "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "@types/http-errors": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", - "dev": true - }, - "@types/http-proxy": { - "version": "1.17.14", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", - "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/jasmine": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-4.3.6.tgz", - "integrity": "sha512-3N0FpQTeiWjm+Oo1WUYWguUS7E6JLceiGTriFrG8k5PU7zRLJCzLcWURU3wjMbZGS//a2/LgjsnO3QxIlwxt9g==", - "dev": true - }, - "@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", - "dev": true - }, - "@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "dev": true - }, - "@types/node": { - "version": "18.17.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.1.tgz", - "integrity": "sha512-xlR1jahfizdplZYRU59JlUx9uzF1ARa8jbhM11ccpCJya8kvos5jwdm2ZAgxSCwOl0fq21svP18EVwPBXMQudw==", - "dev": true - }, - "@types/node-forge": { - "version": "1.3.9", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.9.tgz", - "integrity": "sha512-meK88cx/sTalPSLSoCzkiUB4VPIFHmxtXm5FaaqRDqBX2i/Sy8bJ4odsan0b20RBjPh06dAQ+OTTdnyQyhJZyQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "@types/qs": { - "version": "6.9.10", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.10.tgz", - "integrity": "sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==", - "dev": true - }, - "@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "dev": true - }, - "@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "dev": true - }, - "@types/send": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", - "dev": true, - "requires": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "@types/serve-index": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", - "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", - "dev": true, - "requires": { - "@types/express": "*" - } - }, - "@types/serve-static": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", - "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", - "dev": true, - "requires": { - "@types/http-errors": "*", - "@types/mime": "*", - "@types/node": "*" - } - }, - "@types/sockjs": { - "version": "0.3.36", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", - "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/trusted-types": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", - "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==" - }, - "@types/ws": { - "version": "8.5.9", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.9.tgz", - "integrity": "sha512-jbdrY0a8lxfdTp/+r7Z4CkycbOFN8WX+IOchLJr3juT/xzbJ8URyTVSJ/hvNdadTgM1mnedb47n+Y31GsFnQlg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@webassemblyjs/ast": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", - "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", - "dev": true, - "peer": true, - "requires": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", - "dev": true, - "peer": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", - "dev": true, - "peer": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", - "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", - "dev": true, - "peer": true - }, - "@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", - "dev": true, - "peer": true, - "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", - "dev": true, - "peer": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", - "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", - "dev": true, - "peer": true, - "requires": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", - "dev": true, - "peer": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", - "dev": true, - "peer": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", - "dev": true, - "peer": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", - "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", - "dev": true, - "peer": true, - "requires": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", - "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", - "dev": true, - "peer": true, - "requires": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", - "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", - "dev": true, - "peer": true, - "requires": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", - "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", - "dev": true, - "peer": true, - "requires": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", - "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", - "dev": true, - "peer": true, - "requires": { - "@webassemblyjs/ast": "1.11.6", - "@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 - }, - "@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", - "dev": true - }, - "abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "dev": true - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true - }, - "acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", - "dev": true, - "requires": {} - }, - "adjust-sourcemap-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", - "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - }, - "dependencies": { - "loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - } - } - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "requires": { - "debug": "4" - } - }, - "agentkeepalive": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz", - "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "depd": "^2.0.0", - "humanize-ms": "^1.2.1" - } - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "requires": { - "ajv": "^8.0.0" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "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": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true - }, - "anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - }, - "are-we-there-yet": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - } - }, - "arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "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" - } - }, - "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 - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "autoprefixer": { - "version": "10.4.14", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", - "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", - "dev": true, - "requires": { - "browserslist": "^4.21.5", - "caniuse-lite": "^1.0.30001464", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - } - }, - "babel-loader": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz", - "integrity": "sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==", - "dev": true, - "requires": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "dependencies": { - "loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - } - } - }, - "babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", - "semver": "^6.1.1" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - } - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz", - "integrity": "sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.2", - "core-js-compat": "^3.21.0" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", - "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.3" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "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 - }, - "base64id": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", - "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", - "dev": true - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true - }, - "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": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" - }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "bonjour-service": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", - "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", - "dev": true, - "requires": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "requires": { - "balanced-match": "^1.0.0" - } - }, - "braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "requires": { - "fill-range": "^7.1.1" - } - }, - "browserslist": { - "version": "4.21.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", - "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "requires": { - "semver": "^7.0.0" - } - }, - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" - }, - "cacache": { - "version": "16.1.2", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.2.tgz", - "integrity": "sha512-Xx+xPlfCZIUHagysjjOAje9nRo8pRDczQCcXb4J2O0BLtH+xeVue6ba4y1kfJfQMAnM2mkcoMIAyOctlaRGWYA==", - "dev": true, - "requires": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "infer-owner": "^1.0.4", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11", - "unique-filename": "^1.1.1" - }, - "dependencies": { - "lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "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==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001517", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001517.tgz", - "integrity": "sha512-Vdhm5S11DaFVLlyiKu4hiUTkpZu+y1KA/rZZqVQfOD5YdDT/eQKlkt7NaE0WGOFgX32diqt9MiP9CAiFeRklaA==", - "dev": true - }, - "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 - }, - "chart.js": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.3.1.tgz", - "integrity": "sha512-QHuISG3hTJ0ftq0I0f5jqH9mNVO9bqG8P+zvMOVslgKajQVvFEX7QAhYNJ+QEmw+uYTwo8XpTimaB82oeTWjxw==", - "peer": true, - "requires": { - "@kurkle/color": "^0.3.0" - } - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true - }, - "chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true - }, - "clean-deep": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/clean-deep/-/clean-deep-3.4.0.tgz", - "integrity": "sha512-Lo78NV5ItJL/jl+B5w0BycAisaieJGXK1qYi/9m4SjR8zbqmrUtO7Yhro40wEShGmmxs/aJLI/A+jNhdkXK8mw==", - "requires": { - "lodash.isempty": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.transform": "^4.6.0" - } - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-spinners": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", - "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", - "dev": true - }, - "cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true - }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true - }, - "colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "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" - } - }, - "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": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "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" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "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 - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "dev": true, - "requires": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "dependencies": { - "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" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "dev": true - }, - "content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "requires": { - "safe-buffer": "5.2.1" - } - }, - "content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" - }, - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true - }, - "copy-anything": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", - "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", - "dev": true, - "requires": { - "is-what": "^3.14.1" - } - }, - "copy-webpack-plugin": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", - "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", - "dev": true, - "requires": { - "fast-glob": "^3.2.11", - "glob-parent": "^6.0.1", - "globby": "^13.1.1", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" - }, - "dependencies": { - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - } - } - } - }, - "core-js-compat": { - "version": "3.31.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.1.tgz", - "integrity": "sha512-wIDWd2s5/5aJSdpOJHfSibxNODxoGoWOBHt8JSPB41NOE94M7kuTPZCYLOlTtuoXTsBPKobpJ6T+y0SSy5L9SA==", - "dev": true, - "requires": { - "browserslist": "^4.21.9" - } - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dev": true, - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, - "cosmiconfig": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", - "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", - "dev": true, - "requires": { - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0" - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - } - } - }, - "critters": { - "version": "0.0.16", - "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.16.tgz", - "integrity": "sha512-JwjgmO6i3y6RWtLYmXwO5jMd+maZt8Tnfu7VVISmEWyQqfLpB8soBswf8/2bu6SBXxtKA68Al3c+qIG1ApT68A==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "css-select": "^4.2.0", - "parse5": "^6.0.1", - "parse5-htmlparser2-tree-adapter": "^6.0.1", - "postcss": "^8.3.7", - "pretty-bytes": "^5.3.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "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" - }, - "dependencies": { - "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" - } - } - } - }, - "css-blank-pseudo": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", - "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.9" - } - }, - "css-has-pseudo": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", - "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.9" - } - }, - "css-loader": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.1.tgz", - "integrity": "sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw==", - "dev": true, - "requires": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.7", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.3.5" - } - }, - "css-prefers-color-scheme": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", - "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", - "dev": true, - "requires": {} - }, - "css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - } - }, - "css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true - }, - "cssdb": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.7.0.tgz", - "integrity": "sha512-1hN+I3r4VqSNQ+OmMXxYexnumbOONkSil0TWMebVXHtzYW4tRRPovUNHPHj2d4nrgOuYJ8Vs3XwvywsuwwXNNA==", - "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 - }, - "cssstyle": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-3.0.0.tgz", - "integrity": "sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==", - "requires": { - "rrweb-cssom": "^0.6.0" - } - }, - "custom-event": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", - "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==", - "dev": true - }, - "data-urls": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", - "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", - "requires": { - "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.0.0" - }, - "dependencies": { - "tr46": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz", - "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==", - "requires": { - "punycode": "^2.3.1" - } - }, - "webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==" - }, - "whatwg-url": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.0.0.tgz", - "integrity": "sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==", - "requires": { - "tr46": "^5.0.0", - "webidl-conversions": "^7.0.0" - } - } - } - }, - "date-fns": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", - "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", - "requires": { - "@babel/runtime": "^7.21.0" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", - "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", - "requires": { - "regenerator-runtime": "^0.13.11" - } - }, - "regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" - } - } - }, - "date-fns-tz": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/date-fns-tz/-/date-fns-tz-2.0.1.tgz", - "integrity": "sha512-fJCG3Pwx8HUoLhkepdsP7Z5RsucUi+ZBOxyM5d0ZZ6c4SdYustq0VMmOu6Wf7bli+yS/Jwp91TOCqn9jMcVrUA==", - "requires": {} - }, - "date-format": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", - "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", - "dev": true - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" - }, - "default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "dev": true, - "requires": { - "execa": "^5.0.0" - } - }, - "defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, - "requires": { - "clone": "^1.0.2" - } - }, - "define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, - "dependency-graph": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", - "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", - "dev": true - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" - }, - "detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true - }, - "di": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", - "integrity": "sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==", - "dev": true - }, - "didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true - }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", - "dev": true - }, - "dns-packet": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", - "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", - "dev": true, - "requires": { - "@leichtgewicht/ip-codec": "^2.0.1" - } - }, - "dom-serialize": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", - "integrity": "sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==", - "dev": true, - "requires": { - "custom-event": "~1.0.0", - "ent": "~2.2.0", - "extend": "^3.0.0", - "void-elements": "^2.0.0" - } - }, - "dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - }, - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true - }, - "domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dev": true, - "requires": { - "domelementtype": "^2.2.0" - } - }, - "dompurify": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.7.tgz", - "integrity": "sha512-BViYTZoqP3ak/ULKOc101y+CtHDUvBsVgSxIF1ku0HmK6BRf+C03MC+tArMvOPtVtZp83DDh5puywKDu4sbVjQ==" - }, - "domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dev": true, - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "dotenv": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", - "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==" - }, - "eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "electron-to-chromium": { - "version": "1.4.471", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.471.tgz", - "integrity": "sha512-GpmGRC1vTl60w/k6YpQ18pSiqnmr0j3un//5TV1idPi6aheNfkT1Ye71tMEabWyNDO6sBMgAR+95Eb0eUUr1tA==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true - }, - "encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "optional": true, - "requires": { - "iconv-lite": "^0.6.2" - }, - "dependencies": { - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "engine.io": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.5.tgz", - "integrity": "sha512-C5Pn8Wk+1vKBoHghJODM63yk8MvrO9EWZUfkAt5HAqIgPE4/8FF0PEGHXtEd40l223+cE5ABWuPzm38PHFXfMA==", - "dev": true, - "requires": { - "@types/cookie": "^0.4.1", - "@types/cors": "^2.8.12", - "@types/node": ">=10.0.0", - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "~0.4.1", - "cors": "~2.8.5", - "debug": "~4.3.1", - "engine.io-parser": "~5.2.1", - "ws": "~8.17.1" - } - }, - "engine.io-parser": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.2.tgz", - "integrity": "sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw==", - "dev": true - }, - "enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - } - }, - "ent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==", - "dev": true - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true - }, - "env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true - }, - "err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "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, - "optional": 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" - } - }, - "es-module-lexer": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", - "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", - "dev": true, - "peer": true - }, - "esbuild": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.5.tgz", - "integrity": "sha512-VSf6S1QVqvxfIsSKb3UKr3VhUCis7wgDbtF4Vd9z84UJr05/Sp2fRKmzC+CSPG/dNAPPJZ0BTBLTT1Fhd6N9Gg==", - "dev": true, - "optional": true, - "requires": { - "@esbuild/linux-loong64": "0.15.5", - "esbuild-android-64": "0.15.5", - "esbuild-android-arm64": "0.15.5", - "esbuild-darwin-64": "0.15.5", - "esbuild-darwin-arm64": "0.15.5", - "esbuild-freebsd-64": "0.15.5", - "esbuild-freebsd-arm64": "0.15.5", - "esbuild-linux-32": "0.15.5", - "esbuild-linux-64": "0.15.5", - "esbuild-linux-arm": "0.15.5", - "esbuild-linux-arm64": "0.15.5", - "esbuild-linux-mips64le": "0.15.5", - "esbuild-linux-ppc64le": "0.15.5", - "esbuild-linux-riscv64": "0.15.5", - "esbuild-linux-s390x": "0.15.5", - "esbuild-netbsd-64": "0.15.5", - "esbuild-openbsd-64": "0.15.5", - "esbuild-sunos-64": "0.15.5", - "esbuild-windows-32": "0.15.5", - "esbuild-windows-64": "0.15.5", - "esbuild-windows-arm64": "0.15.5" - } - }, - "esbuild-android-64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.5.tgz", - "integrity": "sha512-dYPPkiGNskvZqmIK29OPxolyY3tp+c47+Fsc2WYSOVjEPWNCHNyqhtFqQadcXMJDQt8eN0NMDukbyQgFcHquXg==", - "dev": true, - "optional": true - }, - "esbuild-android-arm64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.5.tgz", - "integrity": "sha512-YyEkaQl08ze3cBzI/4Cm1S+rVh8HMOpCdq8B78JLbNFHhzi4NixVN93xDrHZLztlocEYqi45rHHCgA8kZFidFg==", - "dev": true, - "optional": true - }, - "esbuild-darwin-64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.5.tgz", - "integrity": "sha512-Cr0iIqnWKx3ZTvDUAzG0H/u9dWjLE4c2gTtRLz4pqOBGjfjqdcZSfAObFzKTInLLSmD0ZV1I/mshhPoYSBMMCQ==", - "dev": true, - "optional": true - }, - "esbuild-darwin-arm64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.5.tgz", - "integrity": "sha512-WIfQkocGtFrz7vCu44ypY5YmiFXpsxvz2xqwe688jFfSVCnUsCn2qkEVDo7gT8EpsLOz1J/OmqjExePL1dr1Kg==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.5.tgz", - "integrity": "sha512-M5/EfzV2RsMd/wqwR18CELcenZ8+fFxQAAEO7TJKDmP3knhWSbD72ILzrXFMMwshlPAS1ShCZ90jsxkm+8FlaA==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-arm64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.5.tgz", - "integrity": "sha512-2JQQ5Qs9J0440F/n/aUBNvY6lTo4XP/4lt1TwDfHuo0DY3w5++anw+jTjfouLzbJmFFiwmX7SmUhMnysocx96w==", - "dev": true, - "optional": true - }, - "esbuild-linux-32": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.5.tgz", - "integrity": "sha512-gO9vNnIN0FTUGjvTFucIXtBSr1Woymmx/aHQtuU+2OllGU6YFLs99960UD4Dib1kFovVgs59MTXwpFdVoSMZoQ==", - "dev": true, - "optional": true - }, - "esbuild-linux-64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.5.tgz", - "integrity": "sha512-ne0GFdNLsm4veXbTnYAWjbx3shpNKZJUd6XpNbKNUZaNllDZfYQt0/zRqOg0sc7O8GQ+PjSMv9IpIEULXVTVmg==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.5.tgz", - "integrity": "sha512-wvAoHEN+gJ/22gnvhZnS/+2H14HyAxM07m59RSLn3iXrQsdS518jnEWRBnJz3fR6BJa+VUTo0NxYjGaNt7RA7Q==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.5.tgz", - "integrity": "sha512-7EgFyP2zjO065XTfdCxiXVEk+f83RQ1JsryN1X/VSX2li9rnHAt2swRbpoz5Vlrl6qjHrCmq5b6yxD13z6RheA==", - "dev": true, - "optional": true - }, - "esbuild-linux-mips64le": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.5.tgz", - "integrity": "sha512-KdnSkHxWrJ6Y40ABu+ipTZeRhFtc8dowGyFsZY5prsmMSr1ZTG9zQawguN4/tunJ0wy3+kD54GaGwdcpwWAvZQ==", - "dev": true, - "optional": true - }, - "esbuild-linux-ppc64le": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.5.tgz", - "integrity": "sha512-QdRHGeZ2ykl5P0KRmfGBZIHmqcwIsUKWmmpZTOq573jRWwmpfRmS7xOhmDHBj9pxv+6qRMH8tLr2fe+ZKQvCYw==", - "dev": true, - "optional": true - }, - "esbuild-linux-riscv64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.5.tgz", - "integrity": "sha512-p+WE6RX+jNILsf+exR29DwgV6B73khEQV0qWUbzxaycxawZ8NE0wA6HnnTxbiw5f4Gx9sJDUBemh9v49lKOORA==", - "dev": true, - "optional": true - }, - "esbuild-linux-s390x": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.5.tgz", - "integrity": "sha512-J2ngOB4cNzmqLHh6TYMM/ips8aoZIuzxJnDdWutBw5482jGXiOzsPoEF4j2WJ2mGnm7FBCO4StGcwzOgic70JQ==", - "dev": true, - "optional": true - }, - "esbuild-netbsd-64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.5.tgz", - "integrity": "sha512-MmKUYGDizYjFia0Rwt8oOgmiFH7zaYlsoQ3tIOfPxOqLssAsEgG0MUdRDm5lliqjiuoog8LyDu9srQk5YwWF3w==", - "dev": true, - "optional": true - }, - "esbuild-openbsd-64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.5.tgz", - "integrity": "sha512-2mMFfkLk3oPWfopA9Plj4hyhqHNuGyp5KQyTT9Rc8hFd8wAn5ZrbJg+gNcLMo2yzf8Uiu0RT6G9B15YN9WQyMA==", - "dev": true, - "optional": true - }, - "esbuild-sunos-64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.5.tgz", - "integrity": "sha512-2sIzhMUfLNoD+rdmV6AacilCHSxZIoGAU2oT7XmJ0lXcZWnCvCtObvO6D4puxX9YRE97GodciRGDLBaiC6x1SA==", - "dev": true, - "optional": true - }, - "esbuild-wasm": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.15.5.tgz", - "integrity": "sha512-lTJOEKekN/4JI/eOEq0wLcx53co2N6vaT/XjBz46D1tvIVoUEyM0o2K6txW6gEotf31szFD/J1PbxmnbkGlK9A==", - "dev": true - }, - "esbuild-windows-32": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.5.tgz", - "integrity": "sha512-e+duNED9UBop7Vnlap6XKedA/53lIi12xv2ebeNS4gFmu7aKyTrok7DPIZyU5w/ftHD4MUDs5PJUkQPP9xJRzg==", - "dev": true, - "optional": true - }, - "esbuild-windows-64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.5.tgz", - "integrity": "sha512-v+PjvNtSASHOjPDMIai9Yi+aP+Vwox+3WVdg2JB8N9aivJ7lyhp4NVU+J0MV2OkWFPnVO8AE/7xH+72ibUUEnw==", - "dev": true, - "optional": true - }, - "esbuild-windows-arm64": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.5.tgz", - "integrity": "sha512-Yz8w/D8CUPYstvVQujByu6mlf48lKmXkq6bkeSZZxTA626efQOJb26aDGLzmFWx6eg/FwrXgt6SZs9V8Pwy/aA==", - "dev": true, - "optional": true - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "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" - } - }, - "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 - }, - "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.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "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": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true - }, - "eventemitter-asyncresource": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", - "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", - "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 - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "exponential-backoff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", - "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", - "dev": true - }, - "express": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", - "dev": true, - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.2", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.6.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true - }, - "cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", - "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" - } - }, - "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "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 - }, - "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" - } - }, - "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 - }, - "fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "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" - }, - "dependencies": { - "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" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true - } - } - }, - "find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", - "dev": true - }, - "foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "dependencies": { - "signal-exit": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz", - "integrity": "sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==", - "dev": true - } - } - }, - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true - }, - "fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", - "dev": true - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true - }, - "fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "fs-monkey": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz", - "integrity": "sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "gauge": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", - "dev": true, - "requires": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - } - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - } - }, - "get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { - "is-glob": "^4.0.1" - } - }, - "glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "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": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", - "dev": true, - "requires": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" - } - }, - "graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "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 - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "dev": true - }, - "hdr-histogram-js": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", - "integrity": "sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==", - "dev": true, - "requires": { - "@assemblyscript/loader": "^0.10.1", - "base64-js": "^1.2.0", - "pako": "^1.0.3" - } - }, - "hdr-histogram-percentiles-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", - "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", - "dev": true - }, - "hosted-git-info": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz", - "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - }, - "dependencies": { - "lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true - } - } - }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "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" - } - }, - "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 - }, - "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" - } - } - } - }, - "html-encoding-sniffer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", - "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", - "requires": { - "whatwg-encoding": "^3.1.1" - } - }, - "html-entities": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", - "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", - "dev": true - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true - }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "dev": true - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "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-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dev": true, - "requires": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - } - }, - "http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", - "dev": true, - "requires": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, - "humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "dev": true, - "requires": { - "ms": "^2.0.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "requires": {} - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true - }, - "ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true - }, - "ignore-walk": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz", - "integrity": "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==", - "dev": true, - "requires": { - "minimatch": "^5.0.1" - } - }, - "image-size": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", - "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", - "dev": true, - "optional": true - }, - "immutable": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.1.tgz", - "integrity": "sha512-lj9cnmB/kVS0QHsJnYKD1uo3o39nrbKxszjnqS9Fr6NB7bZzW45U6WSGBPKXDL/CvDKqDNPA4r3DoDQ8GTxo2A==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - } - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "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": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "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==" - }, - "ini": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-3.0.0.tgz", - "integrity": "sha512-TxYQaeNW/N8ymDvwAxPyRbhMBtnEwuvaTYpOQkFx1nSeusgezHniEc/l35Vo4iCq/mMiTJbpD7oYxN98hFlfmw==", - "dev": true - }, - "inquirer": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz", - "integrity": "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "inversify": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/inversify/-/inversify-6.0.1.tgz", - "integrity": "sha512-B3ex30927698TJENHR++8FfEaJGqoWOgI6ZY5Ht/nLUsFCwHn6akbwtnUAPCgUepAnTpe2qHxhDNjoKLyz6rgQ==" - }, - "ip-address": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", - "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", - "dev": true, - "requires": { - "jsbn": "1.1.0", - "sprintf-js": "^1.1.3" - }, - "dependencies": { - "sprintf-js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", - "dev": true - } - } - }, - "ipaddr.js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", - "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", - "dev": true - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true - }, - "is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "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-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true - }, - "is-what": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", - "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", - "dev": true - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "isbinaryfile": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", - "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true - }, - "isomorphic-dompurify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isomorphic-dompurify/-/isomorphic-dompurify-2.0.0.tgz", - "integrity": "sha512-BJvrSQzg7jleSaySaWyhzGqH9/QxYc3sflm5fvjcXWAQcHQvQPQdCN0ORyqvMqnQDbwFuZXvqh2IcuVa3dG/DA==", - "requires": { - "@types/dompurify": "^3.0.3", - "dompurify": "^3.0.6", - "jsdom": "^23.0.0" - } - }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - } - } - }, - "istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, - "requires": { - "semver": "^7.5.3" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "dependencies": { - "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 - } - } - }, - "istanbul-reports": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", - "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jackspeak": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.2.tgz", - "integrity": "sha512-mgNtVv4vUuaKA97yxUHoA3+FkuhtxkjdXEWOyB/N76fjy0FjezEt34oy3epBtvCvS+7DyKwqCFWx/oJLV5+kCg==", - "dev": true, - "requires": { - "@isaacs/cliui": "^8.0.2", - "@pkgjs/parseargs": "^0.11.0" - } - }, - "jasmine-core": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.6.0.tgz", - "integrity": "sha512-O236+gd0ZXS8YAjFx8xKaJ94/erqUliEkJTDedyE7iHvv4ZVqi+q+8acJxu05/WJDKm512EUNn809In37nWlAQ==", - "dev": true - }, - "javascript-natural-sort": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", - "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==", - "dev": true - }, - "jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jiti": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.19.1.tgz", - "integrity": "sha512-oVhqoRDaBXf7sjkll95LHVS6Myyyb1zaunVwk4Z0+WPSW4gjS0pl01zYKHScTuyEhQsFxV5L4DR5r+YqSyqyyg==", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", - "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", - "dev": true - }, - "jsdom": { - "version": "23.0.1", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-23.0.1.tgz", - "integrity": "sha512-2i27vgvlUsGEBO9+/kJQRbtqtm+191b5zAZrU/UezVmnC2dlDAFLgDYJvAEi94T4kjsRKkezEtLQTgsNEsW2lQ==", - "requires": { - "cssstyle": "^3.0.0", - "data-urls": "^5.0.0", - "decimal.js": "^10.4.3", - "form-data": "^4.0.0", - "html-encoding-sniffer": "^4.0.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.2", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.7", - "parse5": "^7.1.2", - "rrweb-cssom": "^0.6.0", - "saxes": "^6.0.0", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.3", - "w3c-xmlserializer": "^5.0.0", - "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^3.1.1", - "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.0.0", - "ws": "^8.14.2", - "xml-name-validator": "^5.0.0" - }, - "dependencies": { - "agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", - "requires": { - "debug": "^4.3.4" - } - }, - "entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" - }, - "http-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", - "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", - "requires": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - } - }, - "https-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", - "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", - "requires": { - "agent-base": "^7.0.2", - "debug": "4" - } - }, - "parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "requires": { - "entities": "^4.4.0" - } - }, - "tr46": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz", - "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==", - "requires": { - "punycode": "^2.3.1" - } - }, - "webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==" - }, - "whatwg-url": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.0.0.tgz", - "integrity": "sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==", - "requires": { - "tr46": "^5.0.0", - "webidl-conversions": "^7.0.0" - } - } - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "json-stable-stringify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.2.tgz", - "integrity": "sha512-eunSSaEnxV12z+Z73y/j5N37/In40GK4GmsSy+tEHJMxknvqnA7/djeYtAgW0GsWHUfg+847WJjKaEylk2y09g==", - "requires": { - "jsonify": "^0.0.1" - } - }, - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true - }, - "jsonc-parser": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.1.0.tgz", - "integrity": "sha512-DRf0QjnNeCUds3xTjKlQQ3DpJD51GvDjJfnxUVWg6PZTo2otSm+slzNAxU/35hF8/oJIKoG9slq30JYOsF2azg==", - "dev": true - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "jsonify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", - "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==" - }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dev": true - }, - "karma": { - "version": "6.4.3", - "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.3.tgz", - "integrity": "sha512-LuucC/RE92tJ8mlCwqEoRWXP38UMAqpnq98vktmS9SznSoUPPUJQbc91dHcxcunROvfQjdORVA/YFviH+Xci9Q==", - "dev": true, - "requires": { - "@colors/colors": "1.5.0", - "body-parser": "^1.19.0", - "braces": "^3.0.2", - "chokidar": "^3.5.1", - "connect": "^3.7.0", - "di": "^0.0.1", - "dom-serialize": "^2.2.1", - "glob": "^7.1.7", - "graceful-fs": "^4.2.6", - "http-proxy": "^1.18.1", - "isbinaryfile": "^4.0.8", - "lodash": "^4.17.21", - "log4js": "^6.4.1", - "mime": "^2.5.2", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.5", - "qjobs": "^1.2.0", - "range-parser": "^1.2.1", - "rimraf": "^3.0.2", - "socket.io": "^4.7.2", - "source-map": "^0.6.1", - "tmp": "^0.2.1", - "ua-parser-js": "^0.7.30", - "yargs": "^16.1.1" - }, - "dependencies": { - "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" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "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 - }, - "tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "requires": { - "rimraf": "^3.0.0" - } - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true - } - } - }, - "karma-chrome-launcher": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.2.0.tgz", - "integrity": "sha512-rE9RkUPI7I9mAxByQWkGJFXfFD6lE4gC5nPuZdobf/QdTEJI6EU4yIay/cfU/xV4ZxlM5JiTv7zWYgA64NpS5Q==", - "dev": true, - "requires": { - "which": "^1.2.1" - } - }, - "karma-coverage": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.2.1.tgz", - "integrity": "sha512-yj7hbequkQP2qOSb20GuNSIyE//PgJWHwC2IydLE6XRtsnaflv+/OSGNssPjobYUlhVVagy99TQpqUt3vAUG7A==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.1", - "istanbul-reports": "^3.0.5", - "minimatch": "^3.0.4" - }, - "dependencies": { - "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" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "karma-jasmine": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-5.1.0.tgz", - "integrity": "sha512-i/zQLFrfEpRyQoJF9fsCdTMOF5c2dK7C7OmsuKg2D0YSsuZSfQDiLuaiktbuio6F2wiCsZSnSnieIQ0ant/uzQ==", - "dev": true, - "requires": { - "jasmine-core": "^4.1.0" - } - }, - "karma-jasmine-html-reporter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-2.1.0.tgz", - "integrity": "sha512-sPQE1+nlsn6Hwb5t+HHwyy0A1FNCVKuL1192b+XNauMYWThz2kweiBVW1DqloRpVvZIJkIoHVB7XRpK78n1xbQ==", - "dev": true, - "requires": {} - }, - "karma-source-map-support": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", - "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", - "dev": true, - "requires": { - "source-map-support": "^0.5.5" - } - }, - "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 - }, - "klona": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", - "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", - "dev": true - }, - "less": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/less/-/less-4.1.3.tgz", - "integrity": "sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==", - "dev": true, - "requires": { - "copy-anything": "^2.0.1", - "errno": "^0.1.1", - "graceful-fs": "^4.1.2", - "image-size": "~0.5.0", - "make-dir": "^2.1.0", - "mime": "^1.4.1", - "needle": "^3.1.0", - "parse-node-version": "^1.0.1", - "source-map": "~0.6.0", - "tslib": "^2.3.0" - }, - "dependencies": { - "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, - "optional": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "optional": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "optional": true - }, - "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "optional": 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, - "optional": true - } - } - }, - "less-loader": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-11.0.0.tgz", - "integrity": "sha512-9+LOWWjuoectIEx3zrfN83NAGxSUB5pWEabbbidVQVgZhN+wN68pOvuyirVlH1IK4VT1f3TmlyvAnCXh8O5KEw==", - "dev": true, - "requires": { - "klona": "^2.0.4" - } - }, - "license-webpack-plugin": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz", - "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==", - "dev": true, - "requires": { - "webpack-sources": "^3.0.0" - } - }, - "lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "dev": true - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true - }, - "loader-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", - "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash-es": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" - }, - "lodash.castarray": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", - "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==", - "dev": true - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "lodash.isempty": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", - "integrity": "sha512-oKMuF3xEeqDltrGMfDxAPGIVMSSRv8tbRSODbrs4KGsRRLEhrW8N8Rd4DRgB2+621hY8A8XwwrTVhXWpxFvMzg==" - }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "lodash.transform": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.transform/-/lodash.transform-4.6.0.tgz", - "integrity": "sha512-LO37ZnhmBVx0GvOU/caQuipEh4GN82TcWv3yHlebGDgOxbxiwwzW5Pcx2AcvpIv2WmvmSMoC492yQFNhy/l/UQ==" - }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "log4js": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz", - "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==", - "dev": true, - "requires": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "flatted": "^3.2.7", - "rfdc": "^1.3.0", - "streamroller": "^3.1.5" - } - }, - "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" - } - }, - "magic-string": { - "version": "0.26.2", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.2.tgz", - "integrity": "sha512-NzzlXpclt5zAbmo6h6jNc8zl2gNRGHvmsZW4IvZhTC4W7k4OlLP+S5YLussa/r3ixNT66KOQfNORlXHSOy/X4A==", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.8" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true - } - } - }, - "make-fetch-happen": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", - "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", - "dev": true, - "requires": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^10.0.0" - }, - "dependencies": { - "@npmcli/fs": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", - "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", - "dev": true, - "requires": { - "semver": "^7.3.5" - } - }, - "cacache": { - "version": "17.1.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.3.tgz", - "integrity": "sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==", - "dev": true, - "requires": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" - } - }, - "fs-minipass": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.2.tgz", - "integrity": "sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g==", - "dev": true, - "requires": { - "minipass": "^5.0.0" - } - }, - "glob": { - "version": "10.3.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.3.tgz", - "integrity": "sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==", - "dev": true, - "requires": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - } - }, - "lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true - }, - "minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true - }, - "ssri": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", - "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", - "dev": true, - "requires": { - "minipass": "^5.0.0" - } - }, - "unique-filename": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", - "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", - "dev": true, - "requires": { - "unique-slug": "^4.0.0" - } - }, - "unique-slug": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", - "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } - } - } - }, - "marked": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/marked/-/marked-11.1.1.tgz", - "integrity": "sha512-EgxRjgK9axsQuUa/oKMx5DEY8oXpKJfk61rT5iY3aRlgU6QJtUcxU5OAymdhCvWvhYcd9FKmO5eQoX8m9VGJXg==" - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" - }, - "memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", - "dev": true, - "requires": { - "fs-monkey": "^1.0.4" - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true - }, - "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": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - }, - "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 - }, - "mini-css-extract-plugin": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.1.tgz", - "integrity": "sha512-wd+SD57/K6DiV7jIR34P+s3uckTRuQvx0tKPcvjFlrEylk6P4mQ2KSWk1hblj1Kxaqok7LogKOieygXqBczNlg==", - "dev": true, - "requires": { - "schema-utils": "^4.0.0" - }, - "dependencies": { - "schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.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 - }, - "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true - }, - "minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - }, - "dependencies": { - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-fetch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz", - "integrity": "sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==", - "dev": true, - "requires": { - "encoding": "^0.1.13", - "minipass": "^5.0.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "dependencies": { - "minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true - } - } - }, - "minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-json-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", - "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", - "dev": true, - "requires": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } - }, - "minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "dependencies": { - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "dev": true, - "requires": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - } - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "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" - } - }, - "nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "dev": true - }, - "needle": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-3.2.0.tgz", - "integrity": "sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==", - "dev": true, - "optional": true, - "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.6.3", - "sax": "^1.2.4" - }, - "dependencies": { - "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" - } - }, - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "ng2-charts": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ng2-charts/-/ng2-charts-4.1.1.tgz", - "integrity": "sha512-iHwXDbmX86lfeH8VRcsaW2tJATsuAZo4kvvC/Yk2l35zOHjevja1qBvO6BAibiDazi9r9aS6ZRJOqWPsz1pP2w==", - "requires": { - "lodash-es": "^4.17.15", - "tslib": "^2.3.0" - } - }, - "ngx-build-plus": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/ngx-build-plus/-/ngx-build-plus-14.0.0.tgz", - "integrity": "sha512-Rq23dNx9jL34+hbCrSa7LYrkopZpKN6WGAfPRaFlCeuJ/b5YIPVk8cePjj3/CDZr7LlNPedTrEtMC1dpG4AXww==", - "dev": true, - "requires": { - "@angular-devkit/build-angular": ">=14.0.0", - "@schematics/angular": ">=14.0.0", - "webpack-merge": "^5.0.0" - } - }, - "ngx-json-viewer": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ngx-json-viewer/-/ngx-json-viewer-3.2.1.tgz", - "integrity": "sha512-TTHtXsrBX+IXPqqAIsxklHPqSNmyGeQaziFZbCDJq1PnPOQmTrEHfwNrzN3LnWGhf7UxeM1cK0njegVPChwEcg==", - "requires": { - "tslib": "^2.3.0" - } - }, - "nice-napi": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", - "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", - "dev": true, - "optional": true, - "requires": { - "node-addon-api": "^3.0.0", - "node-gyp-build": "^4.2.2" - } - }, - "node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true, - "optional": true - }, - "node-fetch": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", - "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "dev": true - }, - "node-gyp": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz", - "integrity": "sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==", - "dev": true, - "requires": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^11.0.3", - "nopt": "^6.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "dependencies": { - "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" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "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" - } - } - } - }, - "node-gyp-build": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", - "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", - "dev": true, - "optional": true - }, - "node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", - "dev": true - }, - "nopt": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", - "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", - "dev": true, - "requires": { - "abbrev": "^1.0.0" - } - }, - "normalize-package-data": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.1.tgz", - "integrity": "sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg==", - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true - }, - "npm-bundled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", - "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", - "dev": true, - "requires": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-install-checks": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-5.0.0.tgz", - "integrity": "sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA==", - "dev": true, - "requires": { - "semver": "^7.1.1" - } - }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", - "dev": true - }, - "npm-package-arg": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", - "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - } - }, - "npm-packlist": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.3.tgz", - "integrity": "sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg==", - "dev": true, - "requires": { - "glob": "^8.0.1", - "ignore-walk": "^5.0.1", - "npm-bundled": "^2.0.0", - "npm-normalize-package-bin": "^2.0.0" - }, - "dependencies": { - "npm-bundled": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-2.0.1.tgz", - "integrity": "sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw==", - "dev": true, - "requires": { - "npm-normalize-package-bin": "^2.0.0" - } - }, - "npm-normalize-package-bin": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", - "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", - "dev": true - } - } - }, - "npm-pick-manifest": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.1.tgz", - "integrity": "sha512-IA8+tuv8KujbsbLQvselW2XQgmXWS47t3CB0ZrzsRZ82DbDfkcFunOaPm4X7qNuhMfq+FmV7hQT4iFVpHqV7mg==", - "dev": true, - "requires": { - "npm-install-checks": "^5.0.0", - "npm-normalize-package-bin": "^1.0.1", - "npm-package-arg": "^9.0.0", - "semver": "^7.3.5" - } - }, - "npm-registry-fetch": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.3.1.tgz", - "integrity": "sha512-eukJPi++DKRTjSBRcDZSDDsGqRK3ehbxfFUcgaRd0Yp6kRwOwh2WVn0r+8rMB4nnuzvAk6rQVzl6K5CkYOmnvw==", - "dev": true, - "requires": { - "make-fetch-happen": "^10.0.6", - "minipass": "^3.1.6", - "minipass-fetch": "^2.0.3", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^9.0.1", - "proc-log": "^2.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true - }, - "make-fetch-happen": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", - "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", - "dev": true, - "requires": { - "agentkeepalive": "^4.2.1", - "cacache": "^16.1.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^9.0.0" - } - }, - "minipass-fetch": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", - "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", - "dev": true, - "requires": { - "encoding": "^0.1.13", - "minipass": "^3.1.6", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - } - } - } - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "npmlog": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", - "dev": true, - "requires": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - } - }, - "nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "requires": { - "boolbase": "^1.0.0" - } - }, - "nwsapi": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", - "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true - }, - "object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "dev": true - }, - "object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" - }, - "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.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "requires": { - "ee-first": "1.1.1" - } - }, - "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": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "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" - } - }, - "open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "dev": true, - "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - } - }, - "ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "requires": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true - }, - "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-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "dev": true, - "requires": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "dependencies": { - "retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "dev": true - } - } - }, - "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 - }, - "pacote": { - "version": "13.6.2", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.6.2.tgz", - "integrity": "sha512-Gu8fU3GsvOPkak2CkbojR7vjs3k3P9cA6uazKTHdsdV0gpCEQq2opelnEv30KRQWgVzP5Vd/5umjcedma3MKtg==", - "dev": true, - "requires": { - "@npmcli/git": "^3.0.0", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/promise-spawn": "^3.0.0", - "@npmcli/run-script": "^4.1.0", - "cacache": "^16.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "infer-owner": "^1.0.4", - "minipass": "^3.1.6", - "mkdirp": "^1.0.4", - "npm-package-arg": "^9.0.0", - "npm-packlist": "^5.1.0", - "npm-pick-manifest": "^7.0.0", - "npm-registry-fetch": "^13.0.1", - "proc-log": "^2.0.0", - "promise-retry": "^2.0.1", - "read-package-json": "^5.0.0", - "read-package-json-fast": "^2.0.3", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11" - } - }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "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" - } - }, - "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" - } - }, - "parse-node-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", - "dev": true - }, - "parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", - "optional": true - }, - "parse5-html-rewriting-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-6.0.1.tgz", - "integrity": "sha512-vwLQzynJVEfUlURxgnf51yAJDQTtVpNyGD8tKi2Za7m+akukNHxCcUQMAa/mUGLhCeicFdpy7Tlvj8ZNKadprg==", - "dev": true, - "requires": { - "parse5": "^6.0.1", - "parse5-sax-parser": "^6.0.1" - }, - "dependencies": { - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - } - } - }, - "parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", - "dev": true, - "requires": { - "parse5": "^6.0.1" - }, - "dependencies": { - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - } - } - }, - "parse5-sax-parser": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-6.0.1.tgz", - "integrity": "sha512-kXX+5S81lgESA0LsDuGjAlBybImAChYRMT+/uKCEXFBFOeEhS52qUCydGhU3qLRD8D9DVjaUo821WK7DM4iCeg==", - "dev": true, - "requires": { - "parse5": "^6.0.1" - }, - "dependencies": { - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "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 - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", - "dev": true, - "requires": { - "lru-cache": "^9.1.1 || ^10.0.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.0.tgz", - "integrity": "sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==", - "dev": true - }, - "minipass": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.2.tgz", - "integrity": "sha512-eL79dXrE1q9dBbDCLg7xfn/vl7MS4F1gvJAgjJrQli/jbQWdUttuVawphqpffoIYfRdq78LHx6GP4bU/EQ2ATA==", - "dev": true - } - } - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true - }, - "pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dev": true - }, - "piscina": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz", - "integrity": "sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA==", - "dev": true, - "requires": { - "eventemitter-asyncresource": "^1.0.0", - "hdr-histogram-js": "^2.0.1", - "hdr-histogram-percentiles-obj": "^3.0.0", - "nice-napi": "^1.0.2" - } - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", - "dev": true, - "requires": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } - }, - "postcss-attribute-case-insensitive": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz", - "integrity": "sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.10" - } - }, - "postcss-clamp": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", - "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-color-functional-notation": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz", - "integrity": "sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-color-hex-alpha": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz", - "integrity": "sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-color-rebeccapurple": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz", - "integrity": "sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-custom-media": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz", - "integrity": "sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-custom-properties": { - "version": "12.1.11", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz", - "integrity": "sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-custom-selectors": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz", - "integrity": "sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.4" - } - }, - "postcss-dir-pseudo-class": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz", - "integrity": "sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.10" - } - }, - "postcss-double-position-gradients": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz", - "integrity": "sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==", - "dev": true, - "requires": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-env-function": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz", - "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-focus-visible": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", - "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.9" - } - }, - "postcss-focus-within": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", - "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.9" - } - }, - "postcss-font-variant": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", - "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", - "dev": true, - "requires": {} - }, - "postcss-gap-properties": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz", - "integrity": "sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==", - "dev": true, - "requires": {} - }, - "postcss-image-set-function": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz", - "integrity": "sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-import": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", - "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - } - }, - "postcss-initial": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", - "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", - "dev": true, - "requires": {} - }, - "postcss-js": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", - "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", - "dev": true, - "requires": { - "camelcase-css": "^2.0.1" - } - }, - "postcss-lab-function": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz", - "integrity": "sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==", - "dev": true, - "requires": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-load-config": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", - "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", - "dev": true, - "requires": { - "lilconfig": "^2.0.5", - "yaml": "^2.1.1" - } - }, - "postcss-loader": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.3.tgz", - "integrity": "sha512-YgO/yhtevGO/vJePCQmTxiaEwER94LABZN0ZMT4A0vsak9TpO+RvKRs7EmJ8peIlB9xfXCsS7M8LjqncsUZ5HA==", - "dev": true, - "requires": { - "cosmiconfig": "^8.2.0", - "jiti": "^1.18.2", - "semver": "^7.3.8" - } - }, - "postcss-logical": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", - "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", - "dev": true, - "requires": {} - }, - "postcss-media-minmax": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", - "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", - "dev": true, - "requires": {} - }, - "postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, - "requires": {} - }, - "postcss-modules-local-by-default": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", - "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", - "dev": true, - "requires": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - } - }, - "postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.4" - } - }, - "postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, - "requires": { - "icss-utils": "^5.0.0" - } - }, - "postcss-nested": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", - "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.11" - } - }, - "postcss-nesting": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz", - "integrity": "sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==", - "dev": true, - "requires": { - "@csstools/selector-specificity": "^2.0.0", - "postcss-selector-parser": "^6.0.10" - } - }, - "postcss-opacity-percentage": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.3.tgz", - "integrity": "sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==", - "dev": true, - "requires": {} - }, - "postcss-overflow-shorthand": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz", - "integrity": "sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-page-break": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", - "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", - "dev": true, - "requires": {} - }, - "postcss-place": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.5.tgz", - "integrity": "sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-preset-env": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.8.0.tgz", - "integrity": "sha512-leqiqLOellpLKfbHkD06E04P6d9ZQ24mat6hu4NSqun7WG0UhspHR5Myiv/510qouCjoo4+YJtNOqg5xHaFnCA==", - "dev": true, - "requires": { - "@csstools/postcss-cascade-layers": "^1.0.5", - "@csstools/postcss-color-function": "^1.1.1", - "@csstools/postcss-font-format-keywords": "^1.0.1", - "@csstools/postcss-hwb-function": "^1.0.2", - "@csstools/postcss-ic-unit": "^1.0.1", - "@csstools/postcss-is-pseudo-class": "^2.0.7", - "@csstools/postcss-nested-calc": "^1.0.0", - "@csstools/postcss-normalize-display-values": "^1.0.1", - "@csstools/postcss-oklab-function": "^1.1.1", - "@csstools/postcss-progressive-custom-properties": "^1.3.0", - "@csstools/postcss-stepped-value-functions": "^1.0.1", - "@csstools/postcss-text-decoration-shorthand": "^1.0.0", - "@csstools/postcss-trigonometric-functions": "^1.0.2", - "@csstools/postcss-unset-value": "^1.0.2", - "autoprefixer": "^10.4.8", - "browserslist": "^4.21.3", - "css-blank-pseudo": "^3.0.3", - "css-has-pseudo": "^3.0.4", - "css-prefers-color-scheme": "^6.0.3", - "cssdb": "^7.0.0", - "postcss-attribute-case-insensitive": "^5.0.2", - "postcss-clamp": "^4.1.0", - "postcss-color-functional-notation": "^4.2.4", - "postcss-color-hex-alpha": "^8.0.4", - "postcss-color-rebeccapurple": "^7.1.1", - "postcss-custom-media": "^8.0.2", - "postcss-custom-properties": "^12.1.8", - "postcss-custom-selectors": "^6.0.3", - "postcss-dir-pseudo-class": "^6.0.5", - "postcss-double-position-gradients": "^3.1.2", - "postcss-env-function": "^4.0.6", - "postcss-focus-visible": "^6.0.4", - "postcss-focus-within": "^5.0.4", - "postcss-font-variant": "^5.0.0", - "postcss-gap-properties": "^3.0.5", - "postcss-image-set-function": "^4.0.7", - "postcss-initial": "^4.0.1", - "postcss-lab-function": "^4.2.1", - "postcss-logical": "^5.0.4", - "postcss-media-minmax": "^5.0.0", - "postcss-nesting": "^10.1.10", - "postcss-opacity-percentage": "^1.1.2", - "postcss-overflow-shorthand": "^3.0.4", - "postcss-page-break": "^3.0.4", - "postcss-place": "^7.0.5", - "postcss-pseudo-class-any-link": "^7.1.6", - "postcss-replace-overflow-wrap": "^4.0.0", - "postcss-selector-not": "^6.0.1", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-pseudo-class-any-link": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz", - "integrity": "sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.10" - } - }, - "postcss-replace-overflow-wrap": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", - "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", - "dev": true, - "requires": {} - }, - "postcss-scss": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz", - "integrity": "sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==", - "dev": true, - "requires": {} - }, - "postcss-selector-not": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz", - "integrity": "sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.10" - } - }, - "postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - }, - "postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "dev": true - }, - "prettier-plugin-organize-attributes": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/prettier-plugin-organize-attributes/-/prettier-plugin-organize-attributes-0.0.5.tgz", - "integrity": "sha512-dSts16q8wd+oq8Zwk5mwmYXo1aN3B+ZkEJqx/ar5fedNHdOvx7S4XDMH/pNK7rmBW0bPXkp/kJX5gAANsWzh3A==", - "dev": true, - "requires": {} - }, - "pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true - }, - "proc-log": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", - "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", - "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 - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true - }, - "promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "dev": true, - "requires": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - } - }, - "proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "dependencies": { - "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 - } - } - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true, - "optional": true - }, - "psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" - }, - "punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==" - }, - "qjobs": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", - "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", - "dev": true - }, - "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "requires": { - "side-channel": "^1.0.4" - } - }, - "querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "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.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dev": true, - "requires": { - "pify": "^2.3.0" - } - }, - "read-package-json": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.2.tgz", - "integrity": "sha512-BSzugrt4kQ/Z0krro8zhTwV1Kd79ue25IhNN/VtHFy1mG/6Tluyi+msc0UpwaoQzxSHa28mntAjIZY6kEgfR9Q==", - "dev": true, - "requires": { - "glob": "^8.0.1", - "json-parse-even-better-errors": "^2.3.1", - "normalize-package-data": "^4.0.0", - "npm-normalize-package-bin": "^2.0.0" - }, - "dependencies": { - "npm-normalize-package-bin": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", - "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", - "dev": true - } - } - }, - "read-package-json-fast": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", - "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", - "dev": true, - "requires": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "requires": { - "picomatch": "^2.2.1" - } - }, - "reflect-metadata": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", - "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" - }, - "regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "dev": true, - "requires": { - "regenerate": "^1.4.2" - } - }, - "regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", - "dev": true - }, - "regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regex-parser": { - "version": "2.2.11", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", - "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", - "dev": true - }, - "regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", - "dev": true, - "requires": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - } - }, - "regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true - } - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - }, - "resolve-url-loader": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", - "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", - "dev": true, - "requires": { - "adjust-sourcemap-loader": "^4.0.0", - "convert-source-map": "^1.7.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.14", - "source-map": "0.6.1" - }, - "dependencies": { - "loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "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 - } - } - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - }, - "dependencies": { - "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" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "rrweb-cssom": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", - "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==" - }, - "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-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "requires": { - "tslib": "^2.1.0" - } - }, - "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 - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sass": { - "version": "1.54.4", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.54.4.tgz", - "integrity": "sha512-3tmF16yvnBwtlPrNBHw/H907j8MlOX8aTBnlNX1yrKx24RKcJGPyLhFUwkoKBKesR3unP93/2z14Ll8NicwQUA==", - "dev": true, - "requires": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - } - }, - "sass-loader": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.0.2.tgz", - "integrity": "sha512-BbiqbVmbfJaWVeOOAu2o7DhYWtcNmTfvroVgFXa6k2hHheMxNAeDHLNoDy/Q5aoaVlz0LH+MbMktKwm9vN/j8Q==", - "dev": true, - "requires": { - "klona": "^2.0.4", - "neo-async": "^2.6.2" - } - }, - "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": "6.0.0", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", - "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", - "requires": { - "xmlchars": "^2.2.0" - } - }, - "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, - "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" - } - }, - "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, - "requires": {} - }, - "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 - } - } - }, - "select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "dev": true - }, - "selfsigned": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", - "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", - "dev": true, - "requires": { - "@types/node-forge": "^1.3.0", - "node-forge": "^1" - } - }, - "semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "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.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - } - } - }, - "serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "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": { - "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" - } - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "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": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "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 - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true - } - } - }, - "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dev": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true - }, - "smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true - }, - "socket.io": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.4.tgz", - "integrity": "sha512-DcotgfP1Zg9iP/dH9zvAQcWrE0TtbMVwXmlV4T4mqsvY+gw+LqUGPfx2AoVyRk0FLME+GQhufDMyacFmw7ksqw==", - "dev": true, - "requires": { - "accepts": "~1.3.4", - "base64id": "~2.0.0", - "cors": "~2.8.5", - "debug": "~4.3.2", - "engine.io": "~6.5.2", - "socket.io-adapter": "~2.5.2", - "socket.io-parser": "~4.2.4" - } - }, - "socket.io-adapter": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", - "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", - "dev": true, - "requires": { - "debug": "~4.3.4", - "ws": "~8.17.1" - } - }, - "socket.io-parser": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", - "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", - "dev": true, - "requires": { - "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.1" - } - }, - "sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "dev": true, - "requires": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "socks": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.3.tgz", - "integrity": "sha512-vfuYK48HXCTFD03G/1/zkIls3Ebr2YNa4qU9gHDZdblHLiqhJrJGkY3+0Nx0JpN9qBhJbVObc1CNciT1bIZJxw==", - "dev": true, - "requires": { - "ip-address": "^9.0.5", - "smart-buffer": "^4.2.0" - } - }, - "socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", - "dev": true, - "requires": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - } - }, - "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true - }, - "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true - }, - "source-map-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-4.0.0.tgz", - "integrity": "sha512-i3KVgM3+QPAHNbGavK+VBq03YoJl24m9JWNbLgsjTj8aJzXG9M61bantBTNBt7CNwY2FYf+RJRYJ3pzalKjIrw==", - "dev": true, - "requires": { - "abab": "^2.0.6", - "iconv-lite": "^0.6.3", - "source-map-js": "^1.0.2" - }, - "dependencies": { - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "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 - } - } - }, - "sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, - "spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "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.13", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", - "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", - "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" - } - }, - "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" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "ssri": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", - "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", - "dev": true, - "requires": { - "minipass": "^3.1.1" - } - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" - }, - "streamroller": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz", - "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==", - "dev": true, - "requires": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "fs-extra": "^8.1.0" - }, - "dependencies": { - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "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 - } - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "string-width-cjs": { - "version": "npm:string-width@4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-ansi-cjs": { - "version": "npm:strip-ansi@6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-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 - }, - "stylus": { - "version": "0.59.0", - "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.59.0.tgz", - "integrity": "sha512-lQ9w/XIOH5ZHVNuNbWW8D822r+/wBSO/d6XvtyHLF7LW4KaCIDeVbvn5DF8fGCJAUCwVhVi/h6J0NUcnylUEjg==", - "dev": true, - "requires": { - "@adobe/css-tools": "^4.0.1", - "debug": "^4.3.2", - "glob": "^7.1.6", - "sax": "~1.2.4", - "source-map": "^0.7.3" - }, - "dependencies": { - "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" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "stylus-loader": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-7.0.0.tgz", - "integrity": "sha512-WTbtLrNfOfLgzTaR9Lj/BPhQroKk/LC1hfTXSUbrxmxgfUo3Y3LpmKRVA2R1XbjvTAvOfaian9vOyfv1z99E+A==", - "dev": true, - "requires": { - "fast-glob": "^3.2.11", - "klona": "^2.0.5", - "normalize-path": "^3.0.0" - } - }, - "sucrase": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", - "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "glob": "7.1.6", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "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" - } - }, - "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" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "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" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "symbol-observable": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", - "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", - "dev": true - }, - "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==" - }, - "tailwindcss": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.3.tgz", - "integrity": "sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==", - "dev": true, - "requires": { - "@alloc/quick-lru": "^5.2.0", - "arg": "^5.0.2", - "chokidar": "^3.5.3", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.2.12", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "jiti": "^1.18.2", - "lilconfig": "^2.1.0", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.23", - "postcss-import": "^15.1.0", - "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.1", - "postcss-nested": "^6.0.1", - "postcss-selector-parser": "^6.0.11", - "resolve": "^1.22.2", - "sucrase": "^3.32.0" - }, - "dependencies": { - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", - "dev": true, - "requires": { - "is-core-module": "^2.11.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - } - } - }, - "tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true - }, - "tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", - "dev": true, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "dependencies": { - "minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "terser": { - "version": "5.14.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", - "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", - "dev": true, - "requires": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "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 - } - } - }, - "terser-webpack-plugin": { - "version": "5.3.9", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", - "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.17", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.16.8" - }, - "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" - } - }, - "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, - "requires": {} - }, - "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 - }, - "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 - }, - "schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "terser": { - "version": "5.19.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.2.tgz", - "integrity": "sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==", - "dev": true, - "requires": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - } - } - } - }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "dependencies": { - "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" - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "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": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dev": true, - "requires": { - "thenify": ">= 3.1.0 < 4" - } - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, - "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-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" - }, - "tough-cookie": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", - "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", - "requires": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "dependencies": { - "universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==" - } - } - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true - }, - "ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "dev": true - }, - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typed-assert": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", - "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==", - "dev": true - }, - "typescript": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", - "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", - "dev": true - }, - "ua-parser-js": { - "version": "0.7.35", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.35.tgz", - "integrity": "sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g==", - "dev": true - }, - "unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true - }, - "unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "dev": true - }, - "unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "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": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" - }, - "update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "dev": true, - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "url-join": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz", - "integrity": "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==" - }, - "url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - }, - "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" - } - }, - "validate-npm-package-name": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", - "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", - "dev": true, - "requires": { - "builtins": "^5.0.0" - } - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true - }, - "void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==", - "dev": true - }, - "w3c-xmlserializer": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", - "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", - "requires": { - "xml-name-validator": "^5.0.0" - } - }, - "watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dev": true, - "requires": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - } - }, - "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": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "requires": { - "defaults": "^1.0.3" - } - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "webpack": { - "version": "5.88.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.2.tgz", - "integrity": "sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==", - "dev": true, - "peer": true, - "requires": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.0", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.15.0", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.7", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "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, - "peer": 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" - } - }, - "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, - "peer": true, - "requires": {} - }, - "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, - "peer": true - }, - "schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "peer": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", - "dev": true, - "requires": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "dependencies": { - "schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - } - } - } - }, - "webpack-dev-server": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.0.tgz", - "integrity": "sha512-L5S4Q2zT57SK7tazgzjMiSMBdsw+rGYIX27MgPgx7LDhWO0lViPrHKoLS7jo5In06PWYAhlYu3PbyoC6yAThbw==", - "dev": true, - "requires": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.0.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.4.2" - }, - "dependencies": { - "schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - } - } - } - }, - "webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "dev": true, - "requires": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - } - }, - "webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true - }, - "webpack-subresource-integrity": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz", - "integrity": "sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==", - "dev": true, - "requires": { - "typed-assert": "^1.0.8" - } - }, - "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": "3.1.1", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", - "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", - "requires": { - "iconv-lite": "0.6.3" - }, - "dependencies": { - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "whatwg-mimetype": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", - "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==" - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "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" - } - }, - "wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "wildcard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "wrap-ansi-cjs": { - "version": "npm:wrap-ansi@7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", - "requires": {} - }, - "xml-name-validator": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", - "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==" - }, - "xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "yaml": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", - "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", - "dev": true - }, - "yargs": { - "version": "17.5.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", - "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" - } - }, - "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true - }, - "zod": { - "version": "3.22.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", - "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==" - }, - "zone.js": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.12.0.tgz", - "integrity": "sha512-XtC+I5dXU14HrzidAKBNMqneIVUykLEAA1x+v4KVrd6AUPWlwYORF8KgsVqvgdHiKZ4BkxxjvYi/ksEixTPR0Q==", - "requires": { - "tslib": "^2.3.0" - } - } - } -} diff --git a/package.json b/package.json deleted file mode 100644 index cc540581f..000000000 --- a/package.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "name": "sovity-edc-ui", - "version": "0.0.0", - "license": "Apache 2.0", - "scripts": { - "cold-start": "npm ci && npm run start", - "ng": "ng", - "start": "npm run generate-config && ng serve --host 0.0.0.0 ", - "start-prod": "npm run generate-config && ng serve --host 0.0.0.0 --configuration=production", - "build": "ng build", - "watch": "ng build --watch --configuration development", - "test": "ng test", - "generate-config": "node config-generator.js", - "format-all": "prettier --write ." - }, - "private": true, - "dependencies": { - "@angular/animations": "^14.3.0", - "@angular/cdk": "^14.2.7", - "@angular/common": "^14.3.0", - "@angular/compiler": "^14.3.0", - "@angular/core": "^14.3.0", - "@angular/flex-layout": "^14.0.0-beta.41", - "@angular/forms": "^14.3.0", - "@angular/material": "^14.2.7", - "@angular/platform-browser": "^14.3.0", - "@angular/platform-browser-dynamic": "^14.3.0", - "@angular/router": "^14.3.0", - "@ng-apimock/core": "^3.11.0", - "@ngx-translate/core": "^14.0.0", - "@ngx-translate/http-loader": "^7.0.0", - "@ngxs/store": "^3.8.1", - "@sovity.de/edc-client": "10.4.0", - "clean-deep": "^3.4.0", - "date-fns": "^2.30.0", - "date-fns-tz": "^2.0.1", - "dotenv": "^16.3.1", - "isomorphic-dompurify": "^2.0.0", - "json-stable-stringify": "^1.0.2", - "marked": "^11.1.1", - "ng2-charts": "^4.1.1", - "ngx-json-viewer": "^3.2.1", - "rxjs": "7.8.1", - "tslib": "^2.6.2", - "url-join": "^5.0.0", - "zone.js": "^0.12.0" - }, - "devDependencies": { - "@angular-devkit/build-angular": "^14.2.12", - "@angular/cli": "^14.2.13", - "@angular/compiler-cli": "^14.3.0", - "@tailwindcss/typography": "^0.5.10", - "@trivago/prettier-plugin-sort-imports": "^4.2.0", - "@types/dompurify": "^3.0.5", - "@types/jasmine": "^4.3.6", - "@types/node": "^18.17.1", - "jasmine-core": "^4.6.0", - "karma": "^6.4.3", - "karma-chrome-launcher": "~3.2.0", - "karma-coverage": "^2.2.1", - "karma-jasmine": "^5.1.0", - "karma-jasmine-html-reporter": "~2.1.0", - "ngx-build-plus": "^14.0.0", - "postcss-import": "^15.1.0", - "postcss-loader": "^7.3.3", - "postcss-scss": "^4.0.9", - "prettier": "^2.8.8", - "prettier-plugin-organize-attributes": "^0.0.5", - "tailwindcss": "^3.3.3", - "typescript": "^4.8.4" - }, - "resolutions": { - "@angular-devkit/build-angular": "14.2.12", - "@angular-devkit/core": "14.3.0" - } -} diff --git a/postcss.config.js b/postcss.config.js deleted file mode 100644 index e569373fd..000000000 --- a/postcss.config.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = { - plugins: { - 'postcss-import': {}, - 'tailwindcss/nesting': {}, - tailwindcss: {}, - autoprefixer: {}, - }, -}; diff --git a/prettier.config.js b/prettier.config.js deleted file mode 100644 index f1f673c72..000000000 --- a/prettier.config.js +++ /dev/null @@ -1,42 +0,0 @@ -module.exports = { - tabWidth: 2, - useTabs: false, - singleQuote: true, - semi: true, - arrowParens: 'always', - trailingComma: 'all', - bracketSameLine: true, - printWidth: 80, - bracketSpacing: false, - proseWrap: 'always', - - attributeGroups: [ - '$ANGULAR_STRUCTURAL_DIRECTIVE', - '^(id|name)$', - '^class$', - '$DEFAULT', - '^aria-', - '$ANGULAR_INPUT', - '$ANGULAR_TWO_WAY_BINDING', - '$ANGULAR_OUTPUT', - ], - - // @trivago/prettier-plugin-sort-imports - importOrder: [ - // this import needs to be on top or tests fail - '^zone.js/testing$', - // third parties first - '^@angular/(.*)$', - '^rxjs(/(.*))?$', - '', - // rest after - '^[./]', - ], - importOrderParserPlugins: [ - 'typescript', - 'classProperties', - 'decorators-legacy', - ], - importOrderSeparation: false, - importOrderSortSpecifiers: true, -}; diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts deleted file mode 100644 index 87c2d65f6..000000000 --- a/src/app/app-routing.module.ts +++ /dev/null @@ -1,36 +0,0 @@ -import {NgModule} from '@angular/core'; -import {ROUTES, RouterModule, Routes} from '@angular/router'; -import {APP_CONFIG, AppConfig} from './core/config/app-config'; -import {PageNotFoundPageComponent} from './routes/connector-ui/page-not-found-page/page-not-found-page.component'; - -@NgModule({ - imports: [RouterModule.forRoot([], {paramsInheritanceStrategy: 'always'})], - exports: [RouterModule], - providers: [ - { - provide: ROUTES, - deps: [APP_CONFIG], - multi: true, - - useFactory: (config: AppConfig): Routes => { - const routes: Routes = []; - switch (config.routes) { - case 'connector-ui': - routes.push({ - path: '', - loadChildren: () => - import('./routes/connector-ui/connector-ui.module').then( - (m) => m.ConnectorUiModule, - ), - }); - break; - default: - throw new Error(`Unhandled PageSet: ${config.routes}`); - } - routes.push({path: '**', component: PageNotFoundPageComponent}); - return routes; - }, - }, - ], -}) -export class AppRoutingModule {} diff --git a/src/app/app.component.html b/src/app/app.component.html deleted file mode 100644 index 8f67d6fb5..000000000 --- a/src/app/app.component.html +++ /dev/null @@ -1,12 +0,0 @@ - - - -

diff --git a/src/app/app.component.ts b/src/app/app.component.ts deleted file mode 100644 index 97215ff6c..000000000 --- a/src/app/app.component.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {Component, Inject, OnInit} from '@angular/core'; -import {APP_CONFIG, AppConfig} from './core/config/app-config'; -import {FaviconService} from './core/services/favicon.service'; - -@Component({ - selector: 'app-root', - templateUrl: './app.component.html', -}) -export class AppComponent implements OnInit { - constructor( - @Inject(APP_CONFIG) private config: AppConfig, - private faviconService: FaviconService, - ) {} - - ngOnInit(): void { - this.setThemeFromConfig(); - } - - private setThemeFromConfig() { - window.document.body.classList.add(this.config.theme); - this.faviconService.setFavicon(this.config.brandFaviconSrc); - } -} diff --git a/src/app/app.module.ts b/src/app/app.module.ts deleted file mode 100644 index c166dc256..000000000 --- a/src/app/app.module.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { - HTTP_INTERCEPTORS, - HttpClient, - HttpClientModule, -} from '@angular/common/http'; -import {NgModule} from '@angular/core'; -import {BrowserModule} from '@angular/platform-browser'; -import {BrowserAnimationsModule} from '@angular/platform-browser/animations'; -import {TitleStrategy} from '@angular/router'; -import {TranslateLoader, TranslateModule} from '@ngx-translate/core'; -import {TranslateHttpLoader} from '@ngx-translate/http-loader'; -import {NgxsModule} from '@ngxs/store'; -import {NgChartsModule} from 'ng2-charts'; -import {AppRoutingModule} from './app-routing.module'; -import {AppComponent} from './app.component'; -import {provideAppConfig} from './core/config/app-config-initializer'; -import {ApiKeyInterceptor} from './core/services/api/api-key.interceptor'; -import {CustomPageTitleStrategy} from './core/services/page-title-strategy'; -import {SharedModule} from './shared/shared.module'; - -@NgModule({ - imports: [ - // Angular - BrowserAnimationsModule, - BrowserModule, - HttpClientModule, - - //Translation - TranslateModule.forRoot({ - loader: { - provide: TranslateLoader, - useFactory: (http: HttpClient) => new TranslateHttpLoader(http), - deps: [HttpClient], - }, - }), - - // NgXs - NgxsModule.forRoot([]), - - // Third Party - NgChartsModule.forRoot(), - - // Features - SharedModule, - - // Routing - AppRoutingModule, - ], - declarations: [AppComponent], - providers: [ - HttpClient, - provideAppConfig(), - - {provide: HTTP_INTERCEPTORS, multi: true, useClass: ApiKeyInterceptor}, - {provide: TitleStrategy, useClass: CustomPageTitleStrategy}, - ], - bootstrap: [AppComponent], - exports: [TranslateModule], -}) -export class AppModule {} diff --git a/src/app/core/adapters/custom-date-adapter.ts b/src/app/core/adapters/custom-date-adapter.ts deleted file mode 100644 index d920b162c..000000000 --- a/src/app/core/adapters/custom-date-adapter.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {Injectable} from '@angular/core'; -import {NativeDateAdapter} from '@angular/material/core'; -import {isValid, parse as parseDate} from 'date-fns'; -import {format as formateDate} from 'date-fns-tz'; - -@Injectable() -export class CustomDateAdapter extends NativeDateAdapter { - parse(value: any): Date | null { - if (typeof value === 'string' && value.indexOf('/') > -1) { - const parsedDate = parseDate(value, 'dd/MM/yyyy', new Date()); - return isValid(parsedDate) ? parsedDate : null; - } - - const timestamp = typeof value === 'number' ? value : Date.parse(value); - return isNaN(timestamp) ? null : new Date(timestamp); - } - - format(date: Date, displayFormat: Object): string { - return formateDate(date, 'dd/MM/yyyy', { - timeZone: 'UTC', - }); - } -} diff --git a/src/app/core/config/active-feature-set.ts b/src/app/core/config/active-feature-set.ts deleted file mode 100644 index b6f58cd50..000000000 --- a/src/app/core/config/active-feature-set.ts +++ /dev/null @@ -1,20 +0,0 @@ -import {Inject, Injectable} from '@angular/core'; -import {APP_CONFIG, AppConfig} from './app-config'; -import {EdcUiFeature} from './profiles/edc-ui-feature'; - -@Injectable({providedIn: 'root'}) -export class ActiveFeatureSet { - constructor(@Inject(APP_CONFIG) private config: AppConfig) {} - - hasMdsFields(): boolean { - return this.has('mds-fields'); - } - - hasConnectorLimits(): boolean { - return this.has('connector-limits'); - } - - has(feature: EdcUiFeature): boolean { - return this.config.features.has(feature); - } -} diff --git a/src/app/core/config/app-config-initializer.ts b/src/app/core/config/app-config-initializer.ts deleted file mode 100644 index 1185fbc19..000000000 --- a/src/app/core/config/app-config-initializer.ts +++ /dev/null @@ -1,22 +0,0 @@ -import {Provider} from '@angular/core'; -import {APP_CONFIG, AppConfig} from './app-config'; -import {AppConfigBuilder} from './app-config.builder'; -import {AppConfigFetcher} from './app-config.fetcher'; -import {AppConfigMerger} from './app-config.merger'; - -let appConfig: AppConfig | null = null; - -export async function loadAppConfig(): Promise { - const merger = new AppConfigMerger(); - const builder = new AppConfigBuilder(); - const fetcher = new AppConfigFetcher(merger); - return fetcher - .fetchEffectiveConfig('/assets/config/app-configuration.json', null) - .then((json) => builder.buildAppConfig(json)) - .then((config) => (appConfig = config)); -} - -export const provideAppConfig = (): Provider => ({ - provide: APP_CONFIG, - useFactory: () => appConfig, -}); diff --git a/src/app/core/config/app-config-injection-utils.ts b/src/app/core/config/app-config-injection-utils.ts deleted file mode 100644 index 771cb85b9..000000000 --- a/src/app/core/config/app-config-injection-utils.ts +++ /dev/null @@ -1,19 +0,0 @@ -import {InjectionToken, Provider} from '@angular/core'; -import {KeysOfType} from '../utils/type-utils'; -import {APP_CONFIG, AppConfig} from './app-config'; - -/** - * Provide individual {@link AppConfig} properties for better Angular Component APIs. - * - * @param token injection token - * @param key property in {@link AppConfig} - * @return {@link Provider} - */ -export const provideAppConfigProperty = ( - token: InjectionToken, - key: KeysOfType, -): Provider => ({ - provide: token, - useFactory: (s: AppConfig) => s[key], - deps: [APP_CONFIG], -}); diff --git a/src/app/core/config/app-config-properties.ts b/src/app/core/config/app-config-properties.ts deleted file mode 100644 index 7511ca17c..000000000 --- a/src/app/core/config/app-config-properties.ts +++ /dev/null @@ -1,68 +0,0 @@ -/** - * Supported Config ENV Vars - * - * All ENV Vars need to start with EDC_UI_ because only those will be written into app-config.json. - */ -export const AppConfigProperties = { - /** - * Instead of providing multiple ENV Vars, - * provide a single one as JSON. - * - * Individual ENV Vars will take precedence over this JSON. - */ - configJson: 'EDC_UI_CONFIG_JSON', - - /** - * Additional URL to fetch a Config JSON from that will take precedence. - * - * This allows an EDC Backend Extension to provide EDC UI configuration - * - * If this URL is relative, it will be appended to the {@link AppConfigProperties.managementApiUrl}. - * - * The JSON should be a {@link Record} - */ - configUrl: 'EDC_UI_CONFIG_URL', - - /** - * Customer-Specific Feature Set and/or Theme. - * - * See {@link EDC_UI_PROFILE_DATA} for all available profiles. - */ - activeProfile: 'EDC_UI_ACTIVE_PROFILE', - - /** - * EDC Backend URL - */ - managementApiUrl: 'EDC_UI_MANAGEMENT_API_URL', - - /** - * Hard-Coded API key (?) - */ - managementApiKey: 'EDC_UI_MANAGEMENT_API_KEY', - - /** - * Overridden management API URL to be displayed for the user - */ - shownManagementApiUrl: 'EDC_UI_MANAGEMENT_API_URL_SHOWN_IN_DASHBOARD', - - /** - * Logout URL. - */ - logoutUrl: 'EDC_UI_LOGOUT_URL', - - /** - * Pre-configured Other Connector Endpoints to be used in catalog browser, comma separated. - */ - catalogUrls: 'EDC_UI_CATALOG_URLS', - - /** - * Whether to use the fake backend (local development). - */ - useFakeBackend: 'EDC_UI_USE_FAKE_BACKEND', - - /** - * Only for Enterprise Edition. - * Enables Marketing for other Enterprise Edition Variants. - */ - showEeBasicMarketing: 'EDC_UI_SHOW_EE_BASIC_MARKETING', -}; diff --git a/src/app/core/config/app-config.builder.ts b/src/app/core/config/app-config.builder.ts deleted file mode 100644 index 770299dbe..000000000 --- a/src/app/core/config/app-config.builder.ts +++ /dev/null @@ -1,46 +0,0 @@ -import {Injectable} from '@angular/core'; -import {AppConfig} from './app-config'; -import {AppConfigProperties} from './app-config-properties'; -import {getProfileOrFallback} from './profiles/get-profile-or-fallback'; - -@Injectable() -export class AppConfigBuilder { - /** - * Build {@link AppConfig} from ENV Vars - * - * @param vars env vars - */ - buildAppConfig(vars: Record): AppConfig { - const {profile, profileConfig} = getProfileOrFallback( - vars[AppConfigProperties.activeProfile], - ); - - return { - // profile and theme - profile, - ...profileConfig, - - // EDC Backend Endpoints - managementApiKey: - vars[AppConfigProperties.managementApiKey] ?? 'no-api-key-configured', - managementApiUrl: - vars[AppConfigProperties.managementApiUrl] ?? - 'https://no-backend-api-url-configured', - logoutUrl: - vars[AppConfigProperties.logoutUrl] ?? - 'https://no-logout-url-configured', - shownManagementApiUrl: - vars[AppConfigProperties.shownManagementApiUrl] ?? - vars[AppConfigProperties.managementApiUrl] ?? - 'https://no-backend-api-url-configured', - - // Other EDC Backend Endpoints - catalogUrls: vars[AppConfigProperties.catalogUrls] ?? '', - useFakeBackend: vars[AppConfigProperties.useFakeBackend] === 'true', - - // Enterprise Edition - showEeBasicMarketing: - vars[AppConfigProperties.showEeBasicMarketing] === 'true', - }; - } -} diff --git a/src/app/core/config/app-config.fetcher.ts b/src/app/core/config/app-config.fetcher.ts deleted file mode 100644 index 99b7c6ff5..000000000 --- a/src/app/core/config/app-config.fetcher.ts +++ /dev/null @@ -1,82 +0,0 @@ -import urlJoin from 'url-join'; -import {validUrlPattern} from '../validators/url-validator'; -import {AppConfigProperties} from './app-config-properties'; -import {AppConfigMerger} from './app-config.merger'; - -export class AppConfigFetcher { - constructor(private appConfigMerger: AppConfigMerger) {} - - /** - * Fetches app-config.json, applies {@link AppConfigProperties.configJson}, - * fetches another config from {@link AppConfigProperties.configUrl}, and - * merges the results. - */ - async fetchEffectiveConfig( - configUrl: string, - apiKey: string | null, - ): Promise> { - let config = await this.fetchConfigJson(configUrl, apiKey); - config = this.appConfigMerger.applyEmbeddedConfig(configUrl, config); - - const additionalConfigUrl = this.buildAdditionConfigUrl(config); - if (additionalConfigUrl) { - apiKey = config[AppConfigProperties.managementApiKey] ?? apiKey; - const additionalConfig = await this.fetchEffectiveConfig( - additionalConfigUrl, - apiKey, - ); - config = this.appConfigMerger.mergeConfigs( - configUrl, - config, - additionalConfigUrl, - additionalConfig, - ); - } - - return config; - } - - private fetchConfigJson( - path: string, - apiKey: string | null, - ): Promise> { - const headers = apiKey ? {'X-API-KEY': apiKey} : undefined; - - // We fetch the config using the Fetch API because we want to fetch it before application initialization - // At this time the Angular Http Client is not ready yet - return fetch(path, {headers}) - .then((response) => response.json()) - .catch((err) => { - console.error(`Could not fetch app-config.json from ${path}`, err); - return {}; - }); - } - - private buildAdditionConfigUrl( - config: Record, - ): string | null { - const relativeUrl = config[AppConfigProperties.configUrl]; - if (!relativeUrl) { - return null; - } - - // Absolute URL - if (validUrlPattern.test(relativeUrl)) { - return relativeUrl; - } - - // Relative URL - const managementApiUrl = config[AppConfigProperties.managementApiUrl]; - - if (!managementApiUrl) { - console.error( - `Invalid value for ${AppConfigProperties.configUrl} and ${AppConfigProperties.managementApiUrl}. Could not build Additional Config URL:`, - relativeUrl, - managementApiUrl, - ); - return null; - } - - return urlJoin(managementApiUrl, relativeUrl); - } -} diff --git a/src/app/core/config/app-config.merger.ts b/src/app/core/config/app-config.merger.ts deleted file mode 100644 index b588a4e9f..000000000 --- a/src/app/core/config/app-config.merger.ts +++ /dev/null @@ -1,91 +0,0 @@ -import {AppConfigProperties} from './app-config-properties'; - -export class AppConfigMerger { - /** - * Merges two configs. - * - * @param configName first config name for logging - * @param config first config - * @param overridesName second config name for logging - * @param overrides second config (takes precedence) - */ - mergeConfigs( - configName: string, - config: Record, - overridesName: string, - overrides: Record, - ): Record { - Object.keys(config) - .filter((key) => overrides.hasOwnProperty(key)) - .forEach((key) => { - if (config[key] != overrides[key]) { - console.info( - `Overriding '${key}' from '${configName}' with value '${config[key]}'` + - ` with '${overrides[key]}' from '${overridesName}'.`, - ); - } - }); - - return { - ...config, - ...overrides, - }; - } - - /** - * Applies special value {@link AppConfigProperties.configJson} that might contain a JSON as single property. - * - * @param configName for better error logging - * @param config config - */ - applyEmbeddedConfig( - configName: string, - config: Record, - ): Record { - // Read JSON property - const embeddedConfigName = `${configName} -> ${AppConfigProperties.configJson}`; - let embeddedConfig = this.parseEmbeddedConfig(config); - - // Apply Embedded Config recursively - if (embeddedConfig.hasOwnProperty(AppConfigProperties.configJson)) { - embeddedConfig = this.applyEmbeddedConfig( - embeddedConfigName, - embeddedConfig, - ); - } - - // Remove Embedded Config key from config for cleanliness - const {[AppConfigProperties.configJson]: _, ...rest} = config; - - // Merge with original config taking precedence - config = this.mergeConfigs( - embeddedConfigName, - embeddedConfig, - `${configName}`, - rest, - ); - - return config; - } - - /** - * Tries to parse {@link AppConfigProperties.configJson} as JSON. - * - * @param config config - * @returns parsed JSON - */ - private parseEmbeddedConfig( - config: Record, - ): Record { - try { - return JSON.parse(config[AppConfigProperties.configJson] || '{}'); - } catch (e) { - console.error( - `Could not parse not parse embedded Config JSON`, - e, - config[AppConfigProperties.configJson], - ); - return {}; - } - } -} diff --git a/src/app/core/config/app-config.ts b/src/app/core/config/app-config.ts deleted file mode 100644 index 4fc6b8011..000000000 --- a/src/app/core/config/app-config.ts +++ /dev/null @@ -1,41 +0,0 @@ -import {InjectionToken} from '@angular/core'; -import {EdcUiColorTheme} from './profiles/edc-ui-color-theme'; -import {EdcUiFeature} from './profiles/edc-ui-feature'; -import {EdcUiProfile} from './profiles/edc-ui-profile'; -import {EdcUiRouteSet} from './profiles/edc-ui-route-set'; - -/** - * Injection Token for {@link AppConfig} - */ -export const APP_CONFIG = new InjectionToken('APP_CONFIG'); - -/** - * Type-Safe and interpreted App Config - * - * See {@link AppConfigProperties} for available ENV Vars. - */ -export interface AppConfig { - // selected profile - profile: EdcUiProfile; - features: Set; - routes: EdcUiRouteSet; - - // selected theme (by profile) - theme: EdcUiColorTheme; - brandFaviconSrc: string; - brandLogoSrc: string; - brandLogoStyle: string; - - // EDC Backend Endpoints - managementApiUrl: string; - managementApiKey: string; - logoutUrl: string; // requires feature flag logout-button - shownManagementApiUrl: string; - - // Other EDC Backend Endpoints - catalogUrls: string; - useFakeBackend: boolean; - - // Enterprise Edition - showEeBasicMarketing: boolean; -} diff --git a/src/app/core/config/profiles/edc-ui-color-theme.ts b/src/app/core/config/profiles/edc-ui-color-theme.ts deleted file mode 100644 index d848c2050..000000000 --- a/src/app/core/config/profiles/edc-ui-color-theme.ts +++ /dev/null @@ -1 +0,0 @@ -export type EdcUiColorTheme = 'theme-sovity' | 'theme-mds'; diff --git a/src/app/core/config/profiles/edc-ui-feature.ts b/src/app/core/config/profiles/edc-ui-feature.ts deleted file mode 100644 index 4d498abf2..000000000 --- a/src/app/core/config/profiles/edc-ui-feature.ts +++ /dev/null @@ -1,21 +0,0 @@ -export type EdcUiFeature = - // Enables MDS Specific Asset Fields such as Data Category, Transport Mode - | 'mds-fields' - - // Enables MDS Specific Connector ID support - | 'mds-connector-id' - - // Enables support functionalities of connectors commercially hosted by sovity. - | 'sovity-zammad-integration' - - // Enables logout button to configured LOGOUT_URL - | 'logout-button' - - // Enables marketing for sovity in open-source variants - | 'open-source-marketing' - - // Enterprise Edition specific attribute to view limits enforced on consuming contract agreements - | 'connector-limits' - - // Enterprise Edition specific flag to enable marketing for other Enterprise Edition variants in basic connectors - | 'mds-marketing'; diff --git a/src/app/core/config/profiles/edc-ui-profile-config.ts b/src/app/core/config/profiles/edc-ui-profile-config.ts deleted file mode 100644 index 1dc46c795..000000000 --- a/src/app/core/config/profiles/edc-ui-profile-config.ts +++ /dev/null @@ -1,5 +0,0 @@ -import {AppConfig} from '../app-config'; -import {EdcUiThemeConfig} from './edc-ui-theme-config'; - -export type EdcUiProfileConfig = Pick & - EdcUiThemeConfig; diff --git a/src/app/core/config/profiles/edc-ui-profile-data.ts b/src/app/core/config/profiles/edc-ui-profile-data.ts deleted file mode 100644 index 0f43746b8..000000000 --- a/src/app/core/config/profiles/edc-ui-profile-data.ts +++ /dev/null @@ -1,42 +0,0 @@ -import {MDS_THEME, SOVITY_THEME} from './edc-ui-theme-data'; -import {COMMUNITY_EDITION_FEATURES} from './feature-sets/community-edition-features'; -import {ENTERPRISE_EDITION_FEATURES} from './feature-sets/enterprise-edition-features'; -import {MDS_FEATURES} from './feature-sets/mds-features'; -import {inferEdcUiProfileType} from './infer-edc-ui-profile-type'; - -/** - * List of available profiles. - * - * This codebase supports multiple profiles since it incorporates multiple deployment targets. - */ -export const EDC_UI_PROFILE_DATA = inferEdcUiProfileType({ - 'sovity-open-source': { - ...SOVITY_THEME, - routes: 'connector-ui', - features: new Set(COMMUNITY_EDITION_FEATURES), - }, - 'sovity-hosted-by-sovity': { - ...SOVITY_THEME, - routes: 'connector-ui', - features: new Set(ENTERPRISE_EDITION_FEATURES), - }, - 'mds-open-source': { - ...MDS_THEME, - routes: 'connector-ui', - features: new Set([...MDS_FEATURES, ...COMMUNITY_EDITION_FEATURES]), - }, - 'mds-hosted-by-sovity': { - ...MDS_THEME, - routes: 'connector-ui', - features: new Set([ - 'mds-marketing', - ...MDS_FEATURES, - ...ENTERPRISE_EDITION_FEATURES, - ]), - }, - 'mds-blue-hosted-by-sovity': { - ...SOVITY_THEME, - routes: 'connector-ui', - features: new Set([...MDS_FEATURES, ...ENTERPRISE_EDITION_FEATURES]), - }, -}); diff --git a/src/app/core/config/profiles/edc-ui-profile.ts b/src/app/core/config/profiles/edc-ui-profile.ts deleted file mode 100644 index 0e8f4d4e0..000000000 --- a/src/app/core/config/profiles/edc-ui-profile.ts +++ /dev/null @@ -1,6 +0,0 @@ -import {EDC_UI_PROFILE_DATA} from './edc-ui-profile-data'; - -/** - * Available Configuration Profiles. - */ -export type EdcUiProfile = keyof typeof EDC_UI_PROFILE_DATA; diff --git a/src/app/core/config/profiles/edc-ui-route-set.ts b/src/app/core/config/profiles/edc-ui-route-set.ts deleted file mode 100644 index 7392c0d7b..000000000 --- a/src/app/core/config/profiles/edc-ui-route-set.ts +++ /dev/null @@ -1,4 +0,0 @@ -/** - * Multiple "applications" on an edc basis are currently supported by this UI - */ -export type EdcUiRouteSet = 'connector-ui'; diff --git a/src/app/core/config/profiles/edc-ui-theme-config.ts b/src/app/core/config/profiles/edc-ui-theme-config.ts deleted file mode 100644 index 5a78190fe..000000000 --- a/src/app/core/config/profiles/edc-ui-theme-config.ts +++ /dev/null @@ -1,9 +0,0 @@ -import {AppConfig} from '../app-config'; - -/** - * Type-Safe and interpreted App Config - */ -export type EdcUiThemeConfig = Pick< - AppConfig, - 'theme' | 'brandLogoStyle' | 'brandLogoSrc' | 'brandFaviconSrc' ->; diff --git a/src/app/core/config/profiles/edc-ui-theme-data.ts b/src/app/core/config/profiles/edc-ui-theme-data.ts deleted file mode 100644 index 3d983a05c..000000000 --- a/src/app/core/config/profiles/edc-ui-theme-data.ts +++ /dev/null @@ -1,15 +0,0 @@ -import {EdcUiThemeConfig} from './edc-ui-theme-config'; - -export const SOVITY_THEME: EdcUiThemeConfig = { - theme: 'theme-sovity', - brandFaviconSrc: '/assets/images/sovity_favicon-192x192.png', - brandLogoSrc: '/assets/images/sovity_logo.svg', - brandLogoStyle: 'width: 70%;', -}; - -export const MDS_THEME: EdcUiThemeConfig = { - theme: 'theme-mds', - brandFaviconSrc: '/assets/images/mds_favicon.ico', - brandLogoSrc: '/assets/images/mds_logo.svg', - brandLogoStyle: 'height: 57px; margin-top: 5px; margin-left: 5px;', -}; diff --git a/src/app/core/config/profiles/feature-sets/community-edition-features.ts b/src/app/core/config/profiles/feature-sets/community-edition-features.ts deleted file mode 100644 index a9f0f9a8f..000000000 --- a/src/app/core/config/profiles/feature-sets/community-edition-features.ts +++ /dev/null @@ -1,5 +0,0 @@ -import {EdcUiFeature} from '../edc-ui-feature'; - -export const COMMUNITY_EDITION_FEATURES: EdcUiFeature[] = [ - 'open-source-marketing', -]; diff --git a/src/app/core/config/profiles/feature-sets/enterprise-edition-features.ts b/src/app/core/config/profiles/feature-sets/enterprise-edition-features.ts deleted file mode 100644 index 3a153260f..000000000 --- a/src/app/core/config/profiles/feature-sets/enterprise-edition-features.ts +++ /dev/null @@ -1,7 +0,0 @@ -import {EdcUiFeature} from '../edc-ui-feature'; - -export const ENTERPRISE_EDITION_FEATURES: EdcUiFeature[] = [ - 'logout-button', - 'connector-limits', - 'sovity-zammad-integration', -]; diff --git a/src/app/core/config/profiles/feature-sets/mds-features.ts b/src/app/core/config/profiles/feature-sets/mds-features.ts deleted file mode 100644 index 90b663c05..000000000 --- a/src/app/core/config/profiles/feature-sets/mds-features.ts +++ /dev/null @@ -1,3 +0,0 @@ -import {EdcUiFeature} from '../edc-ui-feature'; - -export const MDS_FEATURES: EdcUiFeature[] = ['mds-connector-id', 'mds-fields']; diff --git a/src/app/core/config/profiles/get-profile-or-fallback.ts b/src/app/core/config/profiles/get-profile-or-fallback.ts deleted file mode 100644 index 41f00bf4e..000000000 --- a/src/app/core/config/profiles/get-profile-or-fallback.ts +++ /dev/null @@ -1,37 +0,0 @@ -import {AppConfigProperties} from '../app-config-properties'; -import {EdcUiProfile} from './edc-ui-profile'; -import {EdcUiProfileConfig} from './edc-ui-profile-config'; -import {EDC_UI_PROFILE_DATA} from './edc-ui-profile-data'; - -/** - * Find profile (or default to first) - * @param profile profile - */ -export function getProfileOrFallback(profile?: string | null): { - profile: EdcUiProfile; - profileConfig: EdcUiProfileConfig; -} { - if (EDC_UI_PROFILE_DATA[profile as EdcUiProfile]) { - return { - profile: profile as EdcUiProfile, - profileConfig: EDC_UI_PROFILE_DATA[profile as EdcUiProfile], - }; - } - - const fallback: EdcUiProfile = 'sovity-open-source'; - - const availableProfiles = Object.keys(EDC_UI_PROFILE_DATA) - .map((s) => `"${s}"`) - .join(', '); - - console.error( - `Invalid ${AppConfigProperties.activeProfile}: ${JSON.stringify(profile)}.`, - `Expected one of ${availableProfiles}.`, - `Falling back to ${JSON.stringify(fallback)}'.`, - ); - - return { - profile: fallback, - profileConfig: EDC_UI_PROFILE_DATA[fallback], - }; -} diff --git a/src/app/core/config/profiles/infer-edc-ui-profile-type.ts b/src/app/core/config/profiles/infer-edc-ui-profile-type.ts deleted file mode 100644 index f5bf26784..000000000 --- a/src/app/core/config/profiles/infer-edc-ui-profile-type.ts +++ /dev/null @@ -1,13 +0,0 @@ -import {EdcUiProfileConfig} from './edc-ui-profile-config'; - -/** - * Type utility for inferring the keys of EDC_UI_PROFILE_DATA as type. - * see https://stackoverflow.com/a/74691877 - * - * @param profiles Record - */ -export const inferEdcUiProfileType = < - T extends Record, ->( - profiles: T, -) => profiles; diff --git a/src/app/core/services/api/api-key.interceptor.ts b/src/app/core/services/api/api-key.interceptor.ts deleted file mode 100644 index 885bc6542..000000000 --- a/src/app/core/services/api/api-key.interceptor.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { - HttpEvent, - HttpHandler, - HttpInterceptor, - HttpRequest, -} from '@angular/common/http'; -import {Inject, Injectable} from '@angular/core'; -import {Observable} from 'rxjs'; -import {APP_CONFIG, AppConfig} from '../../config/app-config'; - -@Injectable() -export class ApiKeyInterceptor implements HttpInterceptor { - constructor(@Inject(APP_CONFIG) private config: AppConfig) {} - - intercept( - req: HttpRequest, - next: HttpHandler, - ): Observable> { - const apiKey = this.getApiKey(); - if (apiKey) { - req = req.clone({ - setHeaders: {'X-Api-Key': apiKey}, - }); - } - return next.handle(req); - } - - private getApiKey() { - return this.config.managementApiKey; - } -} diff --git a/src/app/core/services/api/edc-api.service.ts b/src/app/core/services/api/edc-api.service.ts deleted file mode 100644 index 2575fb157..000000000 --- a/src/app/core/services/api/edc-api.service.ts +++ /dev/null @@ -1,250 +0,0 @@ -import {Inject, Injectable} from '@angular/core'; -import {Observable} from 'rxjs'; -import { - AssetPage, - ConnectorLimits, - ContractAgreementCard, - ContractAgreementPage, - ContractDefinitionPage, - ContractDefinitionRequest, - ContractNegotiationRequest, - CreateDataOfferRequest, - DashboardPage, - EdcClient, - GetContractAgreementPageRequest, - IdAvailabilityResponse, - IdResponseDto, - InitiateCustomTransferRequest, - InitiateTransferRequest, - PolicyDefinitionCreateDto, - PolicyDefinitionCreateRequest, - PolicyDefinitionPage, - TerminateContractAgreementRequest, - TransferHistoryPage, - UiAsset, - UiAssetCreateRequest, - UiAssetEditRequest, - UiContractNegotiation, - UiDataOffer, - buildEdcClient, -} from '@sovity.de/edc-client'; -import {APP_CONFIG, AppConfig} from '../../config/app-config'; -import {toObservable} from '../../utils/rxjs-utils'; -import {EDC_FAKE_BACKEND} from './fake-backend/edc-fake-backend'; - -@Injectable({providedIn: 'root'}) -export class EdcApiService { - edcClient: EdcClient; - - constructor(@Inject(APP_CONFIG) private config: AppConfig) { - this.edcClient = buildEdcClient({ - managementApiUrl: this.config.managementApiUrl, - managementApiKey: this.config.managementApiKey, - configOverrides: { - fetchApi: config.useFakeBackend ? EDC_FAKE_BACKEND : undefined, - }, - }); - } - - getDashboardPage(): Observable { - return toObservable(() => this.edcClient.uiApi.getDashboardPage()); - } - - getAssetPage(): Observable { - return toObservable(() => this.edcClient.uiApi.getAssetPage()); - } - - createAsset( - uiAssetCreateRequest: UiAssetCreateRequest, - ): Observable { - return toObservable(() => - this.edcClient.uiApi.createAsset({uiAssetCreateRequest}), - ); - } - - editAsset( - assetId: string, - uiAssetEditRequest: UiAssetEditRequest, - ): Observable { - return toObservable(() => - this.edcClient.uiApi.editAsset({ - assetId, - uiAssetEditRequest, - }), - ); - } - - deleteAsset(assetId: string): Observable { - return toObservable(() => this.edcClient.uiApi.deleteAsset({assetId})); - } - - getPolicyDefinitionPage(): Observable { - return toObservable(() => this.edcClient.uiApi.getPolicyDefinitionPage()); - } - - createPolicyDefinition( - policyDefinitionCreateRequest: PolicyDefinitionCreateRequest, - ): Observable { - return toObservable(() => - this.edcClient.uiApi.createPolicyDefinition({ - policyDefinitionCreateRequest, - }), - ); - } - - createPolicyDefinitionV2( - policyDefinitionCreateDto: PolicyDefinitionCreateDto, - ): Observable { - return toObservable(() => - this.edcClient.uiApi.createPolicyDefinitionV2({ - policyDefinitionCreateDto, - }), - ); - } - - deletePolicyDefinition(policyId: string): Observable { - return toObservable(() => - this.edcClient.uiApi.deletePolicyDefinition({policyId}), - ); - } - - getContractDefinitionPage(): Observable { - return toObservable(() => this.edcClient.uiApi.getContractDefinitionPage()); - } - - createContractDefinition( - contractDefinitionRequest: ContractDefinitionRequest, - ): Observable { - return toObservable(() => - this.edcClient.uiApi.createContractDefinition({ - contractDefinitionRequest, - }), - ); - } - - deleteContractDefinition( - contractDefinitionId: string, - ): Observable { - return toObservable(() => - this.edcClient.uiApi.deleteContractDefinition({contractDefinitionId}), - ); - } - - createDataOffer( - dataOfferCreationRequest: CreateDataOfferRequest, - ): Observable { - return toObservable(() => - this.edcClient.uiApi.createDataOffer(dataOfferCreationRequest), - ); - } - - getCatalogPageDataOffers( - connectorEndpoint: string, - ): Observable { - return toObservable(() => - this.edcClient.uiApi.getCatalogPageDataOffers({connectorEndpoint}), - ); - } - - initiateContractNegotiation( - contractNegotiationRequest: ContractNegotiationRequest, - ): Observable { - return toObservable(() => - this.edcClient.uiApi.initiateContractNegotiation({ - contractNegotiationRequest, - }), - ); - } - - terminateContractAgreement( - terminateContractAgreementRequest: TerminateContractAgreementRequest, - ): Observable { - return toObservable(() => - this.edcClient.uiApi.terminateContractAgreement( - terminateContractAgreementRequest, - ), - ); - } - - getContractNegotiation( - contractNegotiationId: string, - ): Observable { - return toObservable(() => - this.edcClient.uiApi.getContractNegotiation({contractNegotiationId}), - ); - } - - getContractAgreementPage( - getContractAgreementPageRequest: GetContractAgreementPageRequest, - ): Observable { - return toObservable(() => - this.edcClient.uiApi.getContractAgreementPage( - getContractAgreementPageRequest, - ), - ); - } - - getContractAgreementById( - contractAgreementId: string, - ): Observable { - return toObservable(() => - this.edcClient.uiApi.getContractAgreementCard({contractAgreementId}), - ); - } - - initiateTransfer( - initiateTransferRequest: InitiateTransferRequest, - ): Observable { - return toObservable(() => - this.edcClient.uiApi.initiateTransfer({initiateTransferRequest}), - ); - } - - initiateCustomTransfer( - initiateCustomTransferRequest: InitiateCustomTransferRequest, - ): Observable { - return toObservable(() => - this.edcClient.uiApi.initiateCustomTransfer({ - initiateCustomTransferRequest, - }), - ); - } - - getTransferHistoryPage(): Observable { - return toObservable(() => this.edcClient.uiApi.getTransferHistoryPage()); - } - - getTransferProcessAsset(transferProcessId: string): Observable { - return toObservable(() => - this.edcClient.uiApi.getTransferProcessAsset({transferProcessId}), - ); - } - - getEnterpriseEditionConnectorLimits(): Observable { - return toObservable(() => - this.edcClient.enterpriseEditionApi.connectorLimits(), - ); - } - - isAssetIdAvailable(assetId: string): Observable { - return toObservable(() => - this.edcClient.uiApi.isAssetIdAvailable({assetId}), - ); - } - - isPolicyIdAvailable(policyId: string): Observable { - return toObservable(() => - this.edcClient.uiApi.isPolicyIdAvailable({policyId}), - ); - } - - isContractDefinitionIdAvailable( - contractDefinitionId: string, - ): Observable { - return toObservable(() => - this.edcClient.uiApi.isContractDefinitionIdAvailable({ - contractDefinitionId, - }), - ); - } -} diff --git a/src/app/core/services/api/fake-backend/connector-fake-impl/asset-fake-service.ts b/src/app/core/services/api/fake-backend/connector-fake-impl/asset-fake-service.ts deleted file mode 100644 index 146aed9c8..000000000 --- a/src/app/core/services/api/fake-backend/connector-fake-impl/asset-fake-service.ts +++ /dev/null @@ -1,138 +0,0 @@ -import { - AssetPage, - IdAvailabilityResponse, - IdResponseDto, - UiAsset, - UiAssetCreateRequest, - UiAssetEditRequest, - UiDataSource, -} from '@sovity.de/edc-client'; -import {Patcher, patchObj} from '../../../../utils/object-utils'; -import {TestAssets} from './data/test-assets'; - -let assets: UiAsset[] = [ - TestAssets.full, - TestAssets.onRequestAsset, - TestAssets.boring, - TestAssets.short, - TestAssets.assetWithCustomProperties, -]; - -export const assetPage = (): AssetPage => { - return { - assets, - }; -}; - -export const assetIdAvailable = (assetId: string): IdAvailabilityResponse => { - return { - id: assetId, - available: !assets.some((it) => it.assetId === assetId), - }; -}; - -export const getAssetById = (id: string) => - assets.find((it) => it.assetId === id); - -function patchAsset(assetId: string, patcher: Patcher): UiAsset { - assets = assets.map((it) => - it.assetId === assetId ? patchObj(it, patcher) : it, - ); - return getAssetById(assetId)!; -} - -export const createAsset = (asset: UiAssetCreateRequest): IdResponseDto => { - const assetId = asset.id; - assets.push({ - assetId, - ...createAssetMetadata(assetId, asset), - connectorEndpoint: 'https://my-connector/api/dsp', - participantId: 'MDSL1234XX.C1234XX', - isOwnConnector: false, - creatorOrganizationName: 'My Org', - }); - return { - id: asset.id, - lastUpdatedDate: new Date(), - }; -}; - -export const editAsset = ( - assetId: string, - request: UiAssetEditRequest, -): IdResponseDto => { - const asset = patchAsset(assetId, () => - createAssetMetadata(assetId, request), - ); - - return { - id: asset.assetId, - lastUpdatedDate: new Date(), - }; -}; - -function createAssetMetadata( - assetId: string, - request: UiAssetCreateRequest | UiAssetEditRequest, -): Omit< - UiAsset, - | 'assetId' - | 'assetJsonLd' - | 'connectorEndpoint' - | 'isOwnConnector' - | 'creatorOrganizationName' - | 'participantId' -> { - const dataSource: UiDataSource | null = - (request as UiAssetCreateRequest).dataSource ?? - (request as UiAssetEditRequest).dataSourceOverrideOrNull; - return { - title: request.title ?? assetId, - description: request.description, - descriptionShortText: request.description, - publisherHomepage: request.publisherHomepage, - dataSourceAvailability: - dataSource?.type === 'ON_REQUEST' ? 'ON_REQUEST' : 'LIVE', - language: request.language, - onRequestContactEmail: dataSource?.onRequest?.contactEmail, - onRequestContactEmailSubject: - dataSource?.onRequest?.contactPreferredEmailSubject, - licenseUrl: request.licenseUrl, - version: request.version, - keywords: request.keywords, - mediaType: request.mediaType, - landingPageUrl: request.landingPageUrl, - dataCategory: request.dataCategory, - dataSubcategory: request.dataSubcategory, - dataModel: request.dataModel, - geoReferenceMethod: request.geoReferenceMethod, - transportMode: request.transportMode, - sovereignLegalName: request.sovereignLegalName, - geoLocation: request.geoLocation, - nutsLocations: request.nutsLocations, - dataSampleUrls: request.dataSampleUrls, - referenceFileUrls: request.referenceFileUrls, - referenceFilesDescription: request.referenceFilesDescription, - conditionsForUse: request.conditionsForUse, - dataUpdateFrequency: request.dataUpdateFrequency, - temporalCoverageFrom: request.temporalCoverageFrom, - temporalCoverageToInclusive: request.temporalCoverageToInclusive, - httpDatasourceHintsProxyMethod: - dataSource?.httpData?.enableMethodParameterization, - httpDatasourceHintsProxyPath: - dataSource?.httpData?.enablePathParameterization, - httpDatasourceHintsProxyQueryParams: - dataSource?.httpData?.enableQueryParameterization, - httpDatasourceHintsProxyBody: - dataSource?.httpData?.enableBodyParameterization, - customJsonAsString: '{}', - customJsonLdAsString: '{}', - privateCustomJsonAsString: '{}', - privateCustomJsonLdAsString: '{}', - }; -} - -export const deleteAsset = (id: string): IdResponseDto => { - assets = assets.filter((it) => it.assetId !== id); - return {id, lastUpdatedDate: new Date()}; -}; diff --git a/src/app/core/services/api/fake-backend/connector-fake-impl/catalog-fake-service.ts b/src/app/core/services/api/fake-backend/connector-fake-impl/catalog-fake-service.ts deleted file mode 100644 index 23976bd55..000000000 --- a/src/app/core/services/api/fake-backend/connector-fake-impl/catalog-fake-service.ts +++ /dev/null @@ -1,62 +0,0 @@ -import {UiDataOffer} from '@sovity.de/edc-client'; -import {TestAssets} from './data/test-assets'; -import {TestPolicies} from './data/test-policies'; - -let dataOffers: UiDataOffer[] = [ - { - endpoint: 'http://existing-other-connector/api/dsp', - participantId: 'MDSL1234XX.C1234XX', - asset: TestAssets.full, - contractOffers: [ - { - contractOfferId: - 'dGVzdHRlc3R0ZXN0dGVzdHRlc3Q=:dGVzdHRlc3R0ZXN0dGVzdHRlc3Q=:MDE5MjA4ZWMtMjI0My03YmEyLWE5ZGYtYzRjZTZkZDEyYzAx', - policy: TestPolicies.connectorRestricted, - }, - { - contractOfferId: - 'Zmlyc3QtY2Q=:Zmlyc3QtYXNzZXQtMS4w:MjgzNTZkMTMtN2ZhYy00NTQwLTgwZjItMjI5NzJjOTc1ZWNi', - policy: TestPolicies.warnings, - }, - ], - }, - { - endpoint: 'http://existing-other-connector/api/dsp', - participantId: 'MDSL1234XX.C1234XX', - asset: TestAssets.onRequestAsset, - contractOffers: [ - { - contractOfferId: 'on-request-contract-offer', - policy: TestPolicies.failedMapping, - }, - ], - }, - { - endpoint: 'http://existing-other-connector/api/dsp', - asset: TestAssets.boring, - participantId: 'MDSL1234XX.C1234XX', - contractOffers: [ - { - contractOfferId: 'test-contract-offer-2', - policy: TestPolicies.failedMapping, - }, - ], - }, - { - endpoint: 'http://existing-other-connector/api/dsp', - asset: TestAssets.short, - participantId: 'MDSL1234XX.C1234XX', - contractOffers: [ - { - contractOfferId: 'test-contract-offer-3', - policy: TestPolicies.failedMapping, - }, - ], - }, -]; - -export const getCatalogPageDataOffers = ( - connectorEndpoint: string, -): UiDataOffer[] => { - return dataOffers.filter((it) => it.endpoint === connectorEndpoint); -}; diff --git a/src/app/core/services/api/fake-backend/connector-fake-impl/contract-agreement-fake-service.ts b/src/app/core/services/api/fake-backend/connector-fake-impl/contract-agreement-fake-service.ts deleted file mode 100644 index 5fff4fe69..000000000 --- a/src/app/core/services/api/fake-backend/connector-fake-impl/contract-agreement-fake-service.ts +++ /dev/null @@ -1,244 +0,0 @@ -import { - ContractAgreementCard, - ContractAgreementPage, - ContractAgreementTransferProcess, - ContractTerminationStatus, - IdResponseDto, - InitiateTransferRequest, -} from '@sovity.de/edc-client'; -import {Patcher, patchObj} from '../../../../utils/object-utils'; -import {TestAssets} from './data/test-assets'; -import {TestPolicies} from './data/test-policies'; - -let contractAgreements: ContractAgreementCard[] = [ - { - contractAgreementId: 'my-own-asset-cd:f52a5d30-6356-4a55-a75a-3c45d7a88c3a', - contractNegotiationId: - 'my-own-asset-neg:f52a5d30-6356-4a55-a75a-3c45d7a88c3e', - direction: 'PROVIDING', - counterPartyAddress: 'http://edc2:11003/api/v1/ids/data', - counterPartyId: 'MDSL1234XX.C1234XX', - contractSigningDate: new Date('2022-03-20T11:18:59.659Z'), - asset: TestAssets.full, - contractPolicy: TestPolicies.connectorRestricted, - terminationInformation: undefined, - terminationStatus: 'ONGOING', - transferProcesses: [ - { - transferProcessId: '2679d234-3340-44bf-a96b-c88b57838033', - lastUpdatedDate: new Date('2023-04-24T12:34:52.896Z'), - state: { - code: 600, - name: 'IN_PROGRESS', - simplifiedState: 'RUNNING', - }, - }, - { - transferProcessId: 'c2863791-c8f3-49e7-8137-7fadaa36b4e4', - lastUpdatedDate: new Date('2023-04-24T12:34:40.801Z'), - state: { - code: 800, - name: 'COMPLETED', - simplifiedState: 'OK', - }, - }, - { - transferProcessId: 'f3ee5129-1909-4d7b-a6fe-a25994d67b56', - lastUpdatedDate: new Date('2023-04-24T12:34:36.735Z'), - state: { - code: 900, - name: 'DEPROVISIONING', - simplifiedState: 'OK', - }, - }, - { - transferProcessId: '2cf2c9be-3b8c-4768-b10e-c1d9f9874e62', - lastUpdatedDate: new Date('2023-04-24T12:34:31.674Z'), - state: { - code: -1, - name: 'ERROR', - simplifiedState: 'ERROR', - }, - errorMessage: 'Something went wrong!', - }, - ], - }, - { - contractAgreementId: - 'my-test-asset-cd:6ebbc301-9b1e-4cd7-9f17-97b5b786753b', - contractNegotiationId: - 'my-test-asset-neg:6ebbc301-9b1e-4cd7-9f17-97b5b7867531', - direction: 'CONSUMING', - counterPartyAddress: 'http://edc2:11003/api/v1/ids/data', - counterPartyId: 'MDSL1234XX.C1234XX', - contractSigningDate: new Date('2022-03-25T14:18:59.659Z'), - asset: TestAssets.toDummyAsset(TestAssets.boring), - contractPolicy: TestPolicies.connectorRestricted, - terminationInformation: undefined, - terminationStatus: 'ONGOING', - transferProcesses: [ - { - transferProcessId: '522138de-349d-4b68-9356-7e5929f053e0', - lastUpdatedDate: new Date('2023-04-24T12:32:43.027Z'), - state: { - code: 800, - name: 'COMPLETED', - simplifiedState: 'OK', - }, - }, - ], - }, - { - contractAgreementId: - 'my-test-asset-2-cd:6ebbc301-9b1e-4cd7-9f17-08b5b786753c', - contractNegotiationId: - 'my-test-asset-2-neg:6ebbc301-9b1e-4cd7-9f17-08b5b7867533', - direction: 'CONSUMING', - counterPartyAddress: 'http://edc2:11003/api/v1/ids/data', - counterPartyId: 'MDSL1234XX.C1234XX', - contractSigningDate: new Date('2022-03-25T11:18:59.659Z'), - asset: TestAssets.toDummyAsset(TestAssets.boring), - contractPolicy: TestPolicies.connectorRestricted, - terminationInformation: undefined, - terminationStatus: 'ONGOING', - transferProcesses: [], - }, - { - contractAgreementId: 'my-test-asset-cd:6ebbc301-9b1e-4cd7-9f17-97b5b78675d', - contractNegotiationId: - 'my-test-asset-neg:6ebbc301-9b1e-4cd7-9f17-97b5b786752', - direction: 'CONSUMING', - counterPartyAddress: 'http://edc2:11003/api/v1/ids/data', - counterPartyId: 'MDSL1234XX.C1234XX', - contractSigningDate: new Date('2022-03-25T11:18:59.659Z'), - asset: TestAssets.toDummyAsset(TestAssets.boring), - contractPolicy: TestPolicies.connectorRestricted, - terminationInformation: undefined, - terminationStatus: 'ONGOING', - transferProcesses: [ - { - transferProcessId: '522138de-349d-4b68-9356-7e5929f053e0', - lastUpdatedDate: new Date('2023-04-24T12:32:43.027Z'), - state: { - code: 800, - name: 'COMPLETED', - simplifiedState: 'OK', - }, - }, - ], - }, - { - contractAgreementId: 'my-test-asset-cd:6ebbc301-9b1e-4cd7-9f17-97b5b78675e', - contractNegotiationId: - 'my-test-asset-neg:6ebbc301-9b1e-4cd7-9f17-97b5b786759', - direction: 'CONSUMING', - counterPartyAddress: 'http://edc2:11003/api/v1/ids/data', - counterPartyId: 'MDSL1234XX.C1234XX', - contractSigningDate: new Date('2022-03-25T11:18:59.659Z'), - asset: TestAssets.toDummyAsset(TestAssets.full), - contractPolicy: TestPolicies.connectorRestricted, - terminationInformation: { - terminatedAt: new Date('2024-07-16T08:25:12.031Z'), - reason: 'Creative termination reason', - detail: 'Creative termination details', - terminatedBy: 'COUNTERPARTY', - }, - terminationStatus: 'TERMINATED', - transferProcesses: [ - { - transferProcessId: '522138de-349d-4b68-9356-7e5929f053e0', - lastUpdatedDate: new Date('2023-04-24T12:32:43.027Z'), - state: { - code: 800, - name: 'COMPLETED', - simplifiedState: 'OK', - }, - }, - ], - }, - { - contractAgreementId: - 'my-test-asset-cd:6ebbc301-9b1e-4cd7-9f17-97b5b786758f', - contractNegotiationId: - 'my-test-asset-neg:6ebbc301-9b1e-4cd7-9f17-97b5b786758', - direction: 'PROVIDING', - counterPartyAddress: 'http://edc2:11003/api/v1/ids/data', - counterPartyId: 'MDSL1234XX.C1234XX', - contractSigningDate: new Date('2022-03-25T11:18:59.659Z'), - asset: TestAssets.toDummyAsset(TestAssets.boring), - contractPolicy: TestPolicies.connectorRestricted, - terminationInformation: { - terminatedAt: new Date('2024-07-16T08:25:12.031Z'), - reason: 'Creative termination reason', - detail: - 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed tristique facilisis ornare. Maecenas at facilisis dui, vel dapibus nisi. Nam dapibus, sapien ac iaculis sodales, tellus ante dictum libero, eu viverra metus lorem nec lectus. Donec cursus feugiat massa sed pharetra. Etiam nec lacus nisi. Etiam ut justo bibendum felis tincidunt tempor vel et sem. Suspendisse potenti. Nam volutpat ornare mi, at fringilla sapien accumsan congue. Maecenas ornare rutrum ipsum, quis fermentum risus. Proin vitae tortor nec metus tristique posuere. Cras ornare lobortis diam. Proin pellentesque, massa eu bibendum posuere, augue nibh porta libero, eu rhoncus ex enim vel nulla. Fusce eget dui non velit rutrum euismod.\n' + - '\n' + - 'Mauris finibus vel lectus eu aliquam. Proin et leo sit amet turpis venenatis faucibus. Fusce nisl quam, malesuada sit amet feugiat at, vehicula id mauris. Phasellus aliquam libero quis lobortis viverra. Vivamus luctus purus et nibh pellentesque, eget tristique ipsum pretium. Nulla rhoncus lacus sed lectus elementum vulputate. Nunc massa mauris, viverra vitae magna nec, mollis molestie tellus. Donec accumsan massa sit amet ultricies mollis. Mauris dui nunc, eleifend vel risus vitae, convallis bibendum dolor. Aliquam felis quam, rhoncus non gravida a, bibendum feugiat nunc. Sed varius dictum nisi, id lacinia enim condimentum.', - terminatedBy: 'SELF', - }, - terminationStatus: 'TERMINATED', - transferProcesses: [ - { - transferProcessId: '522138de-349d-4b68-9356-7e5929f053e0', - lastUpdatedDate: new Date('2023-04-24T12:32:43.027Z'), - state: { - code: 800, - name: 'COMPLETED', - simplifiedState: 'OK', - }, - }, - ], - }, -]; -export const contractAgreementPage = ( - terminationStatus?: ContractTerminationStatus, -): ContractAgreementPage => { - return { - contractAgreements: terminationStatus - ? contractAgreements.filter( - (x) => x.terminationStatus === terminationStatus, - ) - : contractAgreements, - }; -}; - -export const addContractAgreement = ( - contractAgreement: ContractAgreementCard, -) => { - contractAgreements = [contractAgreement, ...contractAgreements]; -}; - -export const contractAgreementInitiateTransfer = ( - request: InitiateTransferRequest, -): IdResponseDto => { - const contractAgreementId = request?.contractAgreementId ?? ''; - const transferProcessId = - 'transfer-process-' + Math.random().toString().substring(2); - - const newTransferProcess: ContractAgreementTransferProcess = { - transferProcessId, - state: { - code: 800, - name: 'COMPLETED', - simplifiedState: 'OK', - }, - lastUpdatedDate: new Date(), - }; - - updateAgreement(contractAgreementId, (agremeent) => ({ - transferProcesses: [newTransferProcess, ...agremeent.transferProcesses], - })); - - return {id: transferProcessId, lastUpdatedDate: new Date(new Date())}; -}; - -export const updateAgreement = ( - contractAgreementId: string, - patcher: Patcher, -) => { - contractAgreements = contractAgreements.map((agreement) => - agreement.contractAgreementId === contractAgreementId - ? patchObj(agreement, patcher) - : agreement, - ); -}; diff --git a/src/app/core/services/api/fake-backend/connector-fake-impl/contract-definition-fake-service.ts b/src/app/core/services/api/fake-backend/connector-fake-impl/contract-definition-fake-service.ts deleted file mode 100644 index 2fb59c3ce..000000000 --- a/src/app/core/services/api/fake-backend/connector-fake-impl/contract-definition-fake-service.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { - ContractDefinitionEntry, - ContractDefinitionPage, - ContractDefinitionRequest, - IdAvailabilityResponse, - IdResponseDto, -} from '@sovity.de/edc-client'; -import {AssetProperty} from '../../../models/asset-properties'; - -let contractDefinitions: ContractDefinitionEntry[] = [ - { - contractDefinitionId: 'test-data-offer-1', - contractPolicyId: 'test-policy-definition-1', - accessPolicyId: 'test-policy-definition-1', - assetSelector: [ - { - operandLeft: AssetProperty.id, - operator: 'EQ', - operandRight: {type: 'VALUE', value: 'test-asset-1'}, - }, - ], - }, -]; - -export const contractDefinitionPage = (): ContractDefinitionPage => { - return { - contractDefinitions, - }; -}; - -export const contractDefinitionIdAvailable = ( - contractDefinitionId: string, -): IdAvailabilityResponse => { - return { - id: contractDefinitionId, - available: !contractDefinitions.some( - (it) => it.contractDefinitionId === contractDefinitionId, - ), - }; -}; - -export const createContractDefinition = ( - request: ContractDefinitionRequest, -): IdResponseDto => { - let newEntry: ContractDefinitionEntry = { - contractDefinitionId: request.contractDefinitionId!, - contractPolicyId: request.contractPolicyId!, - accessPolicyId: request.accessPolicyId!, - assetSelector: request.assetSelector!, - }; - - contractDefinitions = [newEntry, ...contractDefinitions]; - - return { - id: newEntry.contractDefinitionId, - lastUpdatedDate: new Date(), - }; -}; - -export const deleteContractDefinition = (id: string): IdResponseDto => { - contractDefinitions = contractDefinitions.filter( - (it) => it.contractDefinitionId !== id, - ); - return {id, lastUpdatedDate: new Date()}; -}; diff --git a/src/app/core/services/api/fake-backend/connector-fake-impl/contract-negotiation-fake-service.ts b/src/app/core/services/api/fake-backend/connector-fake-impl/contract-negotiation-fake-service.ts deleted file mode 100644 index 8a38398cd..000000000 --- a/src/app/core/services/api/fake-backend/connector-fake-impl/contract-negotiation-fake-service.ts +++ /dev/null @@ -1,88 +0,0 @@ -import { - ContractNegotiationRequest, - ContractNegotiationSimplifiedState, - ContractNegotiationState, - UiContractNegotiation, -} from '@sovity.de/edc-client'; -import {Patcher, patchObj} from '../../../../utils/object-utils'; -import {getAssetById} from './asset-fake-service'; -import {addContractAgreement} from './contract-agreement-fake-service'; -import {getPolicyDefinitionByJsonLd} from './policy-definition-fake-service'; - -const initiated: ContractNegotiationState = { - name: 'INITIATED', - code: 500, - simplifiedState: ContractNegotiationSimplifiedState.InProgress, -}; - -const agreed: ContractNegotiationState = { - name: 'AGREED', - code: 1000, - simplifiedState: ContractNegotiationSimplifiedState.Agreed, -}; - -let negotiations: UiContractNegotiation[] = [ - { - contractNegotiationId: 'test-contract-negotiation-1', - createdAt: new Date(), - contractAgreementId: 'test-contract-agreement-1', - state: initiated, - }, - { - contractNegotiationId: 'test-contract-negotiation-2', - createdAt: new Date(), - contractAgreementId: 'test-contract-agreement-2', - state: agreed, - }, -]; - -export const initiateContractNegotiation = ( - request: ContractNegotiationRequest, -): UiContractNegotiation => { - let contractNegotiationId = - 'dummy-negotiation-' + Math.random().toString().substring(2); - let negotiation: UiContractNegotiation = { - contractNegotiationId, - state: initiated, - createdAt: new Date(), - }; - negotiations = [...negotiations, negotiation]; - - setTimeout(() => { - let contractAgreementId = - 'dummy-agreement' + Math.random().toString().substring(2); - - updateNegotiation(contractNegotiationId, () => ({ - state: agreed, - contractAgreementId, - })); - - addContractAgreement({ - contractNegotiationId, - contractAgreementId, - direction: 'CONSUMING', - counterPartyAddress: request.counterPartyAddress, - transferProcesses: [], - counterPartyId: request.counterPartyParticipantId, - asset: getAssetById(request.assetId)!, - contractSigningDate: new Date(), - contractPolicy: getPolicyDefinitionByJsonLd(request.policyJsonLd)!, - terminationInformation: undefined, - terminationStatus: 'ONGOING', - }); - }, 4000); - return negotiation; -}; - -export const getContractNegotiation = (id: string): UiContractNegotiation => { - return negotiations.find((it) => it.contractNegotiationId === id)!; -}; - -const updateNegotiation = ( - id: string, - patcher: Patcher, -) => { - negotiations = negotiations.map((it) => - it.contractNegotiationId === id ? patchObj(it, patcher) : it, - ); -}; diff --git a/src/app/core/services/api/fake-backend/connector-fake-impl/contract-termination-fake-service.ts b/src/app/core/services/api/fake-backend/connector-fake-impl/contract-termination-fake-service.ts deleted file mode 100644 index c2a061454..000000000 --- a/src/app/core/services/api/fake-backend/connector-fake-impl/contract-termination-fake-service.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { - ContractAgreementCard, - IdResponseDto, - TerminateContractAgreementRequest, -} from '@sovity.de/edc-client'; -import {updateAgreement} from './contract-agreement-fake-service'; - -export const initiateContractTermination = ( - request: TerminateContractAgreementRequest, -): IdResponseDto => { - let response: IdResponseDto = { - id: request.contractAgreementId, - lastUpdatedDate: new Date(), - }; - - updateAgreement( - request.contractAgreementId, - (agremeent: ContractAgreementCard) => ({ - terminationStatus: 'TERMINATED', - terminationInformation: { - terminatedAt: new Date(), - terminatedBy: 'SELF', - reason: request.contractTerminationRequest?.reason ?? '', - detail: request.contractTerminationRequest?.detail ?? '', - }, - }), - ); - return response; -}; diff --git a/src/app/core/services/api/fake-backend/connector-fake-impl/dashboard-fake-service.ts b/src/app/core/services/api/fake-backend/connector-fake-impl/dashboard-fake-service.ts deleted file mode 100644 index a853b1f61..000000000 --- a/src/app/core/services/api/fake-backend/connector-fake-impl/dashboard-fake-service.ts +++ /dev/null @@ -1,38 +0,0 @@ -import {DashboardPage} from '@sovity.de/edc-client'; - -export const dashboardPage = (): DashboardPage => ({ - numAssets: 4, - numContractAgreementsConsuming: 10, - numContractAgreementsProviding: 123, - numPolicies: 4, - numContractDefinitions: 4, - transferProcessesConsuming: { - numTotal: 8, - numOk: 5, - numRunning: 1, - numError: 2, - }, - transferProcessesProviding: { - numTotal: 2, - numOk: 2, - numError: 0, - numRunning: 0, - }, - connectorParticipantId: 'MDSL1234XX.C1234XX', - connectorTitle: 'My Connector', - connectorDescription: 'Example Connector with Fake Backend', - connectorMaintainerName: 'sovity GmbH', - connectorMaintainerUrl: 'https://sovity.de', - connectorCuratorName: 'Example GmbH', - connectorCuratorUrl: 'https://example.com', - connectorEndpoint: 'https://edc.fake-backend/api/dsp', - connectorMiwConfig: { - url: 'https://miw.fake-backend', - tokenUrl: 'https://miw.fake-backend/token', - authorityId: 'fake-miw', - }, - connectorDapsConfig: { - tokenUrl: 'https://daps.fake-backend/token', - jwksUrl: 'https://daps.fake-backend/jwks.json', - }, -}); diff --git a/src/app/core/services/api/fake-backend/connector-fake-impl/data-offer-fake-service.ts b/src/app/core/services/api/fake-backend/connector-fake-impl/data-offer-fake-service.ts deleted file mode 100644 index 5369d59a9..000000000 --- a/src/app/core/services/api/fake-backend/connector-fake-impl/data-offer-fake-service.ts +++ /dev/null @@ -1,84 +0,0 @@ -import { - DataOfferCreationRequest, - DataOfferCreationRequestPolicyEnum, - IdResponseDto, - UiCriterionLiteralType, -} from '@sovity.de/edc-client'; -import {ALWAYS_TRUE_POLICY_ID} from '../../../../../shared/business/edit-asset-form/form/model/always-true-policy-id'; -import {assetIdAvailable, createAsset} from './asset-fake-service'; -import { - contractDefinitionIdAvailable, - createContractDefinition, -} from './contract-definition-fake-service'; -import { - createPolicyDefinitionV2, - policyDefinitionIdAvailable, -} from './policy-definition-fake-service'; - -const checkIdAvailability = (id: string): void => { - if ( - !policyDefinitionIdAvailable(id).available || - !assetIdAvailable(id).available || - !contractDefinitionIdAvailable(id).available - ) { - throw new Error('Id already exists'); - } -}; - -const checkIfNoAlwaysTruePolicyExists = (): void => { - if (policyDefinitionIdAvailable(ALWAYS_TRUE_POLICY_ID).available) { - createPolicyDefinitionV2({ - policyDefinitionId: ALWAYS_TRUE_POLICY_ID, - expression: { - type: 'EMPTY', - }, - }); - } -}; - -export const createDataOffer = ( - request: DataOfferCreationRequest, -): IdResponseDto => { - const commonId = request.uiAssetCreateRequest.id; - let accessPolicyId = null; - let contractPolicyId = null; - - checkIfNoAlwaysTruePolicyExists(); - checkIdAvailability(commonId); - createAsset(request.uiAssetCreateRequest); - - switch (request.policy) { - case DataOfferCreationRequestPolicyEnum.DontPublish: - return {id: commonId, lastUpdatedDate: new Date()}; - case DataOfferCreationRequestPolicyEnum.PublishRestricted: - createPolicyDefinitionV2({ - policyDefinitionId: commonId, - expression: request.uiPolicyExpression!, - }); - accessPolicyId = commonId; - contractPolicyId = commonId; - break; - case DataOfferCreationRequestPolicyEnum.PublishUnrestricted: - accessPolicyId = ALWAYS_TRUE_POLICY_ID; - contractPolicyId = ALWAYS_TRUE_POLICY_ID; - break; - } - - createContractDefinition({ - contractDefinitionId: commonId, - accessPolicyId, - contractPolicyId, - assetSelector: [ - { - operandLeft: commonId, - operator: 'EQ', - operandRight: { - type: UiCriterionLiteralType.Value, - value: commonId, - }, - }, - ], - }); - - return {id: commonId, lastUpdatedDate: new Date()}; -}; diff --git a/src/app/core/services/api/fake-backend/connector-fake-impl/data/test-assets.ts b/src/app/core/services/api/fake-backend/connector-fake-impl/data/test-assets.ts deleted file mode 100644 index 499102363..000000000 --- a/src/app/core/services/api/fake-backend/connector-fake-impl/data/test-assets.ts +++ /dev/null @@ -1,227 +0,0 @@ -import {UiAsset} from '@sovity.de/edc-client'; - -export namespace TestAssets { - const markdownDescription = `Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod - tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At - vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, - no sea takimata sanctus est Lorem ipsum dolor sit amet. - - ![scenery2](https://images.pexels.com/photos/255419/pexels-photo-255419.jpeg?cs=srgb&dl=pexels-pixabay-255419.jpg&fm=jpg) - - Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod - tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At - vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, - - Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod - tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At - vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, - - Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod - tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At - vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, - - Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod - tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At - vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, - - ![scenery](https://images.rawpixel.com/image_800/cHJpdmF0ZS9sci9pbWFnZXMvd2Vic2l0ZS8yMDIyLTA1L3NrOTc5MS1pbWFnZS1rd3Z1amE5Ni5qcGc.jpg) Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, - - - - - # Omen - - This is **bold!** This is _italic_. This is inline \`code\`. - - > here we quote - - Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod - tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At - vero eos et accusam et justo duo dolores et ea rebum. - - ## Sage - - - list item 1 - - list item 2 - - ### Raze - - 1. list item 1 - 2. list item 2 - - #### Cypher - - \`\`\`javascript - alert(1); - \`\`\` - - ##### Jett - - [Sovity Website](https://sovity.de/) - - **Table** -| Item | In Stock | Price | Description | -| :---------------- | :------: | ----: | :---------- | -| Python Hat | True | 24.99 | This is a long description to test the scrolling behavior of the table. This is a long description to test the scrolling behavior of the table. | -| SQL Hat | True | 24.99 | This is a long description to test the scrolling behavior of the table. This is a long description to test the scrolling behavior of the table. | -| Codecademy Tee | False | 20.99 | This is a long description to test the scrolling behavior of the table. This is a long description to test the scrolling behavior of the table. | -| Codecademy Hoodie | False | 43.99 | This is a long description to test the scrolling behavior of the table. This is a long description to test the scrolling behavior of the table. | -`; - - const shortMarkdownDescription = `# Short Description - -This is a short description text that should be fully rendered without being **collapsed**. No *show more* button should be visible. -`; - - export const assetWithCustomProperties: UiAsset = { - dataSourceAvailability: 'LIVE', - assetId: 'asset-with-custom-properties', - title: 'Asset with Custom Properties', - description: 'Asset with Custom Properties', - descriptionShortText: 'Asset with Custom Properties', - connectorEndpoint: 'https://my-connector/api/dsp', - participantId: 'MDSL1234XX.C1234XX', - creatorOrganizationName: 'My Org', - isOwnConnector: true, - customJsonLdAsString: '{"http://custom.json.test/LD":"https://google.com"}', - customJsonAsString: '{"testKey":"testValue"}', - privateCustomJsonLdAsString: - '{"http://custom.json.test/LD/private":"https://google.com/private"}', - privateCustomJsonAsString: '{"privateTestKey":"testValue"}', - }; - - export const onRequestAsset: UiAsset = { - dataSourceAvailability: 'ON_REQUEST', - assetId: 'part-names-july-2024', - title: 'Part Names July 2024', - description: 'Example "On Request" data Offer', - descriptionShortText: 'Example "On Request" data Offer', - connectorEndpoint: 'https://my-other-connector/api/dsp', - participantId: 'MDSL1234XX.C1234XX', - creatorOrganizationName: 'my-org', - temporalCoverageFrom: new Date('2024-01-01'), - onRequestContactEmail: 'contact@my-org.mail', - onRequestContactEmailSubject: "Data Offer 'Part Names July 2024'", - version: 'July 2024', - keywords: ['automotive', 'partnumber', 'part names'], - isOwnConnector: false, - }; - - export const boring: UiAsset = { - dataSourceAvailability: 'LIVE', - assetId: 'data-sample-ckd-skd-demands-2023-Jan', - title: 'data-sample-ckd-skd-demands-2023-Jan', - description: '', - descriptionShortText: '', - connectorEndpoint: 'https://my-other-connector/api/dsp', - participantId: 'MDSL1234XX.C1234XX', - creatorOrganizationName: 'my-other-connector', - temporalCoverageFrom: new Date('2024-01-01'), - isOwnConnector: true, - }; - - export const short: UiAsset = { - dataSourceAvailability: 'LIVE', - assetId: 'data-sample-ckd-skd-demands-2023-Feb', - title: 'data-sample-ckd-skd-demands-2023-Feb', - connectorEndpoint: 'https://my-other-connector/api/dsp', - participantId: 'MDSL1234XX.C1235XX', - creatorOrganizationName: 'my-other-connector', - description: shortMarkdownDescription, - descriptionShortText: - 'Short Description This is a short description text that should be fully rendered without being collapsed. No show more button should be visible.', - isOwnConnector: false, - }; - - export const full: UiAsset = { - dataSourceAvailability: 'LIVE', - assetId: 'ckd-skd-demands-2023-Jan', - title: 'CKD / SKD Demands January 2023', - connectorEndpoint: 'https://my-other-connector/api/dsp', - participantId: 'MDSL1234XX.C1236XX', - version: '2023-A-Program', - creatorOrganizationName: 'My-German-OEM', - keywords: ['automotive', 'part-demands', '2023', 'January'], - mediaType: 'application/json', - description: markdownDescription, - descriptionShortText: - 'Part demands for CKD/SKD parts January 2023 Split by plant / day / model code. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.', - isOwnConnector: true, - language: 'https://w3id.org/idsa/code/EN', - publisherHomepage: - 'https://teamabc.departmentxyz.my-german-oem.de/offers/ckd-skd-demands', - licenseUrl: - 'https://teamabc.departmentxyz.my-german-oem.de/offers/ckd-skd-demands#license', - landingPageUrl: - 'https://teamabc.departmentxyz.my-german-oem.de/offers/ckd-skd-demands#documentation', - dataCategory: 'Infrastructure and Logistics', - dataSubcategory: 'General Information About Planning Of Routes', - dataModel: 'unspecified', - geoReferenceMethod: 'Lat/Lon', - transportMode: 'Rail', - sovereignLegalName: 'Data Owning Company GmbH', - geoLocation: '40.741895,-73.989308', - nutsLocations: ['DE', 'DE9', 'DE92', 'DE929'], - dataSampleUrls: [ - 'https://teamabc.departmentxyz.sample/a', - 'https://teamabc.departmentxyz.sample/b', - 'https://teamabc.departmentxyz.sample/c', - 'https://teamabc.departmentxyz.sample/d', - 'https://teamabc.departmentxyz.sample/e', - ], - referenceFileUrls: [ - 'https://teamabc.departmentxyz.reference/a', - 'https://teamabc.departmentxyz.reference/b', - 'https://teamabc.departmentxyz.reference/c', - 'https://teamabc.departmentxyz.reference/d', - 'https://teamabc.departmentxyz.reference/e', - 'https://teamabc.departmentxyz.reference/f', - 'https://teamabc.departmentxyz.reference/g', - 'https://teamabc.departmentxyz.reference/h', - 'https://teamabc.departmentxyz.reference/i', - 'https://teamabc.departmentxyz.reference/j', - 'https://teamabc.departmentxyz.reference/k', - 'https://teamabc.departmentxyz.reference/l', - 'https://teamabc.departmentxyz.reference/m', - 'https://teamabc.departmentxyz.reference/n', - 'https://teamabc.departmentxyz.reference/o', - 'https://teamabc.departmentxyz.reference/p', - 'https://teamabc.departmentxyz.reference/q', - 'https://teamabc.departmentxyz.reference/r', - 'https://teamabc.departmentxyz.reference/s', - ], - referenceFilesDescription: 'This reference file is important', - conditionsForUse: - 'If you use the dataset please cite it in your work and give attribution', - dataUpdateFrequency: 'every month', - temporalCoverageFrom: new Date('2024-01-01'), - temporalCoverageToInclusive: new Date('2024-01-24'), - httpDatasourceHintsProxyQueryParams: true, - httpDatasourceHintsProxyPath: true, - httpDatasourceHintsProxyMethod: true, - httpDatasourceHintsProxyBody: true, - customJsonAsString: '{"http://unknown/usecase": "my-use-case"}', - privateCustomJsonAsString: - '{ "http://unknown/internal-id": "my-internal-id-123"}', - }; - - export function toDummyAsset(entry: UiAsset): UiAsset { - return { - assetId: entry.assetId, - title: entry.assetId, - participantId: entry.participantId, - connectorEndpoint: entry.connectorEndpoint, - creatorOrganizationName: entry.participantId, - isOwnConnector: entry.isOwnConnector, - dataSourceAvailability: 'LIVE', - }; - } - - export function withSuffix(asset: UiAsset, suffix: string): UiAsset { - return { - ...asset, - assetId: `${asset.assetId}-${suffix}`, - title: `${asset.title} ${suffix}`, - }; - } -} diff --git a/src/app/core/services/api/fake-backend/connector-fake-impl/data/test-policies.ts b/src/app/core/services/api/fake-backend/connector-fake-impl/data/test-policies.ts deleted file mode 100644 index 3613cdf14..000000000 --- a/src/app/core/services/api/fake-backend/connector-fake-impl/data/test-policies.ts +++ /dev/null @@ -1,56 +0,0 @@ -import {UiPolicy, UiPolicyExpression} from '@sovity.de/edc-client'; -import {policyLeftExpressions} from '../../../../../../shared/business/policy-editor/model/policy-left-expressions'; -import { - constraint, - constraintList, - multi, -} from '../../../../../../shared/business/policy-editor/model/ui-policy-expression-utils'; - -export namespace TestPolicies { - const policy = ( - expression: UiPolicyExpression, - errors: string[] = [], - ): UiPolicy => ({ - policyJsonLd: JSON.stringify({ - _description: - 'The actual JSON-LD will look different. This is just data from the fake backend.', - expression, - }), - expression, - errors, - }); - - export const connectorRestricted: UiPolicy = policy( - multi( - 'AND', - constraint( - policyLeftExpressions.policyEvaluationTime, - 'GEQ', - '2020-11-30T23:00:00.000Z', - ), - constraint( - policyLeftExpressions.policyEvaluationTime, - 'LT', - '2020-12-07T23:00:00.000Z', - ), - multi( - 'OR', - constraint('REFERRING_CONNECTOR', 'EQ', 'MDSL1234XX.C1234XX'), - constraint('REFERRING_CONNECTOR', 'EQ', 'MDSL1234XX.C1235YY'), - ), - constraint('ALWAYS_TRUE', 'EQ', 'true'), - ), - ); - - export const warnings: UiPolicy = policy( - constraintList('SOME_UNKNOWN_PROP', 'HAS_PART', ['A', 'B', 'C']), - ['$.duties: Duties are currently unsupported.'], - ); - export const failedMapping: UiPolicy = policy({ - type: 'EMPTY', - }); - - export const unrestricted: UiPolicy = policy({ - type: 'EMPTY', - }); -} diff --git a/src/app/core/services/api/fake-backend/connector-fake-impl/ee-fake-service.ts b/src/app/core/services/api/fake-backend/connector-fake-impl/ee-fake-service.ts deleted file mode 100644 index c96dd82d8..000000000 --- a/src/app/core/services/api/fake-backend/connector-fake-impl/ee-fake-service.ts +++ /dev/null @@ -1,11 +0,0 @@ -import {ConnectorLimits} from '@sovity.de/edc-client'; -import {contractAgreementPage} from './contract-agreement-fake-service'; - -export const connectorLimits = (): ConnectorLimits => ({ - numActiveConsumingContractAgreements: - contractAgreementPage().contractAgreements.filter( - (it) => - it.direction === 'CONSUMING' && it.terminationStatus === 'ONGOING', - ).length, - maxActiveConsumingContractAgreements: 1, -}); diff --git a/src/app/core/services/api/fake-backend/connector-fake-impl/policy-definition-fake-service.ts b/src/app/core/services/api/fake-backend/connector-fake-impl/policy-definition-fake-service.ts deleted file mode 100644 index 18e1a1f80..000000000 --- a/src/app/core/services/api/fake-backend/connector-fake-impl/policy-definition-fake-service.ts +++ /dev/null @@ -1,90 +0,0 @@ -import { - IdAvailabilityResponse, - IdResponseDto, - PolicyDefinitionCreateDto, - PolicyDefinitionCreateRequest, - PolicyDefinitionDto, - PolicyDefinitionPage, - UiPolicyExpression, -} from '@sovity.de/edc-client'; -import {ALWAYS_TRUE_POLICY_ID} from '../../../../../shared/business/edit-asset-form/form/model/always-true-policy-id'; -import {TestPolicies} from './data/test-policies'; - -let policyDefinitions: PolicyDefinitionDto[] = [ - { - policyDefinitionId: 'test-policy-definition-1', - policy: TestPolicies.connectorRestricted, - }, - { - policyDefinitionId: 'test-policy-definition-2', - policy: TestPolicies.warnings, - }, - { - policyDefinitionId: 'test-policy-definition-3', - policy: TestPolicies.failedMapping, - }, - { - policyDefinitionId: ALWAYS_TRUE_POLICY_ID, - policy: TestPolicies.unrestricted, - }, -]; -export const policyDefinitionPage = (): PolicyDefinitionPage => { - return {policies: policyDefinitions}; -}; - -export const policyDefinitionIdAvailable = ( - policyDefinitionId: string, -): IdAvailabilityResponse => { - return { - id: policyDefinitionId, - available: !policyDefinitions.some( - (it) => it.policyDefinitionId === policyDefinitionId, - ), - }; -}; - -export const getPolicyDefinitionByJsonLd = (jsonLd: string) => - policyDefinitions.find((it) => it.policy.policyJsonLd === jsonLd)?.policy; - -export const createPolicyDefinition = ( - request: PolicyDefinitionCreateRequest, -): IdResponseDto => { - const expression: UiPolicyExpression = { - type: 'AND', - expressions: (request.policy.constraints ?? []).map((it) => ({ - type: 'CONSTRAINT', - constraint: it, - })), - }; - - return createPolicyDefinitionV2({ - policyDefinitionId: request.policyDefinitionId, - expression, - }); -}; - -export const createPolicyDefinitionV2 = ( - request: PolicyDefinitionCreateDto, -): IdResponseDto => { - const newPolicyDefinition: PolicyDefinitionDto = { - policyDefinitionId: request.policyDefinitionId, - policy: { - expression: request.expression, - errors: [], - policyJsonLd: '{"example-policy-jsonld": true}', - }, - }; - policyDefinitions = [newPolicyDefinition, ...policyDefinitions]; - - return { - id: request.policyDefinitionId, - lastUpdatedDate: new Date(), - }; -}; - -export const deletePolicyDefinition = (id: string): IdResponseDto => { - policyDefinitions = policyDefinitions.filter( - (it) => it.policyDefinitionId !== id, - ); - return {id, lastUpdatedDate: new Date()}; -}; diff --git a/src/app/core/services/api/fake-backend/connector-fake-impl/transfer-history-fake-service.ts b/src/app/core/services/api/fake-backend/connector-fake-impl/transfer-history-fake-service.ts deleted file mode 100644 index 708af6938..000000000 --- a/src/app/core/services/api/fake-backend/connector-fake-impl/transfer-history-fake-service.ts +++ /dev/null @@ -1,106 +0,0 @@ -import { - TransferHistoryEntry, - TransferHistoryPage, - UiAsset, -} from '@sovity.de/edc-client'; -import {getAssetById} from './asset-fake-service'; -import {TestAssets} from './data/test-assets'; - -let transferHistoryEntries: TransferHistoryEntry[] = [ - { - transferProcessId: '339b2a27-3b66-49f5-8b43-6a400d5914b5', - createdDate: new Date('2023-03-20T11:18:59.659Z'), - lastUpdatedDate: new Date('2023-07-25T11:18:59.659Z'), - state: { - code: 800, - name: 'COMPLETED', - simplifiedState: 'OK', - }, - contractAgreementId: 'test-asset-1-cd:f52a5d30-6356-4a55-a75a-3c45d7a88c3e', - direction: 'CONSUMING', - counterPartyConnectorEndpoint: 'https://sovity-demo4-mds/api/v1/ids/data', - counterPartyParticipantId: 'MDSL1234XX.C1234XX', - assetName: 'test-asset-1', - assetId: 'test-asset-1', - }, - { - transferProcessId: '1317d0da-cdc6-42ab-b54b-1f90bcfed508', - createdDate: new Date('2023-01-20T11:18:59.659Z'), - lastUpdatedDate: new Date('2023-03-25T11:18:59.659Z'), - state: { - code: -1, - name: 'ERROR', - simplifiedState: 'ERROR', - }, - contractAgreementId: 'test-asset-2-cd:5816a60b-86c1-489a-b26a-ed129947f973', - counterPartyParticipantId: 'MDSL1234XX.C1234XX', - direction: 'CONSUMING', - counterPartyConnectorEndpoint: 'http://edc2:11003/api/v1/ids/data', - assetName: 'test-asset-2', - assetId: 'test-asset-2', - errorMessage: - 'TransferProcessManager: attempt #8 failed to send transfer. Retry limit exceeded, TransferProcess 1317d0da-cdc6-42ab-b54b-1f90bcfed508 moves to ERROR state. Cause: java.net.SocketException: Connection reset', - }, - { - transferProcessId: '81cdf4cf-8427-480f-9662-8a29d66ddd3b', - createdDate: new Date('2022-03-25T11:18:59.659Z'), - lastUpdatedDate: new Date('2022-11-20T11:18:59.659Z'), - state: { - code: 800, - name: 'COMPLETED', - simplifiedState: 'OK', - }, - contractAgreementId: 'test-asset-3-cd:6ebbc301-9b1e-4cd7-9f17-97b5b7867531', - direction: 'CONSUMING', - counterPartyConnectorEndpoint: 'https://sovity-demo2-edc/api/v1/ids/data', - counterPartyParticipantId: 'MDSL1234XX.C1234XX', - assetName: 'test-asset-3', - assetId: 'test-asset-3', - }, - { - transferProcessId: '47240a35-d8fc-41d9-b020-07b87f3cc7b6', - createdDate: new Date('2022-01-29T11:18:59.659Z'), - lastUpdatedDate: new Date('2022-02-24T11:18:59.659Z'), - state: { - code: 600, - name: 'IN_PROGRESS', - simplifiedState: 'RUNNING', - }, - contractAgreementId: 'test-asset-4-cd:f52a5d30-6356-4a55-a75a-3c45d7a88c3e', - direction: 'PROVIDING', - counterPartyConnectorEndpoint: 'https://sovity-demo2-edc/api/v1/ids/data', - counterPartyParticipantId: 'MDSL1234XX.C1234XX', - assetName: TestAssets.full.title, - assetId: TestAssets.full.assetId, - }, -]; - -export const transferHistoryPage = (): TransferHistoryPage => { - return { - transferEntries: transferHistoryEntries, - }; -}; - -export const transferProcessAsset = (transferProcessId: string): UiAsset => { - const transfer = transferHistoryEntries.find( - (it) => it.transferProcessId === transferProcessId, - ); - const assetId = transfer?.assetId ?? 'unknown'; - const isProviding = transfer?.direction === 'PROVIDING'; - - const dummyAsset: UiAsset = { - assetId, - dataSourceAvailability: 'LIVE', - title: assetId, - participantId: 'unknown', - connectorEndpoint: 'https://unknown/api/dsp', - isOwnConnector: false, - creatorOrganizationName: 'unknown', - }; - - const assetEntry = getAssetById(assetId); - - return isProviding && assetEntry - ? TestAssets.toDummyAsset(assetEntry) - : dummyAsset; -}; diff --git a/src/app/core/services/api/fake-backend/edc-fake-backend.ts b/src/app/core/services/api/fake-backend/edc-fake-backend.ts deleted file mode 100644 index 57a129c7c..000000000 --- a/src/app/core/services/api/fake-backend/edc-fake-backend.ts +++ /dev/null @@ -1,266 +0,0 @@ -import { - AssetPageToJSON, - ConnectorLimitsToJSON, - ContractAgreementPageQueryFromJSON, - ContractAgreementPageToJSON, - ContractDefinitionPageToJSON, - ContractDefinitionRequestFromJSON, - ContractNegotiationRequestFromJSON, - ContractTerminationRequestFromJSON, - DashboardPageToJSON, - DataOfferCreationRequestFromJSON, - FetchAPI, - IdAvailabilityResponseToJSON, - IdResponseDtoToJSON, - InitiateTransferRequestFromJSON, - PolicyDefinitionCreateDtoFromJSON, - PolicyDefinitionCreateRequestFromJSON, - PolicyDefinitionPageToJSON, - TransferHistoryPageToJSON, - UiAssetCreateRequestFromJSON, - UiAssetEditRequestFromJSON, - UiAssetToJSON, - UiContractNegotiationToJSON, - UiDataOfferToJSON, -} from '@sovity.de/edc-client'; -import { - assetIdAvailable, - assetPage, - createAsset, - deleteAsset, - editAsset, -} from './connector-fake-impl/asset-fake-service'; -import {getCatalogPageDataOffers} from './connector-fake-impl/catalog-fake-service'; -import { - contractAgreementInitiateTransfer, - contractAgreementPage, -} from './connector-fake-impl/contract-agreement-fake-service'; -import { - contractDefinitionIdAvailable, - contractDefinitionPage, - createContractDefinition, - deleteContractDefinition, -} from './connector-fake-impl/contract-definition-fake-service'; -import { - getContractNegotiation, - initiateContractNegotiation, -} from './connector-fake-impl/contract-negotiation-fake-service'; -import {initiateContractTermination} from './connector-fake-impl/contract-termination-fake-service'; -import {dashboardPage} from './connector-fake-impl/dashboard-fake-service'; -import {createDataOffer} from './connector-fake-impl/data-offer-fake-service'; -import {connectorLimits} from './connector-fake-impl/ee-fake-service'; -import { - createPolicyDefinition, - createPolicyDefinitionV2, - deletePolicyDefinition, - policyDefinitionIdAvailable, - policyDefinitionPage, -} from './connector-fake-impl/policy-definition-fake-service'; -import { - transferHistoryPage, - transferProcessAsset, -} from './connector-fake-impl/transfer-history-fake-service'; -import { - getBody, - getMethod, - getQueryParams, - getUrl, -} from './utils/request-utils'; -import {ok} from './utils/response-utils'; -import {UrlInterceptor} from './utils/url-interceptor'; - -export const EDC_FAKE_BACKEND: FetchAPI = async ( - input: RequestInfo, - init?: RequestInit, -): Promise => { - const url = getUrl(input, 'http://edc.fake-backend/wrapper/'); - const method = getMethod(init); - const body = getBody(init); - const params = getQueryParams(input); - - console.log( - ...[ - 'Fake Backend:', - method, - url, - (params as any)['size'] ? params : null, - body, - ].filter((it) => !!it), - ); - - return new UrlInterceptor(url, method) - .url('ui/pages/dashboard-page') - .on('GET', () => { - const page = dashboardPage(); - return ok(DashboardPageToJSON(page)); - }) - - .url('ui/pages/asset-page') - .on('GET', () => { - const page = assetPage(); - return ok(AssetPageToJSON(page)); - }) - - .url('ui/pages/asset-page/assets') - .on('POST', () => { - const createRequest = UiAssetCreateRequestFromJSON(body); - const created = createAsset(createRequest); - return ok(IdResponseDtoToJSON(created)); - }) - - .url('ui/pages/asset-page/assets/*') - .on('DELETE', (assetId) => { - const deleted = deleteAsset(assetId); - return ok(IdResponseDtoToJSON(deleted)); - }) - - .url('ui/pages/asset-page/assets/*') - .on('PUT', (assetId) => { - const editRequest = UiAssetEditRequestFromJSON(body); - const created = editAsset(assetId, editRequest); - return ok(IdResponseDtoToJSON(created)); - }) - - .url('ui/pages/policy-page') - .on('GET', () => { - const page = policyDefinitionPage(); - return ok(PolicyDefinitionPageToJSON(page)); - }) - - .url('ui/pages/policy-page/policy-definitions') - .on('POST', () => { - const createRequest = PolicyDefinitionCreateRequestFromJSON(body); - const created = createPolicyDefinition(createRequest); - return ok(IdResponseDtoToJSON(created)); - }) - - .url('ui/v2/pages/policy-page/policy-definitions') - .on('POST', () => { - const createRequest = PolicyDefinitionCreateDtoFromJSON(body); - const created = createPolicyDefinitionV2(createRequest); - return ok(IdResponseDtoToJSON(created)); - }) - - .url('ui/pages/policy-page/policy-definitions/*') - .on('DELETE', (policyDefinitionId) => { - const deleted = deletePolicyDefinition(policyDefinitionId); - return ok(IdResponseDtoToJSON(deleted)); - }) - - .url('ui/pages/contract-definition-page') - .on('GET', () => { - const page = contractDefinitionPage(); - return ok(ContractDefinitionPageToJSON(page)); - }) - - .url('ui/pages/contract-definition-page/contract-definitions') - .on('POST', () => { - const createRequest = ContractDefinitionRequestFromJSON(body); - const created = createContractDefinition(createRequest); - return ok(IdResponseDtoToJSON(created)); - }) - - .url('ui/pages/contract-definition-page/contract-definitions/*') - .on('DELETE', (contractDefinitionId) => { - const deleted = deleteContractDefinition(contractDefinitionId); - return ok(IdResponseDtoToJSON(deleted)); - }) - - .url('ui/pages/catalog-page/data-offers') - .on('GET', () => { - const connectorEndpoint = params.get('connectorEndpoint')!; - const dataOffers = getCatalogPageDataOffers(connectorEndpoint); - return ok(dataOffers.map(UiDataOfferToJSON)); - }) - - .url('ui/pages/catalog-page/contract-negotiations') - .on('POST', () => { - const createRequest = ContractNegotiationRequestFromJSON(body); - const contractNegotiation = initiateContractNegotiation(createRequest); - return ok(UiContractNegotiationToJSON(contractNegotiation)); - }) - - .url('ui/pages/catalog-page/contract-negotiations/*') - .on('GET', (contractNegotiationId) => { - const contractNegotiation = getContractNegotiation(contractNegotiationId); - return ok(UiContractNegotiationToJSON(contractNegotiation)); - }) - - .url('ui/pages/contract-agreement-page') - .on('POST', () => { - const pageQuery = body ? ContractAgreementPageQueryFromJSON(body) : null; - const page = contractAgreementPage(pageQuery?.terminationStatus); - return ok(ContractAgreementPageToJSON(page)); - }) - - .url('ui/pages/contract-agreement-page/*') - .on('GET', (contractAgreementId: String) => { - return ok( - contractAgreementPage().contractAgreements.find( - (contractAgreement) => - contractAgreement.contractAgreementId === contractAgreementId, - ), - ); - }) - - .url('ui/pages/content-agreement-page/*/terminate') - .on('POST', (contractAgreementId) => { - const request = ContractTerminationRequestFromJSON(body); - const response = initiateContractTermination({ - contractAgreementId: contractAgreementId, - contractTerminationRequest: request, - }); - return ok(IdResponseDtoToJSON(response)); - }) - - .url('ui/pages/contract-agreement-page/transfers') - .on('POST', () => { - const transferRequest = InitiateTransferRequestFromJSON(body); - const created = contractAgreementInitiateTransfer(transferRequest); - return ok(IdResponseDtoToJSON(created)); - }) - - .url('ui/pages/transfer-history-page') - .on('GET', () => { - const page = transferHistoryPage(); - return ok(TransferHistoryPageToJSON(page)); - }) - - .url('ui/pages/transfer-history-page/transfer-processes/*/asset') - .on('GET', (transferProcessId) => { - const asset = transferProcessAsset(transferProcessId); - return ok(UiAssetToJSON(asset)); - }) - - .url('ee/connector-limits') - .on('GET', () => { - const limits = connectorLimits(); - return ok(ConnectorLimitsToJSON(limits)); - }) - - .url('ui/pages/create-data-offer') - .on('POST', () => { - const response = createDataOffer(DataOfferCreationRequestFromJSON(body)); - return ok(IdResponseDtoToJSON(response)); - }) - - .url('ui/pages/data-offer-page/validate-asset-id/*') - .on('GET', (assetId) => { - const response = assetIdAvailable(assetId); - return ok(IdAvailabilityResponseToJSON(response)); - }) - - .url('ui/pages/data-offer-page/validate-policy-id/*') - .on('GET', (policyId) => { - const response = policyDefinitionIdAvailable(policyId); - return ok(IdAvailabilityResponseToJSON(response)); - }) - - .url('ui/pages/data-offer-page/validate-contract-definition-id/*') - .on('GET', (contractDefinitionId) => { - const response = contractDefinitionIdAvailable(contractDefinitionId); - return ok(IdAvailabilityResponseToJSON(response)); - }) - - .tryMatch(); -}; diff --git a/src/app/core/services/api/fake-backend/utils/request-utils.ts b/src/app/core/services/api/fake-backend/utils/request-utils.ts deleted file mode 100644 index cc9fd256a..000000000 --- a/src/app/core/services/api/fake-backend/utils/request-utils.ts +++ /dev/null @@ -1,20 +0,0 @@ -export const getUrl = (input: Request | string, baseUrl: string): string => { - const url = new URL(typeof input === 'string' ? input : input.url); - const urlNoQuery = url.origin + url.pathname; - return urlNoQuery.startsWith(baseUrl) - ? urlNoQuery.substring(baseUrl.length) - : urlNoQuery; -}; - -export const getMethod = (init: RequestInit | undefined): string => - init?.method ?? 'GET'; - -export const getBody = (input: RequestInit | undefined): null | any => { - const body = input?.body?.toString(); - return body ? JSON.parse(body) : null; -}; - -export const getQueryParams = (input: Request | string): URLSearchParams => { - const url = new URL(typeof input === 'string' ? input : input.url); - return url.searchParams; -}; diff --git a/src/app/core/services/api/fake-backend/utils/response-utils.ts b/src/app/core/services/api/fake-backend/utils/response-utils.ts deleted file mode 100644 index 7d8b6a8b7..000000000 --- a/src/app/core/services/api/fake-backend/utils/response-utils.ts +++ /dev/null @@ -1,7 +0,0 @@ -export function ok(body: any): Promise { - console.log('Fake Backend returns: ', body); - return new Promise((resolve) => { - const response = new Response(JSON.stringify(body), {status: 200}); - setTimeout(() => resolve(response), 400); - }); -} diff --git a/src/app/core/services/api/fake-backend/utils/url-interceptor.ts b/src/app/core/services/api/fake-backend/utils/url-interceptor.ts deleted file mode 100644 index 9c01d8b3a..000000000 --- a/src/app/core/services/api/fake-backend/utils/url-interceptor.ts +++ /dev/null @@ -1,65 +0,0 @@ -/** - * Collects URLs + Method + ResponseFn and then matches them in order. - * - * This class only exists to clean up the fake-backend code. - */ -export class UrlInterceptor { - private entries: { - urlPattern: string; - method: string; - response: ResponseFn; - }[] = []; - - private lastUrlPattern: string | null = null; - - constructor(public requestUrl: String, public requestMethod: string) {} - - url(urlPattern: string): this { - this.lastUrlPattern = urlPattern; - return this; - } - - on(method: string, response: ResponseFn): this { - const urlPattern = this.lastUrlPattern; - if (!urlPattern) { - throw new Error('Call .url() before calling .on()'); - } - this.entries.push({urlPattern, method, response}); - return this; - } - - async tryMatch(): Promise { - for (let entry of this.entries) { - if (entry.method !== this.requestMethod) { - continue; - } - - const regexp = '^' + entry.urlPattern.replace(/\*/g, '(.*)') + '$'; - let match = this.requestUrl.match(regexp); - if (!match) { - continue; - } - - match = match - .filter((_, index) => index > 0) - .map((pathSegment) => decodeURIComponent(pathSegment)); - - return await entry.response(...match); - } - - console.warn( - `Unmatched request: ${this.requestMethod} ${this.requestUrl}`, - this.entries.map((it) => `${it.method} ${it.urlPattern}`), - ); - - return Promise.reject( - `Unmatched request: ${this.requestMethod} ${this.requestUrl}`, - ); - } -} - -export type ResponseFn = (...match: string[]) => Promise; - -export interface MethodMatcher { - on(method: string, accept: ResponseFn): MethodMatcher; -} diff --git a/src/app/core/services/api/last-commit-info.service.ts b/src/app/core/services/api/last-commit-info.service.ts deleted file mode 100644 index 64c8f51f2..000000000 --- a/src/app/core/services/api/last-commit-info.service.ts +++ /dev/null @@ -1,30 +0,0 @@ -import {HttpClient} from '@angular/common/http'; -import {Inject, Injectable} from '@angular/core'; -import {Observable} from 'rxjs'; -import {APP_CONFIG, AppConfig} from '../../config/app-config'; -import {LastCommitInfo} from './model/last-commit-info'; - -@Injectable({ - providedIn: 'root', -}) -export class LastCommitInfoService { - constructor( - private http: HttpClient, - @Inject(APP_CONFIG) public config: AppConfig, - ) {} - - getLastCommitInfoData(): Observable { - const url = `${this.config.managementApiUrl}/last-commit-info`; - return this.http.get(url); - } - - getUiCommitDetails(): Observable { - const path = '/assets/config/version.txt'; - return this.http.get(path, {responseType: 'text'}); - } - - getUiBuildDateDetails(): Observable { - const path = '/assets/config/ui-build-date.txt'; - return this.http.get(path, {responseType: 'text'}); - } -} diff --git a/src/app/core/services/api/model/criterion-type-ext.ts b/src/app/core/services/api/model/criterion-type-ext.ts deleted file mode 100644 index 518a80fb8..000000000 --- a/src/app/core/services/api/model/criterion-type-ext.ts +++ /dev/null @@ -1,7 +0,0 @@ -import {UiCriterionOperator} from '@sovity.de/edc-client'; - -export const CRITERION_OPERATOR_SYMBOLS: Record = { - EQ: '=', - IN: 'in', - LIKE: 'like', -}; diff --git a/src/app/core/services/api/model/last-commit-info.ts b/src/app/core/services/api/model/last-commit-info.ts deleted file mode 100644 index 0f1502d52..000000000 --- a/src/app/core/services/api/model/last-commit-info.ts +++ /dev/null @@ -1,6 +0,0 @@ -export interface LastCommitInfo { - envLastCommitInfo: string | null; - envBuildDate: string | null; - jarLastCommitInfo: string | null; - jarBuildDate: string | null; -} diff --git a/src/app/core/services/asset-builder.ts b/src/app/core/services/asset-builder.ts deleted file mode 100644 index 7fba6a0b2..000000000 --- a/src/app/core/services/asset-builder.ts +++ /dev/null @@ -1,122 +0,0 @@ -import {Injectable} from '@angular/core'; -import {UiAsset} from '@sovity.de/edc-client'; -import {DataCategorySelectItem} from '../../shared/form-elements/data-category-select/data-category-select-item'; -import {DataCategorySelectItemService} from '../../shared/form-elements/data-category-select/data-category-select-item.service'; -import {DataSubcategorySelectItem} from '../../shared/form-elements/data-subcategory-select/data-subcategory-select-item'; -import {DataSubcategorySelectItemService} from '../../shared/form-elements/data-subcategory-select/data-subcategory-select-item.service'; -import {LanguageSelectItem} from '../../shared/form-elements/language-select/language-select-item'; -import {LanguageSelectItemService} from '../../shared/form-elements/language-select/language-select-item.service'; -import {TransportModeSelectItem} from '../../shared/form-elements/transport-mode-select/transport-mode-select-item'; -import {TransportModeSelectItemService} from '../../shared/form-elements/transport-mode-select/transport-mode-select-item.service'; -import {AdditionalAssetProperty, UiAssetMapped} from './models/ui-asset-mapped'; - -/** - * Maps between EDC Asset and our type safe asset - */ -@Injectable({ - providedIn: 'root', -}) -export class AssetBuilder { - constructor( - private languageSelectItemService: LanguageSelectItemService, - private transportModeSelectItemService: TransportModeSelectItemService, - private dataCategorySelectItemService: DataCategorySelectItemService, - private dataSubcategorySelectItemService: DataSubcategorySelectItemService, - ) {} - - buildAsset(asset: UiAsset): UiAssetMapped { - const { - language, - dataCategory, - dataSubcategory, - transportMode, - ...assetProperties - } = asset; - - const { - customJsonAsString, - customJsonLdAsString, - privateCustomJsonAsString, - privateCustomJsonLdAsString, - } = asset; - - return { - ...assetProperties, - language: this.getLanguageItem(language), - dataCategory: this.getDataCategoryItem(dataCategory), - dataSubcategory: this.getDataSubcategoryItem(dataSubcategory), - transportMode: this.getTransportModeItem(transportMode), - customJsonProperties: this.buildAdditionalProperties(customJsonAsString), - customJsonLdProperties: - this.buildAdditionalProperties(customJsonLdAsString), - privateCustomJsonProperties: this.buildAdditionalProperties( - privateCustomJsonAsString, - ), - privateCustomJsonLdProperties: this.buildAdditionalProperties( - privateCustomJsonLdAsString, - ), - }; - } - - private getTransportModeItem( - transportMode: string | undefined, - ): TransportModeSelectItem | null { - return transportMode == null - ? null - : this.transportModeSelectItemService.findById(transportMode); - } - - private getDataSubcategoryItem( - dataSubcategory: string | undefined, - ): DataSubcategorySelectItem | null { - return dataSubcategory == null - ? null - : this.dataSubcategorySelectItemService.findById(dataSubcategory); - } - - private getDataCategoryItem( - dataCategory: string | undefined, - ): DataCategorySelectItem | null { - return dataCategory == null - ? null - : this.dataCategorySelectItemService.findById(dataCategory); - } - - private getLanguageItem( - language: string | undefined, - ): LanguageSelectItem | null { - return language == null - ? null - : this.languageSelectItemService.findById(language); - } - - private buildAdditionalProperties( - json: string | undefined, - ): AdditionalAssetProperty[] { - const obj = this.tryParseJsonObj(json || '{}'); - return Object.entries(obj).map( - ([key, value]): AdditionalAssetProperty => ({ - key: `${key}`, - value: - typeof value === 'object' - ? JSON.stringify(value, null, 2) - : `${value}`, - }), - ); - } - - private tryParseJsonObj(json: string): any { - const bad = {'Conversion Failure': `Bad JSON: ${json}`}; - - try { - const parsed = JSON.parse(json); - if (parsed == null) { - return {}; - } else if (typeof parsed === 'object') { - return parsed; - } - } catch (e) {} - - return bad; - } -} diff --git a/src/app/core/services/asset-data-source-mapper-legacy.ts b/src/app/core/services/asset-data-source-mapper-legacy.ts deleted file mode 100644 index fb68d58b3..000000000 --- a/src/app/core/services/asset-data-source-mapper-legacy.ts +++ /dev/null @@ -1,106 +0,0 @@ -import {Injectable} from '@angular/core'; -import {UiDataSource} from '@sovity.de/edc-client'; -import {AssetDatasourceFormValue} from '../../routes/connector-ui/asset-list-page/asset-create-dialog/form/model/asset-datasource-form-model'; -import {HttpDatasourceHeaderFormValue} from '../../routes/connector-ui/asset-list-page/asset-create-dialog/form/model/http-datasource-header-form-model'; -import {getAuthFields} from '../utils/form-value-utils'; -import {QueryParamsMapper} from './query-params-mapper'; - -@Injectable({providedIn: 'root'}) -export class AssetDataSourceMapperLegacy { - constructor(private queryParamsMapper: QueryParamsMapper) {} - - buildDataSourceOrNullLegacy( - formValue: AssetDatasourceFormValue, - ): UiDataSource | null { - if ( - !formValue?.dataAddressType || - formValue.dataAddressType === 'Unchanged' - ) { - return null; - } - return this.buildDataSourceLegacy(formValue); - } - - buildDataSourceLegacy(formValue: AssetDatasourceFormValue): UiDataSource { - switch (formValue?.dataAddressType) { - case 'Custom-Data-Address-Json': - return this.buildCustomDataSourceLegacy(formValue); - case 'On-Request': - return this.buildOnRequestDataSourceLegacy(formValue); - case 'Http': - return this.buildHttpDataSourceLegacy(formValue); - default: - throw new Error( - `Invalid Data Address Type ${formValue?.dataAddressType}`, - ); - } - } - - private buildCustomDataSourceLegacy( - formValue: AssetDatasourceFormValue, - ): UiDataSource { - const json = JSON.parse(formValue.dataDestination?.trim()!!); - return { - type: 'CUSTOM', - customProperties: json, - }; - } - - private buildHttpDataSourceLegacy( - formValue: AssetDatasourceFormValue, - ): UiDataSource { - const baseUrl = this.queryParamsMapper.getBaseUrlWithoutQueryParams( - formValue.httpUrl!, - )!; - const queryString = this.queryParamsMapper.getFullQueryString( - formValue.httpUrl!, - formValue.httpQueryParams ?? [], - ); - - const authFields = getAuthFields(formValue); - - return { - type: 'HTTP_DATA', - httpData: { - method: formValue.httpMethod, - baseUrl, - queryString: queryString ?? undefined, - authHeaderName: authFields.authHeaderName ?? undefined, - authHeaderValue: { - secretName: authFields.authHeaderSecretName ?? undefined, - rawValue: authFields.authHeaderValue ?? undefined, - }, - headers: this.buildHttpHeaders(formValue.httpHeaders ?? []), - enableMethodParameterization: formValue.httpProxyMethod, - enablePathParameterization: formValue.httpProxyPath, - enableQueryParameterization: formValue.httpProxyQueryParams, - enableBodyParameterization: formValue.httpProxyBody, - }, - }; - } - - private buildOnRequestDataSourceLegacy( - formValue: AssetDatasourceFormValue, - ): UiDataSource { - return { - type: 'ON_REQUEST', - onRequest: { - contactEmail: formValue.contactEmail!!, - contactPreferredEmailSubject: formValue.contactPreferredEmailSubject!!, - }, - }; - } - - private buildHttpHeaders( - headers: HttpDatasourceHeaderFormValue[], - ): Record { - return Object.fromEntries( - headers - .map((header) => [ - header.headerName?.trim() || '', - header.headerValue?.trim() || '', - ]) - .filter((a) => a[0] && a[1]), - ); - } -} diff --git a/src/app/core/services/asset-data-source-mapper.ts b/src/app/core/services/asset-data-source-mapper.ts deleted file mode 100644 index 03f4b74d4..000000000 --- a/src/app/core/services/asset-data-source-mapper.ts +++ /dev/null @@ -1,105 +0,0 @@ -import {Injectable} from '@angular/core'; -import {UiDataSource} from '@sovity.de/edc-client'; -import {AssetDatasourceFormValue} from '../../shared/business/edit-asset-form/form/model/asset-datasource-form-model'; -import {HttpDatasourceHeaderFormValue} from '../../shared/business/edit-asset-form/form/model/http-datasource-header-form-model'; -import {getAuthFields} from '../utils/form-value-utils'; -import {QueryParamsMapper} from './query-params-mapper'; - -@Injectable({providedIn: 'root'}) -export class AssetDataSourceMapper { - constructor(private queryParamsMapper: QueryParamsMapper) {} - - buildDataSourceOrNull( - formValue: AssetDatasourceFormValue | undefined, - ): UiDataSource | null { - if (!formValue || formValue.dataSourceAvailability === 'Unchanged') { - return null; - } - return this.buildDataSource(formValue); - } - - buildDataSource(formValue: AssetDatasourceFormValue): UiDataSource { - if (formValue.dataSourceAvailability === 'On-Request') { - return this.buildOnRequestDataSource(formValue); - } - - switch (formValue?.dataAddressType) { - case 'Custom-Data-Address-Json': - return this.buildCustomDataSource(formValue); - case 'Http': - return this.buildHttpDataSource(formValue); - default: - throw new Error( - `Invalid Data Address Type ${formValue?.dataAddressType}`, - ); - } - } - - private buildCustomDataSource( - formValue: AssetDatasourceFormValue, - ): UiDataSource { - const json = JSON.parse(formValue.dataDestination?.trim()!!); - return { - type: 'CUSTOM', - customProperties: json, - }; - } - - private buildHttpDataSource( - formValue: AssetDatasourceFormValue, - ): UiDataSource { - const baseUrl = this.queryParamsMapper.getBaseUrlWithoutQueryParams( - formValue.httpUrl!, - )!; - const queryString = this.queryParamsMapper.getFullQueryString( - formValue.httpUrl!, - formValue.httpQueryParams ?? [], - ); - - const authFields = getAuthFields(formValue); - - return { - type: 'HTTP_DATA', - httpData: { - method: formValue.httpMethod, - baseUrl, - queryString: queryString ?? undefined, - authHeaderName: authFields.authHeaderName ?? undefined, - authHeaderValue: { - secretName: authFields.authHeaderSecretName ?? undefined, - rawValue: authFields.authHeaderValue ?? undefined, - }, - headers: this.buildHttpHeaders(formValue.httpHeaders ?? []), - enableMethodParameterization: formValue.httpProxyMethod, - enablePathParameterization: formValue.httpProxyPath, - enableQueryParameterization: formValue.httpProxyQueryParams, - enableBodyParameterization: formValue.httpProxyBody, - }, - }; - } - - private buildOnRequestDataSource( - formValue: AssetDatasourceFormValue, - ): UiDataSource { - return { - type: 'ON_REQUEST', - onRequest: { - contactEmail: formValue.contactEmail!!, - contactPreferredEmailSubject: formValue.contactPreferredEmailSubject!!, - }, - }; - } - - private buildHttpHeaders( - headers: HttpDatasourceHeaderFormValue[], - ): Record { - return Object.fromEntries( - headers - .map((header) => [ - header.headerName?.trim() || '', - header.headerValue?.trim() || '', - ]) - .filter((a) => a[0] && a[1]), - ); - } -} diff --git a/src/app/core/services/asset-request-builder-legacy.ts b/src/app/core/services/asset-request-builder-legacy.ts deleted file mode 100644 index e97533f70..000000000 --- a/src/app/core/services/asset-request-builder-legacy.ts +++ /dev/null @@ -1,97 +0,0 @@ -import {Injectable} from '@angular/core'; -import {UiAssetCreateRequest} from '@sovity.de/edc-client'; -import {AssetCreateDialogFormValue} from '../../routes/connector-ui/asset-list-page/asset-create-dialog/form/model/asset-create-dialog-form-model'; -import {toGmtZeroHourDate} from '../utils/date-utils'; -import {AssetDataSourceMapperLegacy} from './asset-data-source-mapper-legacy'; -import {AssetRequestCommonMetadata} from './asset-request-common-metadata'; - -@Injectable() -export class AssetRequestBuilderLegacy { - constructor(private assetDataSourceMapper: AssetDataSourceMapperLegacy) {} - - buildAssetCreateRequestLegacy( - formValue: AssetCreateDialogFormValue, - ): UiAssetCreateRequest { - const id = formValue.metadata?.id!; - const metadata = this.buildAssetRequestCommonMetadataLegacy(formValue); - const dataSource = this.assetDataSourceMapper.buildDataSourceLegacy( - formValue.datasource!, - ); - return { - id, - ...metadata, - dataSource, - }; - } - - buildAssetRequestCommonMetadataLegacy( - formValue: AssetCreateDialogFormValue, - ): AssetRequestCommonMetadata { - const title = formValue.metadata?.title!; - const version = formValue.metadata?.version; - const description = formValue.metadata?.description; - const language = formValue.metadata?.language?.id; - const keywords = formValue.metadata?.keywords; - const licenseUrl = formValue.metadata?.standardLicense; - const publisherHomepage = formValue.metadata?.publisher; - const mediaType = formValue.metadata?.contentType; - const landingPageUrl = formValue.metadata?.endpointDocumentation; - - const dataCategory = formValue.advanced?.dataCategory?.id; - const dataSubcategory = formValue.advanced?.dataSubcategory?.id; - const transportMode = formValue.advanced?.transportMode?.id; - const geoReferenceMethod = formValue.advanced?.geoReferenceMethod; - const dataModel = formValue.advanced?.dataModel; - - const sovereignLegalName = formValue.advanced?.sovereignLegalName; - const geoLocation = formValue.advanced?.geoLocation; - const nutsLocations = formValue.advanced?.nutsLocations; - const dataSampleUrls = formValue.advanced?.dataSampleUrls; - const referenceFileUrls = formValue.advanced?.referenceFileUrls; - const referenceFilesDescription = - formValue.advanced?.referenceFilesDescription; - const conditionsForUse = formValue.advanced?.conditionsForUse; - const dataUpdateFrequency = formValue.advanced?.dataUpdateFrequency; - let temporalCoverageFrom = - formValue.advanced?.temporalCoverage?.from || undefined; - let temporalCoverageToInclusive = - formValue.advanced?.temporalCoverage?.toInclusive || undefined; - temporalCoverageFrom = temporalCoverageFrom - ? toGmtZeroHourDate(temporalCoverageFrom) - : undefined; - temporalCoverageToInclusive = temporalCoverageToInclusive - ? toGmtZeroHourDate(temporalCoverageToInclusive) - : undefined; - - return { - title, - language, - description, - publisherHomepage, - licenseUrl, - version, - keywords, - mediaType, - landingPageUrl, - dataCategory, - dataSubcategory, - dataModel, - geoReferenceMethod, - transportMode, - sovereignLegalName, - geoLocation, - nutsLocations, - dataSampleUrls, - referenceFileUrls, - referenceFilesDescription, - conditionsForUse, - dataUpdateFrequency, - temporalCoverageFrom, - temporalCoverageToInclusive, - customJsonAsString: undefined, - customJsonLdAsString: undefined, - privateCustomJsonAsString: undefined, - privateCustomJsonLdAsString: undefined, - }; - } -} diff --git a/src/app/core/services/asset-request-builder.ts b/src/app/core/services/asset-request-builder.ts deleted file mode 100644 index 284b71987..000000000 --- a/src/app/core/services/asset-request-builder.ts +++ /dev/null @@ -1,105 +0,0 @@ -import {Injectable} from '@angular/core'; -import {UiAssetCreateRequest, UiAssetEditRequest} from '@sovity.de/edc-client'; -import {EditAssetFormValue} from 'src/app/shared/business/edit-asset-form/form/model/edit-asset-form-model'; -import {toGmtZeroHourDate} from '../utils/date-utils'; -import {AssetDataSourceMapper} from './asset-data-source-mapper'; -import {AssetRequestCommonMetadata} from './asset-request-common-metadata'; - -@Injectable() -export class AssetRequestBuilder { - constructor(private assetDataSourceMapper: AssetDataSourceMapper) {} - - buildAssetCreateRequest(formValue: EditAssetFormValue): UiAssetCreateRequest { - const id = formValue.general?.id!; - const metadata = this.buildAssetRequestCommonMetadata(formValue); - const dataSource = this.assetDataSourceMapper.buildDataSource( - formValue.datasource!, - ); - return { - id, - ...metadata, - dataSource, - }; - } - - buildAssetEditRequest(formValue: EditAssetFormValue): UiAssetEditRequest { - const metadata = this.buildAssetRequestCommonMetadata(formValue); - const dataSourceOrNull = this.assetDataSourceMapper.buildDataSourceOrNull( - formValue.datasource, - ); - return { - ...metadata, - dataSourceOverrideOrNull: dataSourceOrNull ?? undefined, - }; - } - - buildAssetRequestCommonMetadata( - formValue: EditAssetFormValue, - ): AssetRequestCommonMetadata { - const title = formValue.general?.name!; - const version = formValue.general?.version; - const description = formValue.general?.description; - const language = formValue.general?.language?.id; - const keywords = formValue.general?.keywords; - const licenseUrl = formValue.general?.standardLicense; - const publisherHomepage = formValue.general?.publisher; - const mediaType = formValue.general?.contentType; - const landingPageUrl = formValue.general?.endpointDocumentation; - const dataCategory = formValue.general?.dataCategory?.id; - const dataSubcategory = formValue.general?.dataSubcategory?.id; - - const transportMode = formValue.advanced?.transportMode?.id; - const geoReferenceMethod = formValue.advanced?.geoReferenceMethod; - const dataModel = formValue.advanced?.dataModel; - const sovereignLegalName = formValue.advanced?.sovereignLegalName; - const geoLocation = formValue.advanced?.geoLocation; - const nutsLocations = formValue.advanced?.nutsLocations; - const dataSampleUrls = formValue.advanced?.dataSampleUrls; - const referenceFileUrls = formValue.advanced?.referenceFileUrls; - const referenceFilesDescription = - formValue.advanced?.referenceFilesDescription; - const conditionsForUse = formValue.advanced?.conditionsForUse; - const dataUpdateFrequency = formValue.advanced?.dataUpdateFrequency; - let temporalCoverageFrom = - formValue.advanced?.temporalCoverage?.from || undefined; - let temporalCoverageToInclusive = - formValue.advanced?.temporalCoverage?.toInclusive || undefined; - temporalCoverageFrom = temporalCoverageFrom - ? toGmtZeroHourDate(temporalCoverageFrom) - : undefined; - temporalCoverageToInclusive = temporalCoverageToInclusive - ? toGmtZeroHourDate(temporalCoverageToInclusive) - : undefined; - - return { - title, - language, - description, - publisherHomepage, - licenseUrl, - version, - keywords, - mediaType, - landingPageUrl, - dataCategory, - dataSubcategory, - dataModel, - geoReferenceMethod, - transportMode, - sovereignLegalName, - geoLocation, - nutsLocations, - dataSampleUrls, - referenceFileUrls, - referenceFilesDescription, - conditionsForUse, - dataUpdateFrequency, - temporalCoverageFrom, - temporalCoverageToInclusive, - customJsonAsString: undefined, - customJsonLdAsString: undefined, - privateCustomJsonAsString: undefined, - privateCustomJsonLdAsString: undefined, - }; - } -} diff --git a/src/app/core/services/asset-request-common-metadata.ts b/src/app/core/services/asset-request-common-metadata.ts deleted file mode 100644 index 575fc1722..000000000 --- a/src/app/core/services/asset-request-common-metadata.ts +++ /dev/null @@ -1,144 +0,0 @@ -/** - * Common Properties between Asset Create and Edit Request - */ -export interface AssetRequestCommonMetadata { - /** - * Asset Title - */ - title: string | undefined; - - /** - * Asset Language - */ - language: string | undefined; - - /** - * Asset Description - */ - description: string | undefined; - - /** - * Asset Homepage - */ - publisherHomepage: string | undefined; - - /** - * License URL - */ - licenseUrl: string | undefined; - - /** - * Version - */ - version: string | undefined; - - /** - * Asset Keywords - */ - keywords: Array | undefined; - - /** - * Asset MediaType - */ - mediaType: string | undefined; - - /** - * Landing Page URL - */ - landingPageUrl: string | undefined; - - /** - * Data Category - */ - dataCategory: string | undefined; - - /** - * Data Subcategory - */ - dataSubcategory: string | undefined; - - /** - * Data Model - */ - dataModel: string | undefined; - - /** - * Geo-Reference Method - */ - geoReferenceMethod: string | undefined; - - /** - * Transport Mode - */ - transportMode: string | undefined; - - /** - * The sovereign is distinct from the publisher by being the legal owner of the data. - */ - sovereignLegalName: string | undefined; - - /** - * Geo location - */ - geoLocation: string | undefined; - - /** - * Locations by NUTS standard which divides countries into administrative divisions - */ - nutsLocations: Array | undefined; - - /** - * Data sample URLs - */ - dataSampleUrls: Array | undefined; - - /** - * Reference file/schema URLs - */ - referenceFileUrls: Array | undefined; - - /** - * Additional information on reference files/schemas - */ - referenceFilesDescription: string | undefined; - - /** - * Instructions for use that are not legally relevant e.g. information on how to cite the dataset in papers - */ - conditionsForUse: string | undefined; - - /** - * Data update frequency - */ - dataUpdateFrequency: string | undefined; - - /** - * Temporal coverage start date - */ - temporalCoverageFrom: Date | undefined; - - /** - * Temporal coverage end date (inclusive) - */ - temporalCoverageToInclusive: Date | undefined; - - /** - * Contains serialized custom properties in the JSON format. - */ - customJsonAsString: string | undefined; - - /** - * Contains serialized custom properties in the JSON LD format. Contrary to the customJsonAsString field, this string must represent a JSON LD object and will be affected by JSON LD compaction and expansion. Due to a technical limitation, the properties can't be booleans. - */ - customJsonLdAsString: string | undefined; - - /** - * Same as customJsonAsString but the data will be stored in the private properties. - */ - privateCustomJsonAsString: string | undefined; - - /** - * Same as customJsonLdAsString but the data will be stored in the private properties. The same limitations apply. - */ - privateCustomJsonLdAsString: string | undefined; -} diff --git a/src/app/core/services/asset.service.ts b/src/app/core/services/asset.service.ts deleted file mode 100644 index ce7bcc597..000000000 --- a/src/app/core/services/asset.service.ts +++ /dev/null @@ -1,29 +0,0 @@ -import {Injectable} from '@angular/core'; -import {Observable} from 'rxjs'; -import {map} from 'rxjs/operators'; -import {EdcApiService} from './api/edc-api.service'; -import {AssetBuilder} from './asset-builder'; -import {UiAssetMapped} from './models/ui-asset-mapped'; - -/** - * Wrapped AssetService with AssetPropertyMapper - */ -@Injectable({ - providedIn: 'root', -}) -export class AssetService { - constructor( - private assetBuilder: AssetBuilder, - private edcApiService: EdcApiService, - ) {} - - fetchAssets(): Observable { - return this.edcApiService - .getAssetPage() - .pipe( - map((assetPage) => - assetPage.assets.map((asset) => this.assetBuilder.buildAsset(asset)), - ), - ); - } -} diff --git a/src/app/core/services/chart-color.service.ts b/src/app/core/services/chart-color.service.ts deleted file mode 100644 index c2739d9b5..000000000 --- a/src/app/core/services/chart-color.service.ts +++ /dev/null @@ -1,29 +0,0 @@ -import {Injectable} from '@angular/core'; - -@Injectable({providedIn: 'root'}) -export class ChartColorService { - private chartColors = [ - '#fd7f6f', - '#7eb0d5', - '#b2e061', - '#bd7ebe', - '#ffb55a', - '#ffee65', - '#beb9db', - '#fdcce5', - '#8bd3c7', - ]; - - /** - * To make charts look different but recognizable, we take colors at different offsets, but rotate the colors in - * the same direction on the palette. If necessary we wrap around - * @param amount - */ - getColors(amount: number, offset: number): string[] { - return Array.from({length: amount}, (_, i) => this.colorAt(i + offset)); - } - - colorAt(index: number): string { - return this.chartColors[index % this.chartColors.length]; - } -} diff --git a/src/app/core/services/connector-info-property-grid-group-builder.ts b/src/app/core/services/connector-info-property-grid-group-builder.ts deleted file mode 100644 index 64faf64af..000000000 --- a/src/app/core/services/connector-info-property-grid-group-builder.ts +++ /dev/null @@ -1,275 +0,0 @@ -import {Injectable} from '@angular/core'; -import {MatDialog} from '@angular/material/dialog'; -import {TranslateService} from '@ngx-translate/core'; -import {DashboardPage} from '@sovity.de/edc-client'; -import {JsonDialogComponent} from '../../shared/common/json-dialog/json-dialog.component'; -import {JsonDialogData} from '../../shared/common/json-dialog/json-dialog.data'; -import {PropertyGridGroup} from '../../shared/common/property-grid-group/property-grid-group'; -import {PropertyGridField} from '../../shared/common/property-grid/property-grid-field'; -import {PropertyGridFieldService} from '../../shared/common/property-grid/property-grid-field.service'; -import {LastCommitInfo} from './api/model/last-commit-info'; -import {Fetched} from './models/fetched'; -import {ParticipantIdLocalization} from './participant-id-localization'; - -@Injectable({providedIn: 'root'}) -export class ConnectorInfoPropertyGridGroupBuilder { - constructor( - private participantIdLocalization: ParticipantIdLocalization, - private propertyGridUtils: PropertyGridFieldService, - private matDialog: MatDialog, - private translateService: TranslateService, - ) {} - - private onShowConnectorVersionClick(title: string, versionData: any) { - const data: JsonDialogData = { - title, - subtitle: this.translateService.instant('general.details'), - icon: 'link', - objectForJson: versionData, - }; - this.matDialog.open(JsonDialogComponent, {data}); - } - - private asDate(dateString?: string) { - return dateString ? new Date(dateString!).toLocaleString() : ''; - } - - getBackendVersionFields( - lastCommitInfo: Fetched, - ): PropertyGridField[] { - const buildProp = ( - label: string, - dateProp: keyof LastCommitInfo, - detailsProp: keyof LastCommitInfo, - ) => - lastCommitInfo.match({ - ifOk: (lastCommitInfo) => ({ - icon: 'link', - label, - text: lastCommitInfo[dateProp] - ? this.asDate(lastCommitInfo[dateProp] ?? undefined) - : 'Show Details', - onclick: () => - this.onShowConnectorVersionClick('Version Information', { - [`${label} Last Commit Information"`]: - lastCommitInfo[detailsProp], - }), - }), - ifError: (error) => ({ - icon: 'link', - label, - text: 'Show Details', - onclick: () => - this.onShowConnectorVersionClick('Version Information', { - Error: error.failureMessage, - }), - }), - ifLoading: () => ({ - icon: 'link', - label, - text: 'Loading...', - }), - }); - - return [ - buildProp('CE Extensions', 'jarBuildDate', 'jarLastCommitInfo'), - buildProp('Connector', 'envBuildDate', 'envLastCommitInfo'), - ]; - } - - getUiVersionField( - uiBuildDate: Fetched, - uiCommitDetails: Fetched, - ): PropertyGridField[] { - return uiBuildDate.match({ - ifOk: (data) => [ - { - icon: 'link', - label: 'UI Version', - text: data.trim().toString() - ? this.asDate(data.trim().toString()) - : this.translateService.instant('general.details'), - onclick: () => - this.onShowConnectorVersionClick('Version Information', { - 'UI Last Commit Information': uiCommitDetails.match({ - ifOk: (uiCommitdata) => uiCommitdata, - ifError: (error) => error.failureMessage, - ifLoading: () => - this.translateService.instant('general.still_loading'), - }), - }), - }, - ], - ifError: (error) => [ - { - icon: 'link', - label: 'UI Version', - text: this.translateService.instant('general.details'), - onclick: () => - this.onShowConnectorVersionClick('Version Information', { - 'UI Commit Information': error.failureMessage, - }), - }, - ], - ifLoading: () => [ - { - icon: 'link', - label: 'UI Version', - text: this.translateService.instant('general.loading'), - }, - ], - }); - } - - buildConnectorPropertyGridGroup( - groupLabel: string | null, - dashboardData: Fetched, - ): PropertyGridGroup { - const fields: PropertyGridField[] = dashboardData.match< - PropertyGridField[] - >({ - ifLoading: () => [ - { - icon: 'info', - label: this.translateService.instant('general.loading1'), - text: this.translateService.instant('general.loading'), - }, - ], - ifError: () => [ - { - icon: 'error', - label: this.translateService.instant('general.error'), - text: this.translateService.instant('services.failed_loading'), - }, - ], - ifOk: (data) => this.buildConnectorMetadata(data), - }); - - return { - groupLabel, - properties: fields, - }; - } - - private buildConnectorMetadata(data: DashboardPage): PropertyGridField[] { - const fields = [ - { - icon: 'link', - label: this.translateService.instant('general.endpoint'), - ...this.propertyGridUtils.guessValue(data.connectorEndpoint), - }, - { - icon: 'category', - label: this.participantIdLocalization.participantId, - ...this.propertyGridUtils.guessValue(data.connectorParticipantId), - }, - { - icon: 'title', - label: this.translateService.instant('general.title'), - ...this.propertyGridUtils.guessValue(data.connectorTitle), - }, - { - icon: 'apartment', - label: this.translateService.instant('services.curator_org'), - ...this.propertyGridUtils.guessValue(data.connectorCuratorName), - }, - { - icon: 'apartment', - label: this.translateService.instant('services.curator_url'), - ...this.propertyGridUtils.guessValue(data.connectorCuratorUrl), - }, - { - icon: 'title', - label: this.translateService.instant('general.description'), - ...this.propertyGridUtils.guessValue(data.connectorDescription), - }, - { - icon: 'contact_support', - label: this.translateService.instant('services.maintainer'), - ...this.propertyGridUtils.guessValue(data.connectorMaintainerName), - }, - { - icon: 'contact_support', - label: this.translateService.instant('services.main_url'), - ...this.propertyGridUtils.guessValue(data.connectorMaintainerUrl), - }, - ]; - - if (data.connectorDapsConfig != null) { - fields.push( - { - icon: 'vpn_key', - label: 'DAPS Token URL', - ...this.propertyGridUtils.guessValue( - data.connectorDapsConfig.tokenUrl, - ), - }, - { - icon: 'lock', - label: 'DAPS JWKS URL', - ...this.propertyGridUtils.guessValue( - data.connectorDapsConfig.jwksUrl, - ), - }, - ); - } - - if (data.connectorMiwConfig != null) { - fields.push( - { - icon: 'category', - label: 'MIW Authority ID', - ...this.propertyGridUtils.guessValue( - data.connectorMiwConfig.authorityId, - ), - }, - { - icon: 'link', - label: 'MIW URL', - ...this.propertyGridUtils.guessValue(data.connectorMiwConfig.url), - }, - { - icon: 'vpn_key', - label: 'MIW Token URL', - ...this.propertyGridUtils.guessValue( - data.connectorMiwConfig.tokenUrl, - ), - }, - ); - } - - return fields; - } - - buildConnectorVersionGroup( - lastCommitInfo: Fetched, - uiBuildDate: Fetched, - uiCommitDetails: Fetched, - ): PropertyGridGroup { - return { - groupLabel: 'Version Information', - properties: [ - ...this.getBackendVersionFields(lastCommitInfo), - ...this.getUiVersionField(uiBuildDate, uiCommitDetails), - ], - }; - } - - buildPropertyGridGroups( - lastCommitInformation: Fetched, - UiBuildDate: Fetched, - UiCommitDetails: Fetched, - dashboardPageData: Fetched, - ): PropertyGridGroup[] { - const fieldGroups: PropertyGridGroup[] = [ - this.buildConnectorPropertyGridGroup(null, dashboardPageData), - this.buildConnectorVersionGroup( - lastCommitInformation, - UiBuildDate, - UiCommitDetails, - ), - ]; - - return fieldGroups.filter((it) => it.properties.length); - } -} diff --git a/src/app/core/services/connector-limits.service.ts b/src/app/core/services/connector-limits.service.ts deleted file mode 100644 index d35b6dc36..000000000 --- a/src/app/core/services/connector-limits.service.ts +++ /dev/null @@ -1,31 +0,0 @@ -import {Injectable} from '@angular/core'; -import {Observable, of} from 'rxjs'; -import {map} from 'rxjs/operators'; -import {ConnectorLimits} from '@sovity.de/edc-client'; -import {ActiveFeatureSet} from '../config/active-feature-set'; -import {EdcApiService} from './api/edc-api.service'; - -@Injectable({ - providedIn: 'root', -}) -export class ConnectorLimitsService { - constructor( - private edcApiService: EdcApiService, - private activeFeatureSet: ActiveFeatureSet, - ) {} - - isConsumingAgreementLimitExceeded(): Observable { - return this.activeFeatureSet.hasConnectorLimits() - ? this.edcApiService - .getEnterpriseEditionConnectorLimits() - .pipe(map(this.limitsExceeded)) - : of(false); - } - - private limitsExceeded = (limits: ConnectorLimits) => { - const max = limits.maxActiveConsumingContractAgreements; - const current = limits.numActiveConsumingContractAgreements; - - return max != null && max >= 0 && current >= max; - }; -} diff --git a/src/app/core/services/contract-definition-builder.ts b/src/app/core/services/contract-definition-builder.ts deleted file mode 100644 index 82d41fabc..000000000 --- a/src/app/core/services/contract-definition-builder.ts +++ /dev/null @@ -1,38 +0,0 @@ -import {Injectable} from '@angular/core'; -import { - ContractDefinitionRequest, - UiCriterionLiteralType, -} from '@sovity.de/edc-client'; -import {ContractDefinitionEditorDialogFormValue} from '../../routes/connector-ui/contract-definition-page/contract-definition-editor-dialog/contract-definition-editor-dialog-form-model'; -import {AssetProperty} from './models/asset-properties'; - -@Injectable({ - providedIn: 'root', -}) -export class ContractDefinitionBuilder { - /** - * Build {@link ContractDefinitionDto} from {@link ContractDefinitionEditorDialogFormValue} - * - * @param formValue form value - * @return contract definition dto - */ - buildContractDefinition( - formValue: ContractDefinitionEditorDialogFormValue, - ): ContractDefinitionRequest { - return { - contractDefinitionId: formValue.id ?? '', - accessPolicyId: formValue.accessPolicy!.policyDefinitionId, - contractPolicyId: formValue.contractPolicy!.policyDefinitionId, - assetSelector: [ - { - operandLeft: AssetProperty.id, - operator: 'IN', - operandRight: { - type: UiCriterionLiteralType.ValueList, - valueList: formValue.assets!.map((it) => it.assetId), - }, - }, - ], - }; - } -} diff --git a/src/app/core/services/contract-negotiation.service.ts b/src/app/core/services/contract-negotiation.service.ts deleted file mode 100644 index d813ee12c..000000000 --- a/src/app/core/services/contract-negotiation.service.ts +++ /dev/null @@ -1,141 +0,0 @@ -import {Injectable} from '@angular/core'; -import {MatDialog} from '@angular/material/dialog'; -import {EMPTY, Observable, interval} from 'rxjs'; -import {catchError, filter, first, switchMap, tap} from 'rxjs/operators'; -import {TranslateService} from '@ngx-translate/core'; -import { - ContractNegotiationRequest, - UiContractNegotiation, - UiContractOffer, -} from '@sovity.de/edc-client'; -import {environment} from '../../../environments/environment'; -import {InitiateNegotiationConfirmTosDialogComponent} from '../../shared/business/initiate-negotiation-confirm-tos-dialog/initiate-negotiation-confirm-tos-dialog.component'; -import {EdcApiService} from './api/edc-api.service'; -import {DataOffer} from './models/data-offer'; -import {NotificationService} from './notification.service'; - -@Injectable({providedIn: 'root'}) -export class ContractNegotiationService { - runningContractOffers = new Set(); - doneContractOffers = new Set(); - - constructor( - private edcApiService: EdcApiService, - private notificationService: NotificationService, - private confirmationDialog: MatDialog, - private translateService: TranslateService, - ) { - if (!environment.production) { - // Test data on local dev - this.runningContractOffers.add( - 'offer:6db25605-cd8c-4528-ade2-6a90349d06ac', - ); - this.doneContractOffers.add('offer:6db25605-cd8c-4528-ade1-6a90389d06ac'); - } - } - - negotiationState( - contractOffer: UiContractOffer, - ): 'ready' | 'negotiating' | 'negotiated' { - const isNegotiated = this.isNegotiated(contractOffer); - - if (isNegotiated) { - return 'negotiated'; - } - - const isBusy = this.isBusy(contractOffer); - return isBusy ? 'negotiating' : 'ready'; - } - - isBusy(contractOffer: UiContractOffer) { - return this.runningContractOffers.has(contractOffer.contractOfferId); - } - - isNegotiated(contractOffer: UiContractOffer) { - return this.doneContractOffers.has(contractOffer.contractOfferId); - } - - negotiate(dataOffer: DataOffer, contractOffer: UiContractOffer) { - const contractOfferId = contractOffer.contractOfferId; - const initiateRequest: ContractNegotiationRequest = { - counterPartyParticipantId: dataOffer.participantId, - counterPartyAddress: dataOffer.endpoint!, - assetId: dataOffer.asset.assetId, - contractOfferId, - policyJsonLd: contractOffer.policy.policyJsonLd, - }; - - this.confirmationDialog - .open(InitiateNegotiationConfirmTosDialogComponent, {maxWidth: '30rem'}) - .afterClosed() - .subscribe((result) => { - if (result) { - this.startNegotiation(initiateRequest); - } - }); - } - - private startNegotiation(initiateRequest: ContractNegotiationRequest) { - const contractOfferId = initiateRequest.contractOfferId; - - this.initiateNegotiation(initiateRequest) - .pipe( - tap(() => this.onStarted(contractOfferId)), - switchMap((negotiation) => - interval(1000).pipe( - switchMap(() => - this.fetchNegotiation(negotiation.contractNegotiationId).pipe( - catchError(() => EMPTY), - ), - ), - ), - ), - filter( - (negotiation) => negotiation.state.simplifiedState != 'IN_PROGRESS', - ), - first(), - ) - .subscribe({ - next: (negotiation) => { - if (negotiation.state.simplifiedState === 'AGREED') { - this.onSuccess(contractOfferId); - } else { - this.onFailureNegotiating(contractOfferId); - } - }, - error: () => this.onFailureStarting(), - }); - } - - private onFailureStarting() { - const err = this.translateService.instant('notification.starting_neg'); - this.notificationService.showError(err); - } - - private onStarted(contractOfferId: string) { - this.runningContractOffers.add(contractOfferId); - } - - private onFailureNegotiating(contractOfferId: string) { - this.runningContractOffers.delete(contractOfferId); - const err2 = this.translateService.instant('notification.negotiation'); - this.notificationService.showError(err2); - } - - private onSuccess(contractOfferId: string) { - this.runningContractOffers.delete(contractOfferId); - this.doneContractOffers.add(contractOfferId); - const mes = this.translateService.instant('notification.compl_negotiation'); - this.notificationService.showError(mes); - } - - private initiateNegotiation( - initiateDto: ContractNegotiationRequest, - ): Observable { - return this.edcApiService.initiateContractNegotiation(initiateDto); - } - - private fetchNegotiation(id: string): Observable { - return this.edcApiService.getContractNegotiation(id); - } -} diff --git a/src/app/core/services/data-address-mapper.ts b/src/app/core/services/data-address-mapper.ts deleted file mode 100644 index 32f7ca189..000000000 --- a/src/app/core/services/data-address-mapper.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {Injectable} from '@angular/core'; -import {ContractAgreementTransferDialogFormValue} from '../../routes/connector-ui/contract-agreement-page/contract-agreement-transfer-dialog/contract-agreement-transfer-dialog-form-model'; -import {TransferDataSinkMapper} from './transfer-data-sink-mapper'; - -@Injectable({providedIn: 'root'}) -export class DataAddressMapper { - constructor(private httpRequestParamsMapper: TransferDataSinkMapper) {} - - buildDataAddressProperties( - formValue: ContractAgreementTransferDialogFormValue | undefined, - ): Record { - switch (formValue?.dataAddressType) { - case 'Custom-Data-Address-Json': - return JSON.parse(formValue.dataDestination?.trim()!!); - case 'Http': - return this.httpRequestParamsMapper.buildHttpDataAddress(formValue); - default: - throw new Error( - `Invalid Data Address Type ${formValue?.dataAddressType}`, - ); - } - } -} diff --git a/src/app/core/services/favicon.service.ts b/src/app/core/services/favicon.service.ts deleted file mode 100644 index 327c7191b..000000000 --- a/src/app/core/services/favicon.service.ts +++ /dev/null @@ -1,26 +0,0 @@ -import {DOCUMENT} from '@angular/common'; -import {Inject, Injectable} from '@angular/core'; - -@Injectable({ - providedIn: 'root', -}) -export class FaviconService { - constructor(@Inject(DOCUMENT) private document: Document) {} - - setFavicon(src: string) { - const link = this.findOrCreateLink('icon'); - link.setAttribute('href', src); - } - - private findOrCreateLink(rel: string): HTMLLinkElement { - let link = document.querySelector(`link[rel~='${rel}']`) as HTMLLinkElement; - if (!link) { - link = this.document.createElement('link'); - link.setAttribute('rel', rel); - - const head = this.document.querySelector('head') as HTMLHeadElement; - head.appendChild(link); - } - return link; - } -} diff --git a/src/app/core/services/html-sanitizer.ts b/src/app/core/services/html-sanitizer.ts deleted file mode 100644 index 69abbdaca..000000000 --- a/src/app/core/services/html-sanitizer.ts +++ /dev/null @@ -1,19 +0,0 @@ -import {Injectable} from '@angular/core'; -import {addHook, sanitize} from 'isomorphic-dompurify'; - -@Injectable({providedIn: 'root'}) -export class HtmlSanitizer { - constructor() { - addHook('afterSanitizeAttributes', function (node) { - // https://developer.chrome.com/docs/lighthouse/best-practices/external-anchors-use-rel-noopener/ - if ('target' in node) { - node.setAttribute('target', '_blank'); - node.setAttribute('rel', 'noopener noreferrer'); - } - }); - } - - sanitize(html: string) { - return sanitize(html); - } -} diff --git a/src/app/core/services/login-polling.service.ts b/src/app/core/services/login-polling.service.ts deleted file mode 100644 index 259d1928a..000000000 --- a/src/app/core/services/login-polling.service.ts +++ /dev/null @@ -1,38 +0,0 @@ -import {HttpErrorResponse} from '@angular/common/http'; -import {Injectable, OnDestroy} from '@angular/core'; -import {EMPTY, Observable, Subject, interval} from 'rxjs'; -import {catchError, switchMap, takeUntil} from 'rxjs/operators'; -import {EdcApiService} from './api/edc-api.service'; - -@Injectable({providedIn: 'root'}) -export class LoginPollingService implements OnDestroy { - private pollInterval = 1000 * 30; - private ngOnDestroy$ = new Subject(); - - constructor(private edcApiService: EdcApiService) {} - - startPolling(): void { - interval(this.pollInterval) - .pipe( - switchMap(() => this.pollLogin()), - takeUntil(this.ngOnDestroy$), - ) - .subscribe(); - } - - private pollLogin(): Observable { - return this.edcApiService.getAssetPage().pipe( - catchError((err) => { - if (!(err instanceof HttpErrorResponse) || err.status !== 401) { - console.warn('Error while polling for session', err); - } - return EMPTY; - }), - ); - } - - ngOnDestroy() { - this.ngOnDestroy$.next(null); - this.ngOnDestroy$.complete(); - } -} diff --git a/src/app/core/services/mailto-link-builder.spec.ts b/src/app/core/services/mailto-link-builder.spec.ts deleted file mode 100644 index 02907ce20..000000000 --- a/src/app/core/services/mailto-link-builder.spec.ts +++ /dev/null @@ -1,24 +0,0 @@ -import {MailtoLinkBuilder} from './mailto-link-builder'; - -describe('mailto-link-builder', () => { - const builder = new MailtoLinkBuilder(); - - it('build link with all fields', () => { - expect( - builder.buildMailtoUrl( - 'test@test.com', - 'subject abc', - 'body', - 'cc', - 'bcc', - ), - ).toEqual( - 'mailto:test@test.com?subject=subject%20abc&body=body&cc=cc&bcc=bcc', - ); - }); - it('build link with only email', () => { - expect(builder.buildMailtoUrl('test@test.com')).toEqual( - 'mailto:test@test.com', - ); - }); -}); diff --git a/src/app/core/services/mailto-link-builder.ts b/src/app/core/services/mailto-link-builder.ts deleted file mode 100644 index 52795d85d..000000000 --- a/src/app/core/services/mailto-link-builder.ts +++ /dev/null @@ -1,29 +0,0 @@ -import {Injectable} from '@angular/core'; -import {removeUndefinedValues} from '../utils/record-utils'; - -@Injectable({providedIn: 'root'}) -export class MailtoLinkBuilder { - private readonly MAILTO = 'mailto:'; - - buildMailtoUrl( - email: string, - subject?: string, - body?: string, - cc?: string, - bcc?: string, - ): string { - const queryParams = new URLSearchParams( - removeUndefinedValues({ - subject, - body, - cc, - bcc, - }), - ); - // URLSearchParams replaces spaces with '+', so we need to replace them with '%20' for the mail scenario - const queryParamsStr = queryParams.toString().replaceAll('+', '%20'); - const queryStr = queryParamsStr ? `?${queryParamsStr}` : ''; - - return `${this.MAILTO}${email}${queryStr}`; - } -} diff --git a/src/app/core/services/markdown-converter.ts b/src/app/core/services/markdown-converter.ts deleted file mode 100644 index f064122ae..000000000 --- a/src/app/core/services/markdown-converter.ts +++ /dev/null @@ -1,19 +0,0 @@ -import {Injectable} from '@angular/core'; -import {marked} from 'marked'; - -@Injectable({providedIn: 'root'}) -export class MarkdownConverter { - constructor() { - const renderer = new marked.Renderer(); - - renderer.image = function (href, title, alt) { - return `${alt}`; - }; - - marked.use({renderer}); - } - - toHtml(markdown: string) { - return marked.parse(markdown).toString(); - } -} diff --git a/src/app/core/services/models/asset-properties.ts b/src/app/core/services/models/asset-properties.ts deleted file mode 100644 index c205e29a0..000000000 --- a/src/app/core/services/models/asset-properties.ts +++ /dev/null @@ -1,5 +0,0 @@ -const EDC = 'https://w3id.org/edc/v0.0.1/ns/'; - -export const AssetProperty = { - id: `${EDC}id`, -}; diff --git a/src/app/core/services/models/contract-offer.ts b/src/app/core/services/models/contract-offer.ts deleted file mode 100644 index 52d0a570b..000000000 --- a/src/app/core/services/models/contract-offer.ts +++ /dev/null @@ -1,6 +0,0 @@ -import {UiContractOffer} from '@sovity.de/edc-client'; -import {PropertyGridField} from '../../../shared/common/property-grid/property-grid-field'; - -export type ContractOffer = UiContractOffer & { - properties: PropertyGridField[]; -}; diff --git a/src/app/core/services/models/data-address-properties.ts b/src/app/core/services/models/data-address-properties.ts deleted file mode 100644 index 3804e08f1..000000000 --- a/src/app/core/services/models/data-address-properties.ts +++ /dev/null @@ -1,20 +0,0 @@ -const EDC = 'https://w3id.org/edc/v0.0.1/ns/'; - -export const DataAddressProperty = { - authCode: `${EDC}authCode`, - authKey: `${EDC}authKey`, - baseUrl: `${EDC}baseUrl`, - body: `${EDC}body`, - header: `header`, - contentType: `${EDC}contentType`, - mediaType: `${EDC}mediaType`, - method: `${EDC}method`, - pathSegments: `${EDC}pathSegments`, - proxyBody: `${EDC}proxyBody`, - proxyMethod: `${EDC}proxyMethod`, - proxyPath: `${EDC}proxyPath`, - proxyQueryParams: `${EDC}proxyQueryParams`, - queryParams: `${EDC}queryParams`, - secretName: `${EDC}secretName`, - type: `${EDC}type`, -}; diff --git a/src/app/core/services/models/data-offer.ts b/src/app/core/services/models/data-offer.ts deleted file mode 100644 index f395a31c3..000000000 --- a/src/app/core/services/models/data-offer.ts +++ /dev/null @@ -1,11 +0,0 @@ -import {UiDataOffer} from '@sovity.de/edc-client'; -import {ContractOffer} from './contract-offer'; -import {UiAssetMapped} from './ui-asset-mapped'; - -/** - * Contract Offer (UI Dto) - */ -export type DataOffer = Omit & { - asset: UiAssetMapped; - contractOffers: ContractOffer[]; -}; diff --git a/src/app/core/services/models/fetched.ts b/src/app/core/services/models/fetched.ts deleted file mode 100644 index 73a72ef02..000000000 --- a/src/app/core/services/models/fetched.ts +++ /dev/null @@ -1,199 +0,0 @@ -import {HttpErrorResponse} from '@angular/common/http'; -import {OperatorFunction, concat, of} from 'rxjs'; -import {catchError, map} from 'rxjs/operators'; - -/** - * Wraps potentially fetched value with state and potential errors. - */ -export class Fetched { - constructor( - public state: FetchedState, - public dataOrUndefined: T | undefined, - public errorOrUndefined: FetchError | undefined, - ) {} - - get isLoading(): boolean { - return this.state === 'loading' || this.state === 'not-loaded'; - } - - get isReady(): boolean { - return this.state === 'ready'; - } - - get isError(): boolean { - return this.state === 'error'; - } - - get data(): T { - if (this.state !== 'ready') { - throw new Error(`Fetched not ready!`); - } - return this.dataOrUndefined!; - } - - get error(): FetchError { - if (this.state !== 'error') { - throw new Error(`Fetched not in error state!`); - } - return this.errorOrUndefined!; - } - - /** - * Map data if present but keep state - * @param mapFn mapping fn - */ - map(mapFn: (t: T) => R): Fetched { - return new Fetched( - this.state, - this.isReady ? mapFn(this.data) : undefined, - this.errorOrUndefined, - ); - } - - /** - * Get data or fall back to default value - * @param defaultValue value to fall back to if no data is present - */ - orElse(defaultValue: R): T | R { - return this.isReady ? this.data : defaultValue; - } - - /** - * Run function with data if data is ready - * @param fn function - */ - ifReady(fn: (t: T) => void): void { - if (this.isReady) { - fn(this.data); - } - } - - /** - * Run function with data if data is ready or return default value - * @param fn function - * @param defaultValue defaultValue - */ - ifReadyElse(fn: (t: T) => R, defaultValue: R): R { - if (this.isReady) { - return fn(this.data); - } - return defaultValue; - } - - /** - * Map entire Fetched to a different type. - * - * @param opts functions matching the different possible states of Fetched. All need to return the return type. - * @return value of type R - */ - match(opts: { - ifOk: (value: T) => R; - ifError: (error: FetchError) => R; - ifLoading: () => R; - }): R { - if (this.isError) { - return opts.ifError(this.error); - } else if (this.isReady) { - return opts.ifOk(this.data); - } else { - return opts.ifLoading(); - } - } - - static empty(): Fetched { - return new Fetched('not-loaded', undefined, undefined); - } - - static loading(): Fetched { - return new Fetched('loading', undefined, undefined); - } - - static ready(data: T): Fetched { - return new Fetched('ready', data, undefined); - } - - static error(failureMessage: string, error: any): Fetched { - return Fetched.error2(mapFetchError(failureMessage, error)); - } - - static error2(fetchError: FetchError): Fetched { - return new Fetched('error', undefined, fetchError); - } - - /** - * RXJS Operator: Wraps request into multiple emissions that track state. - * - * @param opts adit - */ - static wrap(opts: { - failureMessage: string; - }): OperatorFunction> { - return (obs) => - concat( - of(Fetched.loading()), - obs.pipe( - map((data) => Fetched.ready(data)), - catchError((err) => { - console.error(opts.failureMessage, err); - return of(Fetched.error(opts.failureMessage, err)); - }), - ), - ); - } - - /** - * RXJS Operator: Map fetched value - * - * @param mapFn mapping fn applied to data if present - */ - static map( - mapFn: (value: T) => R, - ): OperatorFunction, Fetched> { - return (obs) => obs.pipe(map((fetched) => fetched.map(mapFn))); - } - - /** - * RXJS Operator: Get value or fall back to default value - * - * @param defaultValue value to fall back to if no data is present - */ - static orElse(defaultValue: R): OperatorFunction, T | R> { - return (obs) => obs.pipe(map((fetched) => fetched.orElse(defaultValue))); - } -} - -/** - * States a potentially fetched value can assume. - */ -export type FetchedState = 'not-loaded' | 'loading' | 'ready' | 'error'; - -/** - * Errors are paired with a user-friendly action-specific failure messages - * since stack traces might have useless technical error messages. - */ -export interface FetchError { - type: 'error' | '401'; - failureMessage: string; - failureIcon: string; - error: any; -} - -export function mapFetchError(failureMessage: string, error: any): FetchError { - if (error instanceof HttpErrorResponse) { - if (error.status === 401) { - return { - type: '401', - failureIcon: 'refresh', - failureMessage: 'Session most likely expired. Please refresh browser.', - error, - }; - } - } - - return { - type: 'error', - failureIcon: 'error', - failureMessage, - error, - }; -} diff --git a/src/app/core/services/models/http-data-address-params.ts b/src/app/core/services/models/http-data-address-params.ts deleted file mode 100644 index d03c36ee4..000000000 --- a/src/app/core/services/models/http-data-address-params.ts +++ /dev/null @@ -1,36 +0,0 @@ -export interface HttpDataAddressParams { - /** - * (Base) URL of the request - */ - baseUrl: string; - - /** - * Http-method - */ - method: string | null; - - /** - * Header-Name ("Authorization"), where the secrets are passed into - */ - authHeaderName: string | null; - - /** - * Header-Value ("Bearer ...") - */ - authHeaderValue: string | null; - - /** - * Secret referencing API Key - */ - authHeaderSecretName: string | null; - - /** - * Additional headers to be sent - */ - headers: Record; - - /** - * Query Parameters - */ - queryParams: string | null; -} diff --git a/src/app/core/services/models/multi-fetched.ts b/src/app/core/services/models/multi-fetched.ts deleted file mode 100644 index be788c34a..000000000 --- a/src/app/core/services/models/multi-fetched.ts +++ /dev/null @@ -1,58 +0,0 @@ -import {Fetched} from './fetched'; - -/** - * Merges status for many similar fetches. - */ -export class MultiFetched { - constructor( - public numTotal: number, - public numDone: number, - public numOk: number, - public results: Fetched[], - ) {} - - get numFailed(): number { - return this.numDone - this.numOk; - } - - get isNothingReady(): boolean { - return !this.numOk; - } - - get isDone(): boolean { - return this.numDone === this.numTotal; - } - - get isSomeReady(): boolean { - return this.numOk > 0; - } - - get isSomeFailed(): boolean { - return this.numOk != this.numDone; - } - - get isAllFailed(): boolean { - return this.numTotal > 0 && this.isDone && this.isNothingReady; - } - - get data(): T[] { - return this.results.filter((it) => it.isReady).map((it) => it.data); - } - - /** - * Aggregate multiple fetched results into common tracking - * - * @param results fetched reuslts - */ - static aggregate(results: Fetched[]): MultiFetched { - const numTotal = results.length; - const numDone = results.filter((it) => !it.isLoading).length; - const numOk = results.filter((it) => it.isReady).length; - - return new MultiFetched(numTotal, numDone, numOk, results); - } - - static empty(): MultiFetched { - return this.aggregate([]); - } -} diff --git a/src/app/core/services/models/nav-item-group.ts b/src/app/core/services/models/nav-item-group.ts deleted file mode 100644 index 9d103c7a8..000000000 --- a/src/app/core/services/models/nav-item-group.ts +++ /dev/null @@ -1,6 +0,0 @@ -import {NavItem} from './nav-item'; - -export interface NavItemGroup { - title?: string; - items: NavItem[]; -} diff --git a/src/app/core/services/models/nav-item.ts b/src/app/core/services/models/nav-item.ts deleted file mode 100644 index 8cacc74d6..000000000 --- a/src/app/core/services/models/nav-item.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {EdcUiFeature} from '../../config/profiles/edc-ui-feature'; - -export interface NavItem { - path: string; - title: string; - icon: string; - requiresFeature?: EdcUiFeature; -} diff --git a/src/app/core/services/models/ui-asset-mapped.ts b/src/app/core/services/models/ui-asset-mapped.ts deleted file mode 100644 index 3a22b72be..000000000 --- a/src/app/core/services/models/ui-asset-mapped.ts +++ /dev/null @@ -1,35 +0,0 @@ -import {UiAsset} from '@sovity.de/edc-client'; -import {DataCategorySelectItem} from '../../../shared/form-elements/data-category-select/data-category-select-item'; -import {DataSubcategorySelectItem} from '../../../shared/form-elements/data-subcategory-select/data-subcategory-select-item'; -import {LanguageSelectItem} from '../../../shared/form-elements/language-select/language-select-item'; -import {TransportModeSelectItem} from '../../../shared/form-elements/transport-mode-select/transport-mode-select-item'; - -/** - * UiAsset with replaced fixed vocabulary items. - * - * This exists, because certain metadata has labels which are added in the UI, e.g. language. - */ -export type UiAssetMapped = Omit< - UiAsset, - 'language' | 'dataCategory' | 'dataSubcategory' | 'transportMode' -> & { - connectorEndpoint: string; - - language: LanguageSelectItem | null; - - // MDS Specific - dataCategory: DataCategorySelectItem | null; - dataSubcategory: DataSubcategorySelectItem | null; - transportMode: TransportModeSelectItem | null; - - // Unhandled Additional Properties - customJsonProperties: AdditionalAssetProperty[]; - customJsonLdProperties: AdditionalAssetProperty[]; - privateCustomJsonProperties: AdditionalAssetProperty[]; - privateCustomJsonLdProperties: AdditionalAssetProperty[]; -}; - -export interface AdditionalAssetProperty { - key: string; - value: string; -} diff --git a/src/app/core/services/nav-items-builder.ts b/src/app/core/services/nav-items-builder.ts deleted file mode 100644 index f25256e37..000000000 --- a/src/app/core/services/nav-items-builder.ts +++ /dev/null @@ -1,92 +0,0 @@ -import {Injectable} from '@angular/core'; -import {routes} from 'src/app/routes/connector-ui/connector-ui-routing.module'; -import {ActiveFeatureSet} from '../config/active-feature-set'; -import {NavItemGroup} from './models/nav-item-group'; - -/** - * Builds NavItems from Angular routes - */ -@Injectable({ - providedIn: 'root', -}) -export class NavItemsBuilder { - private navItemGroups: NavItemGroup[] = [ - { - items: [ - {path: 'dashboard', icon: 'data_usage', title: 'Dashboard'}, - { - path: 'catalog-browser', - icon: 'sim_card', - title: 'catalog_browser_page.title', - }, - { - path: 'contracts', - icon: 'assignment_turned_in', - title: 'contract_agreement_page.title', - }, - { - path: 'transfer-history', - icon: 'assignment', - title: 'transfer_history_page.title', - }, - ], - }, - { - title: 'Provide', - items: [ - { - path: 'create-asset', - icon: 'post_add', - title: 'create_data_offer_page.title', - }, - {path: 'my-assets', icon: 'upload', title: 'asset_list_page.title'}, - { - path: 'policies', - icon: 'policy', - title: 'policy_definition_page.title', - }, - { - path: 'data-offers', - icon: 'rule', - title: 'contract_definition_page.title', - }, - ], - }, - - { - items: [ - { - path: 'logout', - icon: 'logout', - title: 'logout_page.title', - requiresFeature: 'logout-button', - }, - ], - }, - ]; - - constructor(private activeFeatureSet: ActiveFeatureSet) {} - - buildNavItemGroups(): NavItemGroup[] { - const allNavItemRoutesExist = this.navItemGroups - .flatMap((navItemGroup) => - navItemGroup.items.map((navItem) => navItem.path), - ) - .every((path) => routes.find((route) => route.path === path)); - - if (!allNavItemRoutesExist) { - throw new Error('All nav item routes must exist in the routes array'); - } - - return this.navItemGroups - .map((group) => ({ - ...group, - items: group.items.filter((item) => { - return item.requiresFeature - ? this.activeFeatureSet.has(item.requiresFeature) - : true; - }), - })) - .filter((group) => group.items.length > 0); - } -} diff --git a/src/app/core/services/notification.service.ts b/src/app/core/services/notification.service.ts deleted file mode 100644 index 7af76bd1f..000000000 --- a/src/app/core/services/notification.service.ts +++ /dev/null @@ -1,58 +0,0 @@ -import {Injectable} from '@angular/core'; -import { - MatSnackBar, - MatSnackBarConfig, - MatSnackBarDismiss, -} from '@angular/material/snack-bar'; -import {Observable} from 'rxjs'; - -@Injectable({ - providedIn: 'root', -}) -export class NotificationService { - constructor(private snackBar: MatSnackBar) {} - - /** - * Shows a snackbar message with a particular text - * @param message The text to display - * @param action A string specifying the text on an action button. If left out, no action button is shown. - * If left out, and onAction is specified, "Done" is used as default. - * @param onAction A callback that is invoked when the action button is clicked. - */ - public showInfo( - message: string, - action?: string, - onAction?: () => any, - ): Observable { - if (!action && onAction) { - action = 'Done'; - } - const config: MatSnackBarConfig = { - duration: onAction ? 5000 : 3000, // no auto-cancel if an action was specified - verticalPosition: 'top', - politeness: 'polite', - horizontalPosition: 'center', - panelClass: ['snackbar-info-style'], //see styles.scss - }; - const ref = this.snackBar.open(message, action, config); - - if (onAction) { - ref.onAction().subscribe(() => onAction()); - } - - return ref.afterDismissed(); - } - - public showError(message: string): Observable { - const config: MatSnackBarConfig = { - duration: 5000, // no auto-cancel if an action was specified - verticalPosition: 'top', - politeness: 'assertive', - horizontalPosition: 'center', - panelClass: ['snackbar-error-style'], //see styles.scss - }; - - const ref = this.snackBar.open(message, undefined, config); - return ref.afterDismissed(); - } -} diff --git a/src/app/core/services/page-title-strategy.ts b/src/app/core/services/page-title-strategy.ts deleted file mode 100644 index be687093d..000000000 --- a/src/app/core/services/page-title-strategy.ts +++ /dev/null @@ -1,42 +0,0 @@ -import {Injectable} from '@angular/core'; -import {Title} from '@angular/platform-browser'; -import { - ActivatedRouteSnapshot, - RouterStateSnapshot, - TitleStrategy, -} from '@angular/router'; -import {Subject, switchMap} from 'rxjs'; -import {TranslateService} from '@ngx-translate/core'; - -@Injectable() -export class CustomPageTitleStrategy extends TitleStrategy { - rawTitle$ = new Subject(); - - constructor( - private translateService: TranslateService, - private title: Title, - ) { - super(); - this.rawTitle$ - .pipe(switchMap((title) => this.translateService.get(title))) - .subscribe((title) => this.title.setTitle(title)); - } - - override updateTitle(snapshot: RouterStateSnapshot): void { - const data = this.getRouteDataRecursively(snapshot); - const titleUntranslated = data.title ?? 'EDC Connector'; - this.rawTitle$.next(titleUntranslated); - } - - private getRouteDataRecursively( - routerStateSnapshot: RouterStateSnapshot, - ): any { - let snapshot: ActivatedRouteSnapshot | null = routerStateSnapshot.root; - let data = {}; - while (snapshot) { - data = {...data, ...snapshot.data}; - snapshot = snapshot.firstChild; - } - return data; - } -} diff --git a/src/app/core/services/participant-id-localization.ts b/src/app/core/services/participant-id-localization.ts deleted file mode 100644 index ad0e2f313..000000000 --- a/src/app/core/services/participant-id-localization.ts +++ /dev/null @@ -1,33 +0,0 @@ -import {Inject, Injectable} from '@angular/core'; -import {TranslateService} from '@ngx-translate/core'; -import {APP_CONFIG, AppConfig} from '../config/app-config'; - -@Injectable({providedIn: 'root'}) -export class ParticipantIdLocalization { - constructor( - @Inject(APP_CONFIG) private config: AppConfig, - private translateService: TranslateService, - ) { - this.translateService - .stream([ - 'component_library.connector_id', - 'component_library.connector_id_plural', - 'component_library.participant_id', - 'component_library.participant_id_plural', - ]) - .subscribe((translations) => { - this.participantId = this.mds - ? translations['component_library.connector_id'] - : translations['component_library.participant_id']; - this.participantIdPlural = this.mds - ? translations['component_library.connector_id_plural'] - : translations['component_library.participant_id_plural']; - }); - } - private mds = this.config.features.has('mds-connector-id'); - participantId = ''; // init, will be updated by translateService - participantIdPlural = ''; - participantIdPlaceholder = this.mds - ? 'MDSL1234XX.C1234XX' - : 'other-connector-participant-id'; -} diff --git a/src/app/core/services/query-params-mapper.ts b/src/app/core/services/query-params-mapper.ts deleted file mode 100644 index 54377fbba..000000000 --- a/src/app/core/services/query-params-mapper.ts +++ /dev/null @@ -1,43 +0,0 @@ -import {Injectable} from '@angular/core'; -import {HttpDatasourceQueryParamFormValue} from '../../shared/business/edit-asset-form/form/model/http-datasource-query-param-form-model'; -import { - everythingAfter, - everythingBefore, - trimOrEmpty, -} from '../utils/string-utils'; - -@Injectable({providedIn: 'root'}) -export class QueryParamsMapper { - getBaseUrlWithoutQueryParams(rawUrl: string): string { - return everythingBefore('?', trimOrEmpty(rawUrl)); - } - - /** - * Merges query params from the base URL with the additional ones. - */ - getFullQueryString( - baseUrlWithQueryParams: string, - additionalQueryParams: HttpDatasourceQueryParamFormValue[], - ): string | null { - const queryParamSegments = additionalQueryParams.map((param) => - this.encodeQueryParam(param), - ); - - return [ - everythingAfter('?', trimOrEmpty(baseUrlWithQueryParams)), - ...queryParamSegments, - ] - .filter((it) => !!it) - .join('&'); - } - - private encodeQueryParam(param: HttpDatasourceQueryParamFormValue): string { - const k = encodeURIComponent(trimOrEmpty(param.paramName)); - const v = encodeURIComponent(trimOrEmpty(param.paramValue)); - return this.buildQueryParam(k, v); - } - - private buildQueryParam(name: string, value: string) { - return `${name}=${value}`; - } -} diff --git a/src/app/core/services/transfer-data-sink-mapper.ts b/src/app/core/services/transfer-data-sink-mapper.ts deleted file mode 100644 index 77f6f4c05..000000000 --- a/src/app/core/services/transfer-data-sink-mapper.ts +++ /dev/null @@ -1,121 +0,0 @@ -import {Injectable} from '@angular/core'; -import {ContractAgreementTransferDialogFormValue} from '../../routes/connector-ui/contract-agreement-page/contract-agreement-transfer-dialog/contract-agreement-transfer-dialog-form-model'; -import {HttpDatasourceHeaderFormValue} from '../../shared/business/edit-asset-form/form/model/http-datasource-header-form-model'; -import {getAuthFields} from '../utils/form-value-utils'; -import {mapKeys, removeNullValues} from '../utils/record-utils'; -import {DataAddressProperty} from './models/data-address-properties'; -import {HttpDataAddressParams} from './models/http-data-address-params'; -import {UiAssetMapped} from './models/ui-asset-mapped'; -import {QueryParamsMapper} from './query-params-mapper'; - -@Injectable({providedIn: 'root'}) -export class TransferDataSinkMapper { - constructor(private queryParamsMapper: QueryParamsMapper) {} - - buildHttpDataAddress( - formValue: ContractAgreementTransferDialogFormValue, - ): Record { - const params = this.buildHttpRequestParams(formValue); - return this.encodeHttpRequestParams(params); - } - - encodeHttpProxyTransferRequestProperties( - asset: UiAssetMapped, - value: ContractAgreementTransferDialogFormValue, - ): Record { - const method = value.httpProxiedMethod?.trim() ?? ''; - const pathSegments = this.queryParamsMapper.getBaseUrlWithoutQueryParams( - value.httpProxiedPath!!, - ); - const queryParams = this.queryParamsMapper.getFullQueryString( - value.httpProxiedPath!!, - value.httpProxiedQueryParams ?? [], - ); - const body = value.httpProxiedBody?.trim() || null; - const contentType = value.httpProxiedBodyContentType?.trim() || null; - - const proxyMethod = - value.showAllHttpParameterizationFields || - asset.httpDatasourceHintsProxyMethod; - const proxyPath = - value.showAllHttpParameterizationFields || - asset.httpDatasourceHintsProxyPath; - const proxyQueryParams = - value.showAllHttpParameterizationFields || - asset.httpDatasourceHintsProxyQueryParams; - const proxyBody = - value.showAllHttpParameterizationFields || - asset.httpDatasourceHintsProxyBody; - - return removeNullValues({ - [DataAddressProperty.method]: proxyMethod && method ? method : null, - [DataAddressProperty.pathSegments]: proxyPath ? pathSegments : null, - [DataAddressProperty.queryParams]: proxyQueryParams ? queryParams : null, - [DataAddressProperty.body]: proxyBody ? body : null, - [DataAddressProperty.contentType]: proxyBody ? contentType : null, - [DataAddressProperty.mediaType]: proxyBody ? contentType : null, - }); - } - - encodeHttpRequestParams( - httpRequestParams: HttpDataAddressParams, - ): Record { - const props: Record = { - [DataAddressProperty.type]: 'HttpData', - [DataAddressProperty.baseUrl]: httpRequestParams.baseUrl, - [DataAddressProperty.method]: httpRequestParams.method, - [DataAddressProperty.authKey]: httpRequestParams.authHeaderName, - [DataAddressProperty.authCode]: httpRequestParams.authHeaderValue, - [DataAddressProperty.secretName]: httpRequestParams.authHeaderSecretName, - [DataAddressProperty.queryParams]: httpRequestParams.queryParams, - ...mapKeys(httpRequestParams.headers, (k) => { - if (k.toLowerCase() === 'content-type') { - // this is required because the EDC sends the Content-Type header if and only if provided using the special field "contentType" - return DataAddressProperty.contentType; - } - return `${DataAddressProperty.header}:${k}`; - }), - }; - return removeNullValues(props); - } - - buildHttpRequestParams( - formValue: ContractAgreementTransferDialogFormValue, - ): HttpDataAddressParams { - const {authHeaderName, authHeaderValue, authHeaderSecretName} = - getAuthFields(formValue); - - let method = formValue?.httpMethod?.trim().toUpperCase() || null; - - const baseUrl = this.queryParamsMapper.getBaseUrlWithoutQueryParams( - formValue?.httpUrl!!, - ); - const queryParams = this.queryParamsMapper.getFullQueryString( - formValue?.httpUrl!!, - [], - ); - - return { - baseUrl: baseUrl!!, - method, - authHeaderName, - authHeaderValue, - authHeaderSecretName, - queryParams, - headers: this.buildHttpHeaders(formValue?.httpHeaders ?? []), - }; - } - - private buildHttpHeaders( - headers: HttpDatasourceHeaderFormValue[], - ): Record { - return Object.fromEntries( - headers - .map((header) => [ - header.headerName?.trim() || '', - header.headerValue?.trim() || '', - ]) - .filter((a) => a[0] && a[1]), - ); - } -} diff --git a/src/app/core/utils/angular-utils.ts b/src/app/core/utils/angular-utils.ts deleted file mode 100644 index f529b667c..000000000 --- a/src/app/core/utils/angular-utils.ts +++ /dev/null @@ -1,35 +0,0 @@ -import {Input, SimpleChanges} from '@angular/core'; -import {Subject} from 'rxjs'; - -/** - * A type-safe version of {@link SimpleChanges}. - * - * Does not contain all {@link Input}s, but only simple fields. - */ -export type SimpleChangesTyped< - Component extends object, - Props = ExcludeFunctions, -> = { - [Key in keyof Props]: SimpleChangeTyped; -}; - -export type SimpleChangeTyped = { - previousValue: T; - currentValue: T; - firstChange: boolean; - isFirstChange(): boolean; -}; - -type MarkFunctionPropertyNames = { - [Key in keyof Component]: Component[Key] extends Function | Subject - ? never - : Key; -}; - -type ExcludeFunctionPropertyNames = - MarkFunctionPropertyNames[keyof T]; - -type ExcludeFunctions = Pick< - T, - ExcludeFunctionPropertyNames ->; diff --git a/src/app/core/utils/array-utils.spec.ts b/src/app/core/utils/array-utils.spec.ts deleted file mode 100644 index d7d6fc6af..000000000 --- a/src/app/core/utils/array-utils.spec.ts +++ /dev/null @@ -1,13 +0,0 @@ -import {removeOnce} from './array-utils'; - -describe('array-utils', () => { - it('should work on empty list', () => { - expect(removeOnce([], 'idk')).toEqual([]); - }); - it('should remove item', () => { - expect(removeOnce([1], 1)).toEqual([]); - }); - it('should remove only single item', () => { - expect(removeOnce([1, 2, 2, 3], 2)).toEqual([1, 2, 3]); - }); -}); diff --git a/src/app/core/utils/array-utils.ts b/src/app/core/utils/array-utils.ts deleted file mode 100644 index 6cd7b33e2..000000000 --- a/src/app/core/utils/array-utils.ts +++ /dev/null @@ -1,21 +0,0 @@ -/** - * Remove item once from list. - * - * Use this over .filter(...) to remove items on user interactions - * to prevent one click from removing many items. - * - * Returns copy. - */ -export function removeOnce(list: T[], item: T): T[] { - const index = list.indexOf(item); - if (index >= 0) { - const copy = [...list]; - copy.splice(index, 1); - return copy; - } - return list; -} - -export function filterNonNull(array: (T | null | undefined)[]): T[] { - return array.filter((it) => it != null) as T[]; -} diff --git a/src/app/core/utils/date-utils.ts b/src/app/core/utils/date-utils.ts deleted file mode 100644 index e4a7a082b..000000000 --- a/src/app/core/utils/date-utils.ts +++ /dev/null @@ -1,70 +0,0 @@ -import {addDays, subDays} from 'date-fns'; -import {format} from 'date-fns-tz'; - -/** - * Takes the year/month/day information of a local date and creates a new Date object from it. - * Hour offset context is removed. - * Can be used to ensure dates are displayed identically across different timezones when stringified in JSON payloads. - * @param date date to convert - */ -export function toGmtZeroHourDate(date: Date): Date { - return new Date(format(date, 'yyyy-MM-dd')); -} - -export function isMidnightInCurrentTz(date: Date): boolean { - return format(date, 'HH:mm:ss') === '00:00:00'; -} - -/** - * Helper for dealing with the problem: - * - Our API does date comparisons based on Date + Time + TZ - * - Our UI tries to simplify it to "select full days only" - * - * Here we try to reverse the ISO UTC DateTime String to a day, while considering different TZs: - * - We accept only midnight in the local tz - * - If the date is used for an upper bound, we subtract a day - */ -export function truncateToLocalTzDay( - date: Date, - isUpperBound: boolean, -): string { - date = truncateToLocalTzDayRaw(date, isUpperBound); - - if (isMidnightInCurrentTz(date)) { - return format(date, 'dd/MM/yyyy'); - } - - // Fallback - return format(date, 'dd/MM/yyyy HH:mm:ss'); -} - -export function truncateToLocalTzDayRaw( - date: Date, - isUpperBound: boolean, -): Date { - if (isMidnightInCurrentTz(date) && isUpperBound) { - // Transform "x <= 2000-01-02 00:00:00" to "x <= 2000-01-01" - date = subDays(date, 1); - } - return date; -} - -/** - * Helper for dealing with the problem: - * - Our API does date comparisons based on Date + Time + TZ - * - Our UI tries to simplify it to "select full days only" - * - * Here we take a local tz "day" and convert it to an ISO UTC DateTime String: - * - If the date is used for an upper bound, we add a day - */ -export function localTzDayToIsoString( - date: Date, - isUpperBound: boolean, -): string { - if (isUpperBound) { - // Transform "x <= 2000-01-01" to "x <= 2000-01-02 00:00:00" - date = addDays(date, 1); - } - - return date.toISOString(); -} diff --git a/src/app/core/utils/form-group-utils.ts b/src/app/core/utils/form-group-utils.ts deleted file mode 100644 index 7a32efa62..000000000 --- a/src/app/core/utils/form-group-utils.ts +++ /dev/null @@ -1,202 +0,0 @@ -import { - AbstractControl, - FormArray, - FormControl, - FormControlStatus, - FormGroup, -} from '@angular/forms'; -import {EMPTY, Observable, concat, distinctUntilChanged} from 'rxjs'; -import {map, switchMap} from 'rxjs/operators'; - -/** - * Enables/Disables form groups controls - */ -export function switchDisabledControls( - ctrl: FormGroup, - enabledCtrlsFn: (value: T) => Record, -) { - const checkForChanges = () => { - const enabledCtrls = enabledCtrlsFn(ctrl.value); - const enabled = new Set( - Object.entries(enabledCtrls) - .filter(([_, v]) => v) - .map(([k, _]) => k as keyof T), - ); - Object.entries(ctrl.controls).forEach(([ctrlName, ctrl]) => { - const ctrlNameTyped = ctrlName as keyof T; - - const currentlyDisabled = ctrl.disabled; - const expectedDisabled = !enabled.has(ctrlNameTyped); - if (currentlyDisabled == expectedDisabled) { - return; - } - - if (expectedDisabled) { - ctrl.disable(); - } else { - ctrl.enable(); - } - }); - }; - - status$(ctrl) - .pipe( - map((status) => status != 'DISABLED'), - distinctUntilChanged(), - switchMap((enabled) => (enabled ? value$(ctrl) : EMPTY)), - ) - .subscribe(() => checkForChanges()); -} - -/** - * Enables/Disables form controls depending on selected option. - * - * Use this when a select switches entire parts of the form. - * - * Disabling the controls will disable validation. - */ -export function switchDisabledControlsByField< - T extends {[K in keyof T]: AbstractControl}, - S extends string | number | symbol, ->(opts: { - /** - * Form Group - */ - formGroup: FormGroup; - - /** - * Select / Switch Control - */ - switchCtrl: FormControl; - - /** - * Sets of fields to activate, keyed by switch value - */ - enabledControlsByValue: {[K in S]: (keyof T)[]}; -}) { - const map = new Map( - Object.entries(opts.enabledControlsByValue) as [S, (keyof T)[]][], - ); - switchDisabledControlsByField2({...opts, enabledControlsByValue: map}); -} - -/** - * Enables/Disables form controls depending on selected option. - * - * Use this when a select switches entire parts of the form. - * - * Disabling the controls will disable validation. - */ -export function switchDisabledControlsByField2< - T extends {[K in keyof T]: AbstractControl}, - S, ->(opts: { - /** - * Form Group - */ - formGroup: FormGroup; - - /** - * Select / Switch Control - */ - switchCtrl: FormControl; - - /** - * Sets of fields to activate, keyed by switch value - */ - enabledControlsByValue: Map; -}) { - const ctrl = (key: keyof T): AbstractControl => - (opts.formGroup.controls as any)[key]; - - // Collect all affected controls - const fields = [...new Set([...opts.enabledControlsByValue.values()].flat())]; - - const updateControls = () => { - // If parent form group is disabled, don't touch disabled / enabled state - if (opts.formGroup.disabled) { - return; - } - - // Enable selected controls - const keys = opts.enabledControlsByValue.get(opts.switchCtrl.value); - keys - ?.map((it) => { - return it; - }) - ?.map(ctrl) - ?.forEach((control) => { - control.enable(); - }); - - // Disable other controls - fields - .filter((it) => !keys?.includes(it)) - ?.map((it) => { - return it; - }) - .map(ctrl) - .forEach((control) => { - control.disable(); - }); - }; - - // Update now and on future value changes - value$(opts.switchCtrl).subscribe(() => updateControls()); -} - -/** - * Flatten nested Form Groups / Form Arrays into a single list of [path, control]. - * - * Method for debugging nested angular forms - * - * @param form form group (or form array) - */ -export function flattenControls( - form: FormGroup | FormArray, -): [string, AbstractControl][] { - const results: [string, AbstractControl][] = []; - - const join = (path: string, element: string) => - path ? `${path}.${element}` : `${element}`; - - const iterate = (prefix: string, fg: FormGroup | FormArray) => { - Object.entries(fg.controls).forEach(([key, ctrl]) => { - const path = join(prefix, key); - results.push([path, ctrl]); - if (ctrl instanceof FormGroup || ctrl instanceof FormArray) { - iterate(path, ctrl); - } - }); - }; - - iterate('', form); - - return results; -} - -/** - * Control's value as observable that also emits current value. - */ -export function value$(ctrl: AbstractControl): Observable { - return concat( - new Observable((obs) => { - obs.next(ctrl.value as T); - obs.complete(); - }), - ctrl.valueChanges as Observable, - ); -} - -/** - * Control's status changes as observable that also emits current status. - */ -export function status$(ctrl: AbstractControl): Observable { - return concat( - new Observable((obs) => { - obs.next(ctrl.status); - obs.complete(); - }), - ctrl.statusChanges, - ); -} diff --git a/src/app/core/utils/form-value-utils.ts b/src/app/core/utils/form-value-utils.ts deleted file mode 100644 index a67c96b7f..000000000 --- a/src/app/core/utils/form-value-utils.ts +++ /dev/null @@ -1,29 +0,0 @@ -import {ContractAgreementTransferDialogFormValue} from '../../routes/connector-ui/contract-agreement-page/contract-agreement-transfer-dialog/contract-agreement-transfer-dialog-form-model'; -import {AssetDatasourceFormValue} from '../../shared/business/edit-asset-form/form/model/asset-datasource-form-model'; - -export function getAuthFields( - formValue: - | AssetDatasourceFormValue - | ContractAgreementTransferDialogFormValue - | undefined, -): { - authHeaderName: string | null; - authHeaderValue: string | null; - authHeaderSecretName: string | null; -} { - let authHeaderName: string | null = null; - if (formValue?.httpAuthHeaderType !== 'None') { - authHeaderName = formValue?.httpAuthHeaderName?.trim() || null; - } - - let authHeaderValue: string | null = null; - if (authHeaderName && formValue?.httpAuthHeaderType === 'Value') { - authHeaderValue = formValue?.httpAuthHeaderValue?.trim() || null; - } - - let authHeaderSecretName: string | null = null; - if (authHeaderName && formValue?.httpAuthHeaderType === 'Vault-Secret') { - authHeaderSecretName = formValue?.httpAuthHeaderSecretName?.trim() || null; - } - return {authHeaderName, authHeaderValue, authHeaderSecretName}; -} diff --git a/src/app/core/utils/i18n-utils.ts b/src/app/core/utils/i18n-utils.ts deleted file mode 100644 index 6cf6899c9..000000000 --- a/src/app/core/utils/i18n-utils.ts +++ /dev/null @@ -1,12 +0,0 @@ -export interface AvailableLanguage { - code: string; - name: string; -} - -export const supportedLanguages: AvailableLanguage[] = [ - {code: 'en', name: 'English'}, - {code: 'de', name: 'Deutsch'}, -]; - -export const isLanguageSupported = (value: unknown): value is string => - supportedLanguages.map((it) => it.code).includes(value as string); diff --git a/src/app/core/utils/lazy-utils.ts b/src/app/core/utils/lazy-utils.ts deleted file mode 100644 index 12774e261..000000000 --- a/src/app/core/utils/lazy-utils.ts +++ /dev/null @@ -1,21 +0,0 @@ -import {TranslateService} from '@ngx-translate/core'; - -export class LazyTranslation { - private value: T | null = null; - private language: string | null = null; - constructor( - private translateService: TranslateService, - private generate: (translationService: TranslateService) => T, - ) {} - - getValue(): T { - if ( - this.value == null || - this.language !== this.translateService.currentLang - ) { - this.language = this.translateService.currentLang; - this.value = this.generate(this.translateService); - } - return this.value; - } -} diff --git a/src/app/core/utils/local-storage-utils.ts b/src/app/core/utils/local-storage-utils.ts deleted file mode 100644 index 0a310c4e3..000000000 --- a/src/app/core/utils/local-storage-utils.ts +++ /dev/null @@ -1,36 +0,0 @@ -export class LocalStorageUtils { - saveData(key: string, value: T) { - localStorage.setItem(key, JSON.stringify(value)); - } - - getData( - key: string, - defaultValue: T, - isValidValue: (value?: unknown) => value is T, - ): T { - const data = this.getDataUnsafe(key, defaultValue); - if (isValidValue(data)) { - return data; - } - return defaultValue; - } - - private getDataUnsafe(key: string, defaultValue: any): unknown { - const storedItem = localStorage.getItem(key); - - try { - return storedItem == null ? defaultValue : JSON.parse(storedItem); - } catch (e) { - console.warn('Error parsing local storage value', key, storedItem); - return defaultValue; - } - } - - removeData(key: string) { - localStorage.removeItem(key); - } - - clearData() { - localStorage.clear(); - } -} diff --git a/src/app/core/utils/local-stored-value.ts b/src/app/core/utils/local-stored-value.ts deleted file mode 100644 index b2d5dafa0..000000000 --- a/src/app/core/utils/local-stored-value.ts +++ /dev/null @@ -1,29 +0,0 @@ -import {LocalStorageUtils} from './local-storage-utils'; - -export class LocalStoredValue { - localStorageUtils = new LocalStorageUtils(); - cachedValue: T; - - constructor( - defaultValue: T, - private key: string, - isValidValue: (value: unknown) => value is T, - ) { - this.cachedValue = this.localStorageUtils.getData( - this.key, - defaultValue, - isValidValue, - ); - } - - get value(): T { - return this.cachedValue; - } - - set value(value: T) { - if (this.cachedValue != value) { - this.cachedValue = value; - this.localStorageUtils.saveData(this.key, value); - } - } -} diff --git a/src/app/core/utils/map-utils.ts b/src/app/core/utils/map-utils.ts deleted file mode 100644 index b7c6fde61..000000000 --- a/src/app/core/utils/map-utils.ts +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Group items by key extractor - * @param array items - * @param keyExtractor key extractor - */ -export function groupedBy( - array: T[], - keyExtractor: (it: T) => K, -): Map { - const map = new Map(); - array.forEach((it) => { - const key = keyExtractor(it); - if (!map.has(key)) { - map.set(key, []); - } - map.get(key)!.push(it); - }); - return map; -} - -/** - * Create Map with entries [keyExtractor(it), it] - * @param array items - * @param keyExtractor key extractor - */ -export function associateBy( - array: T[], - keyExtractor: (it: T) => K, -): Map { - return new Map(array.map((it) => [keyExtractor(it), it])); -} diff --git a/src/app/core/utils/mat-dialog-utils.ts b/src/app/core/utils/mat-dialog-utils.ts deleted file mode 100644 index d0451ac00..000000000 --- a/src/app/core/utils/mat-dialog-utils.ts +++ /dev/null @@ -1,28 +0,0 @@ -import {ComponentType} from '@angular/cdk/portal'; -import {MatDialog, MatDialogConfig} from '@angular/material/dialog'; -import {Observable} from 'rxjs'; - -/** - * Method for launching Angular Material Dialogs with the lifetime of the dialog being handled by a until$ observable - * - * @param dialogService MatDialog - * @param dialog ComponentType - * @param config MatDialogConfig - * @param until$ Observable that controls the lifetime of the dialog - * @template T Type of the data passed to the dialog - * @template R Type of the data returned by the dialog - * @return afterClosed Observable - */ -export function showDialogUntil( - dialogService: MatDialog, - dialog: ComponentType, - config: MatDialogConfig, - until$: Observable, -): Observable { - const ref = dialogService.open(dialog, config); - until$.subscribe({ - next: () => ref.close(), - complete: () => ref.close(), - }); - return ref.afterClosed(); -} diff --git a/src/app/core/utils/object-utils.ts b/src/app/core/utils/object-utils.ts deleted file mode 100644 index 2eb3731fe..000000000 --- a/src/app/core/utils/object-utils.ts +++ /dev/null @@ -1,33 +0,0 @@ -export type Patcher = (obj: T) => Partial; - -export function patchObj(obj: T, patcher: Patcher): T { - return {...obj, ...patcher(obj)}; -} - -/** - * Create Object with entries [keyExtractor(it), valueExtractor(it)] - * @param array items - * @param keyExtractor key extractor - * @param valueExtractor value extractor - */ -export function associateAsObj( - array: T[], - keyExtractor: (it: T) => K, - valueExtractor: (it: T) => R, -): Record { - return Object.fromEntries( - array.map((it) => [keyExtractor(it), valueExtractor(it)]), - ) as Record; -} - -export function mapObjValues( - obj: Record, - mapper: (value: T, key: K) => R, -): Record { - return Object.fromEntries( - Object.entries(obj).map(([key, value]) => [ - key, - mapper(value as T, key as K), - ]), - ) as Record; -} diff --git a/src/app/core/utils/record-utils.ts b/src/app/core/utils/record-utils.ts deleted file mode 100644 index 50865743a..000000000 --- a/src/app/core/utils/record-utils.ts +++ /dev/null @@ -1,39 +0,0 @@ -/** - * Remove fields with null values from Property Records due to EDC Backend expecting non-null values - * @param obj object / record - */ -export function removeNullValues( - obj: Record, -): Record { - return Object.fromEntries( - Object.entries(obj).filter(([_, v]) => v != null) as [string, string][], - ); -} - -/** - * Remove fields with undefined values from property records - * @param obj object / record - */ -export function removeUndefinedValues( - obj: Record, -): Record { - return Object.fromEntries( - Object.entries(obj).filter(([_, v]) => v != null) as [string, string][], - ); -} - -/** - * Maps keys of a given object - * @param obj object - * @param mapFn key mapper - * @return new object with keys mapped - */ -export function mapKeys< - K extends string | number | symbol, - L extends string | number | symbol, - V, ->(obj: Record, mapFn: (key: K) => L): Record { - return Object.fromEntries( - Object.entries(obj).map(([k, v]) => [mapFn(k as K), v]), - ) as Record; -} diff --git a/src/app/core/utils/rxjs-utils.ts b/src/app/core/utils/rxjs-utils.ts deleted file mode 100644 index 47d47339c..000000000 --- a/src/app/core/utils/rxjs-utils.ts +++ /dev/null @@ -1,24 +0,0 @@ -import {Observable, OperatorFunction, defer, from} from 'rxjs'; -import {filter, tap} from 'rxjs/operators'; - -/** - * Simple not null filtering RXJS Operator. - * - * The trick is that it removes the "null | undefined" from the resulting stream type signature. - */ -export function filterNotNull(): OperatorFunction { - return filter((it) => it != null) as any; -} - -export function throwIfNull( - msg: string, -): OperatorFunction { - return tap((it) => { - if (it == null) { - throw new Error(msg); - } - }) as OperatorFunction; -} - -export const toObservable = (fn: () => Promise): Observable => - defer(() => from(fn())); diff --git a/src/app/core/utils/search-utils.ts b/src/app/core/utils/search-utils.ts deleted file mode 100644 index 2964cf796..000000000 --- a/src/app/core/utils/search-utils.ts +++ /dev/null @@ -1,34 +0,0 @@ -import {UiAssetMapped} from '../services/models/ui-asset-mapped'; - -/** - * Simple search that tries to find all search query words in target strings of given items - * @param items item list - * @param query search query - * @param targetsFn search targets - */ -export function search( - items: T[], - query: string | null, - targetsFn: (item: T) => (string | null)[], -): T[] { - const words = (query ?? '') - .toLowerCase() - .split(' ') - .map((it) => it.trim()) - .filter((it) => it); - - return items.filter((item) => { - const targets = targetsFn(item) - .map((it) => it?.toLowerCase()) - .filter((it) => it) as string[]; - return words.every((word) => targets.some((value) => value.includes(word))); - }); -} - -/** - * Common code for searching assets - * @param asset - */ -export function assetSearchTargets(asset: UiAssetMapped): (string | null)[] { - return [asset.assetId, asset.title, ...(asset.keywords ?? [])]; -} diff --git a/src/app/core/utils/set-utils.ts b/src/app/core/utils/set-utils.ts deleted file mode 100644 index 750a9d5b3..000000000 --- a/src/app/core/utils/set-utils.ts +++ /dev/null @@ -1,3 +0,0 @@ -export function difference(a: Set, b: Set): Set { - return new Set([...a].filter((x) => !b.has(x))); -} diff --git a/src/app/core/utils/string-utils.ts b/src/app/core/utils/string-utils.ts deleted file mode 100644 index 2f41b10ce..000000000 --- a/src/app/core/utils/string-utils.ts +++ /dev/null @@ -1,17 +0,0 @@ -export function trimOrEmpty(s: string | null | undefined): string { - return s?.trim() ?? ''; -} - -export function everythingBefore(separator: string, s: string): string { - const index = s.indexOf(separator); - return index === -1 ? s : s.substring(0, index); -} - -export function everythingAfter(separator: string, s: string): string { - const index = s.indexOf(separator); - return index === -1 ? '' : s.substring(index + separator.length); -} - -export function capitalize(s: string) { - return s.charAt(0).toUpperCase() + s.slice(1); -} diff --git a/src/app/core/utils/type-utils.ts b/src/app/core/utils/type-utils.ts deleted file mode 100644 index 1ff506af6..000000000 --- a/src/app/core/utils/type-utils.ts +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Similar to "keyof T" but now you can say "KeysOfType". - */ -export type KeysOfType = { - [K in keyof O]: O[K] extends T ? K : never; -}[keyof O]; - -export function isValueOfEnum( - enumObj: {[key in keyof T]: T[key]}, - value: any, -): value is T[keyof T] { - return Object.values(enumObj).includes(value); -} diff --git a/src/app/core/validators/data-offer-form-validators.ts b/src/app/core/validators/data-offer-form-validators.ts deleted file mode 100644 index eba7ccb6e..000000000 --- a/src/app/core/validators/data-offer-form-validators.ts +++ /dev/null @@ -1,58 +0,0 @@ -import {Injectable} from '@angular/core'; -import {AbstractControl, ValidationErrors, ValidatorFn} from '@angular/forms'; -import {Observable, of} from 'rxjs'; -import {catchError, map} from 'rxjs/operators'; -import {IdAvailabilityResponse} from '@sovity.de/edc-client'; -import {EdcApiService} from '../services/api/edc-api.service'; - -@Injectable({ - providedIn: 'root', -}) -export class DataOfferFormValidators { - constructor(private edcApiService: EdcApiService) {} - - policyIdExistsValidator: ValidatorFn = ( - control: AbstractControl, - ): Observable => { - const value = control.value; - if (value) { - return this.edcApiService.isPolicyIdAvailable(value).pipe( - catchError(() => - of({id: value, available: false}), - ), - map((it) => (it.available ? null : {idAlreadyExists: true})), - ); - } - return of(null); - }; - - contractDefinitionIdExistsValidator: ValidatorFn = ( - control: AbstractControl, - ): Observable => { - const value = control.value; - if (value) { - return this.edcApiService.isContractDefinitionIdAvailable(value).pipe( - catchError(() => - of({id: value, available: false}), - ), - map((it) => (it.available ? null : {idAlreadyExists: true})), - ); - } - return of(null); - }; - - assetIdExistsValidator: ValidatorFn = ( - control: AbstractControl, - ): Observable => { - const value = control.value; - if (value) { - return this.edcApiService.isAssetIdAvailable(value).pipe( - catchError(() => - of({id: value, available: false}), - ), - map((it) => (it.available ? null : {idAlreadyExists: true})), - ); - } - return of(null); - }; -} diff --git a/src/app/core/validators/json-validator.ts b/src/app/core/validators/json-validator.ts deleted file mode 100644 index 023d2acaf..000000000 --- a/src/app/core/validators/json-validator.ts +++ /dev/null @@ -1,19 +0,0 @@ -import {AbstractControl, ValidationErrors, ValidatorFn} from '@angular/forms'; - -/** - * Validates whether control's value is valid JSON. - * @param control control - */ -export const jsonValidator: ValidatorFn = ( - control: AbstractControl, -): ValidationErrors | null => { - const value = control.value; - if (value) { - try { - JSON.parse(value); - } catch (e) { - return {jsonInvalid: true}; - } - } - return null; -}; diff --git a/src/app/core/validators/no-whitespaces-or-colons-validator.ts b/src/app/core/validators/no-whitespaces-or-colons-validator.ts deleted file mode 100644 index 24e814dfb..000000000 --- a/src/app/core/validators/no-whitespaces-or-colons-validator.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {ValidatorFn, Validators} from '@angular/forms'; - -/** - * Validates whether value contains whitespaces - * @param control control - */ -export const noWhitespacesOrColonsValidator: ValidatorFn = - Validators.pattern(/^[^\s:]*$/); diff --git a/src/app/core/validators/url-validator.ts b/src/app/core/validators/url-validator.ts deleted file mode 100644 index 3c4812b4f..000000000 --- a/src/app/core/validators/url-validator.ts +++ /dev/null @@ -1,19 +0,0 @@ -import {AbstractControl, ValidationErrors, ValidatorFn} from '@angular/forms'; - -export const validUrlPattern = /^(http|https):\/\/[^ "]+$/; - -/** - * Validates whether control's value is a valid URL. - * @param control control - */ -export const urlValidator: ValidatorFn = ( - control: AbstractControl, -): ValidationErrors | null => { - const value: string = control.value; - - if (!value?.length || validUrlPattern.test(value)) { - return null; - } - - return {url: true}; -}; diff --git a/src/app/core/validators/valid-date-range-optional-end.ts b/src/app/core/validators/valid-date-range-optional-end.ts deleted file mode 100644 index fb44c209c..000000000 --- a/src/app/core/validators/valid-date-range-optional-end.ts +++ /dev/null @@ -1,22 +0,0 @@ -import {AbstractControl, ValidationErrors, ValidatorFn} from '@angular/forms'; -import {DateRange} from '@angular/material/datepicker'; - -export const validDateRangeOptionalEnd: ValidatorFn = ( - control: AbstractControl, -): ValidationErrors | null => { - const value: DateRange = control.value; - if (!value?.start || (value?.end && value.start > value.end)) { - return {required: true}; - } - return null; -}; - -export const validDateRange: ValidatorFn = ( - control: AbstractControl, -): ValidationErrors | null => { - const value: DateRange = control.value; - if (!value?.start || !value?.end || value.start > value.end) { - return {required: true}; - } - return null; -}; diff --git a/src/app/core/validators/valid-optional-date-range.ts b/src/app/core/validators/valid-optional-date-range.ts deleted file mode 100644 index 7f03c787d..000000000 --- a/src/app/core/validators/valid-optional-date-range.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {AbstractControl, ValidationErrors, ValidatorFn} from '@angular/forms'; -import {DateRange} from '@angular/material/datepicker'; - -/** - * Validates end date is set after start date but does not require any dates to be set. - * @param control control - */ -export const validOptionalDateRange: ValidatorFn = ( - control: AbstractControl, -): ValidationErrors | null => { - const value: DateRange = control.value; - if (value?.start && value?.end && value.start > value.end) { - return {required: true}; - } - return null; -}; diff --git a/src/app/core/validators/valid-query-param.ts b/src/app/core/validators/valid-query-param.ts deleted file mode 100644 index 3eea2a134..000000000 --- a/src/app/core/validators/valid-query-param.ts +++ /dev/null @@ -1,18 +0,0 @@ -import {AbstractControl, ValidationErrors, ValidatorFn} from '@angular/forms'; - -/** - * Validates that param string does not contain "=" or "&" characters - * Temporary solution until EDC double encoding issue is resolved - * See https://github.com/sovity/edc-extensions/issues/582 - * @param control control - */ -export const validQueryParam: ValidatorFn = ( - control: AbstractControl, -): ValidationErrors | null => { - const value: string = control.value; - if (value?.includes('=') || value?.includes('&')) { - return {invalidQueryParam: true}; - } - - return null; -}; diff --git a/src/app/core/validators/validation-messages.ts b/src/app/core/validators/validation-messages.ts deleted file mode 100644 index 1fa70a3df..000000000 --- a/src/app/core/validators/validation-messages.ts +++ /dev/null @@ -1,14 +0,0 @@ -import {Injectable} from '@angular/core'; - -@Injectable({providedIn: 'root'}) -export class ValidationMessages { - invalidEmailMessage = 'Must be a valid E-Mail address.'; - invalidUrlMessage = 'Must be valid URL, e.g. https://example.com'; - invalidJsonMessage = 'Must be valid JSON'; - invalidWhitespacesOrColonsMessage = 'Must not contain whitespaces or colons.'; - invalidPrefix = (field: string, prefix: string): string => - `${field} must start with "${prefix}".`; - invalidDateRangeMessage = 'Need valid date range.'; - idExistsErrorMessage = 'ID already exists.'; - invalidQueryParam = "Must not contain '=' or '&' characters."; -} diff --git a/src/app/routes/connector-ui/asset-edit-page/asset-edit-page.module.ts b/src/app/routes/connector-ui/asset-edit-page/asset-edit-page.module.ts deleted file mode 100644 index 39a28a6a9..000000000 --- a/src/app/routes/connector-ui/asset-edit-page/asset-edit-page.module.ts +++ /dev/null @@ -1,20 +0,0 @@ -import {CommonModule} from '@angular/common'; -import {NgModule} from '@angular/core'; -import {RouterModule} from '@angular/router'; -import {SharedModule} from '../../../shared/shared.module'; -import {AssetEditPageComponent} from './asset-edit-page/asset-edit-page.component'; - -@NgModule({ - imports: [ - // Angular - CommonModule, - RouterModule, - - // EDC UI Modules - SharedModule, - ], - declarations: [AssetEditPageComponent], - exports: [AssetEditPageComponent], - providers: [], -}) -export class AssetEditPageModule {} diff --git a/src/app/routes/connector-ui/asset-edit-page/asset-edit-page/asset-edit-page.component.html b/src/app/routes/connector-ui/asset-edit-page/asset-edit-page/asset-edit-page.component.html deleted file mode 100644 index 8ca26da4c..000000000 --- a/src/app/routes/connector-ui/asset-edit-page/asset-edit-page/asset-edit-page.component.html +++ /dev/null @@ -1,15 +0,0 @@ -
-
- - -
- -
diff --git a/src/app/routes/connector-ui/asset-edit-page/asset-edit-page/asset-edit-page.component.ts b/src/app/routes/connector-ui/asset-edit-page/asset-edit-page/asset-edit-page.component.ts deleted file mode 100644 index a8a944d04..000000000 --- a/src/app/routes/connector-ui/asset-edit-page/asset-edit-page/asset-edit-page.component.ts +++ /dev/null @@ -1,162 +0,0 @@ -import {Component, OnInit} from '@angular/core'; -import {ActivatedRoute, Router} from '@angular/router'; -import {EMPTY, Observable, catchError, finalize, tap} from 'rxjs'; -import { - DataOfferCreationRequestPolicyEnum, - IdResponseDto, - UiAssetEditRequest, -} from '@sovity.de/edc-client'; -import {EdcApiService} from 'src/app/core/services/api/edc-api.service'; -import {AssetRequestBuilder} from 'src/app/core/services/asset-request-builder'; -import {AssetService} from 'src/app/core/services/asset.service'; -import {Fetched} from 'src/app/core/services/models/fetched'; -import {UiAssetMapped} from 'src/app/core/services/models/ui-asset-mapped'; -import {NotificationService} from 'src/app/core/services/notification.service'; -import {editAssetFormRequiredViewProviders} from '../../../../shared/business/edit-asset-form/edit-asset-form-required-providers'; -import {EditAssetForm} from '../../../../shared/business/edit-asset-form/form/edit-asset-form'; -import {EditAssetFormInitializer} from '../../../../shared/business/edit-asset-form/form/edit-asset-form-initializer'; -import {EditAssetFormValue} from '../../../../shared/business/edit-asset-form/form/model/edit-asset-form-model'; -import {ExpressionFormHandler} from '../../../../shared/business/policy-editor/editor/expression-form-handler'; - -@Component({ - selector: 'asset-edit-page', - templateUrl: './asset-edit-page.component.html', - providers: [EditAssetFormInitializer, AssetRequestBuilder], - viewProviders: editAssetFormRequiredViewProviders, -}) -export class AssetEditPageComponent implements OnInit { - asset: Fetched = new Fetched( - 'loading', - undefined, - undefined, - ); - isLoading = false; - - constructor( - private editAssetFormInitializer: EditAssetFormInitializer, - private form: EditAssetForm, - private assetRequestBuilder: AssetRequestBuilder, - private edcApiService: EdcApiService, - private assetServiceMapped: AssetService, - private notificationService: NotificationService, - private router: Router, - private route: ActivatedRoute, - private expressionFormHandler: ExpressionFormHandler, - ) {} - - ngOnInit(): void { - this.route.params.subscribe((params) => { - if (params.id) { - this.assetServiceMapped - .fetchAssets() - .pipe( - Fetched.wrap({ - failureMessage: 'Failed fetching asset list.', - }), - ) - .pipe( - Fetched.map((assets): UiAssetMapped | undefined => - assets.find((asset) => asset.assetId === params.id), - ), - ) - .subscribe((asset) => { - this.asset = asset; - - if (asset.isReady) { - this.form.reset( - this.editAssetFormInitializer.forEdit(asset.data!), - ); - } - }); - } else { - this.form.reset(this.editAssetFormInitializer.forCreate()); - this.asset.state = 'ready'; - } - }); - } - - onSubmit() { - const formValue = this.form.value; - - // Workaround around disabled controls not being included in the form value - if (formValue.mode !== 'CREATE') { - formValue.general!.id = this.form.general.controls.id.getRawValue(); - } - - this.form.all.disable(); - this.isLoading = true; - - this._saveRequest(formValue) - .pipe( - tap(() => { - this.notificationService.showInfo('Successfully saved asset'); - }), - catchError((error) => { - console.error('Failed saving asset!', error); - this.notificationService.showError('Failed saving asset!'); - this.form.all.enable(); - return EMPTY; - }), - finalize(() => { - this.isLoading = false; - }), - ) - .subscribe(() => this.router.navigate(['my-assets'])); - } - - private _saveRequest( - formValue: EditAssetFormValue, - ): Observable { - const assetId = formValue.general!.id!; - const mode = this.form.mode; - const publishMode = formValue.publishMode!; - - if (mode === 'CREATE') { - const assetCreateRequest = - this.assetRequestBuilder.buildAssetCreateRequest(formValue); - - if (publishMode === 'PUBLISH_UNRESTRICTED') { - return this.edcApiService.createDataOffer({ - dataOfferCreationRequest: { - uiAssetCreateRequest: assetCreateRequest, - policy: DataOfferCreationRequestPolicyEnum.PublishUnrestricted, - uiPolicyExpression: - this.expressionFormHandler.toUiPolicyExpression(), - }, - }); - } else if (publishMode === 'PUBLISH_RESTRICTED') { - return this.edcApiService.createDataOffer({ - dataOfferCreationRequest: { - uiAssetCreateRequest: assetCreateRequest, - policy: DataOfferCreationRequestPolicyEnum.PublishRestricted, - uiPolicyExpression: - this.expressionFormHandler.toUiPolicyExpression(), - }, - }); - } else { - return this.edcApiService.createDataOffer({ - dataOfferCreationRequest: { - uiAssetCreateRequest: assetCreateRequest, - policy: DataOfferCreationRequestPolicyEnum.DontPublish, - }, - }); - } - } - - if (mode === 'EDIT') { - const asset = this.asset.data; - - const editRequest: UiAssetEditRequest = { - ...this.assetRequestBuilder.buildAssetEditRequest(formValue), - customJsonAsString: asset?.customJsonAsString, - customJsonLdAsString: asset?.customJsonLdAsString, - privateCustomJsonAsString: asset?.privateCustomJsonAsString, - privateCustomJsonLdAsString: asset?.privateCustomJsonLdAsString, - }; - - return this.edcApiService.editAsset(assetId, editRequest); - } - - throw new Error(`Unsupported mode: ${mode}`); - } -} diff --git a/src/app/routes/connector-ui/asset-list-page/asset-cards/asset-cards.component.html b/src/app/routes/connector-ui/asset-list-page/asset-cards/asset-cards.component.html deleted file mode 100644 index f2d8d9f37..000000000 --- a/src/app/routes/connector-ui/asset-list-page/asset-cards/asset-cards.component.html +++ /dev/null @@ -1,27 +0,0 @@ - - - {{ - asset.dataSourceAvailability === 'LIVE' ? 'upload' : 'contact_page' - }} - - - {{ asset.title }} - - - {{ asset.creatorOrganizationName }} - - - - - - - - - diff --git a/src/app/routes/connector-ui/asset-list-page/asset-cards/asset-cards.component.ts b/src/app/routes/connector-ui/asset-list-page/asset-cards/asset-cards.component.ts deleted file mode 100644 index 705e5cb8f..000000000 --- a/src/app/routes/connector-ui/asset-list-page/asset-cards/asset-cards.component.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { - Component, - EventEmitter, - HostBinding, - Input, - Output, -} from '@angular/core'; -import {UiAssetMapped} from '../../../../core/services/models/ui-asset-mapped'; - -@Component({ - selector: 'asset-cards', - templateUrl: './asset-cards.component.html', -}) -export class AssetCardsComponent { - @HostBinding('class.flex') - @HostBinding('class.flex-wrap') - @HostBinding('class.gap-[10px]') - cls = true; - - @Input() - assets: UiAssetMapped[] = []; - - @Output() - assetClick = new EventEmitter(); -} diff --git a/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/asset-create-dialog-data.ts b/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/asset-create-dialog-data.ts deleted file mode 100644 index fac8c22aa..000000000 --- a/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/asset-create-dialog-data.ts +++ /dev/null @@ -1,5 +0,0 @@ -import {AssetCreateDialogFormValue} from './form/model/asset-create-dialog-form-model'; - -export interface AssetCreateDialogData { - initialFormValue: AssetCreateDialogFormValue; -} diff --git a/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/asset-create-dialog-mode.ts b/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/asset-create-dialog-mode.ts deleted file mode 100644 index f5b88fb2a..000000000 --- a/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/asset-create-dialog-mode.ts +++ /dev/null @@ -1 +0,0 @@ -export type AssetCreateDialogMode = 'CREATE' | 'EDIT'; diff --git a/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/asset-create-dialog-result.ts b/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/asset-create-dialog-result.ts deleted file mode 100644 index acfc47fff..000000000 --- a/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/asset-create-dialog-result.ts +++ /dev/null @@ -1,13 +0,0 @@ -import {UiAssetMapped} from '../../../../core/services/models/ui-asset-mapped'; - -export interface AssetCreateDialogResult { - /** - * Updated asset list for the asset page - */ - refreshedList: UiAssetMapped[]; - - /** - * The updated / created asset - */ - asset: UiAssetMapped; -} diff --git a/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/asset-create-dialog.component.html b/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/asset-create-dialog.component.html deleted file mode 100644 index 67a141917..000000000 --- a/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/asset-create-dialog.component.html +++ /dev/null @@ -1,1081 +0,0 @@ -

- {{ 'asset_list_page.create_asset' | translate }} -

- - - - -
- {{ - 'create_data_offer_page.general_information' | translate - }} -
-
- - - {{ 'general.title' | translate }} - - - - - - - {{ - 'create_data_offer_page.version' | translate - }} - - - -
- - - - {{ - 'create_data_offer_page.asset_id' | translate - }} - - - - {{ validationMessages.invalidWhitespacesOrColonsMessage }} - - - {{ validationMessages.invalidPrefix('ID', 'urn:artifact') }} - - - {{ validationMessages.idExistsErrorMessage }} - - - - - - - {{ - 'create_data_offer_page.description' | translate - }} - - - {{ 'create_data_offer_page.description_supports' | translate }} - Markdown syntax - - - -
- - - - - - - -
- - - {{ - 'create_data_offer_page.content_type' | translate - }} - - - {{ 'create_asset.content_type_hint' | translate }} - common types - - -
- - - - {{ - 'create_data_offer_page.endpoint_documentation' | translate - }} - - - - {{ validationMessages.invalidUrlMessage }} - - - -
- - - {{ - 'create_data_offer_page.publisher' | translate - }} - - - - {{ validationMessages.invalidUrlMessage }} - - - - - - {{ - 'create_data_offer_page.standard_license_label' | translate - }} - - - - {{ validationMessages.invalidUrlMessage }} - - -
-
-
-
- - -
- {{ - 'general.ad_inf' | translate - }} -
-
- - - - - -
- - - - {{ - 'create_data_offer_page.data_model' | translate - }} - - - - -
- - - - - - {{ - 'create_data_offer_page.geo_reference_method' | translate - }} - - - -
- - - - {{ - 'create_data_offer_page.sovereign_label' | translate - }} - - - - - -
- - {{ - 'create_data_offer_page.data_update_frequency_label' | translate - }} - - - - - - - {{ - 'create_data_offer_page.geo_location_label' | translate - }} - - - -
- - -
-
- {{ 'create_data_offer_page.nuts_locations_label' | translate }} -
- -
-
- - {{ - 'create_data_offer_page.nuts_location' | translate - }} - - - - -
- -
- -
- - -
-
- {{ 'create_data_offer_page.data_samples' | translate }} -
- -
-
- - URL - - - - -
- -
- -
- - -
-
- {{ 'create_data_offer_page.reference_files' | translate }} -
- - -
-
- - URL - - - - -
- -
- -
- - - - {{ - 'create_data_offer_page.reference_files_description_label' - | translate - }} - - {{ - 'create_data_offer_page.reference_files_description' | translate - }} - - Markdown syntax - - - - - - {{ - 'create_data_offer_page.temporal_coverage' | translate - }} - - - - - {{ 'create_data_offer_page.temporal_coverage_hint' | translate }} - - - - {{ validationMessages.invalidDateRangeMessage }} - - - - - - {{ - 'create_data_offer_page.conditions_for_use_label' | translate - }} - - {{ - 'create_data_offer_page.conditions_for_use_description_hint' - | translate - }} - Markdown syntax - - -
-
-
- - -
- {{ - 'create_data_offer_page.datasource_information' | translate - }} -
- {{ 'create_data_offer_page.datasource' | translate }} -
-
- - - - - - {{ - 'create_data_offer_page.custom_datasource_config_json_label' - | translate - }} - - - {{ validationMessages.invalidJsonMessage }} - - - - - - - - - {{ - 'create_data_offer_page.contact_email' | translate - }} - - - - {{ validationMessages.invalidEmailMessage }} - - - - - - - {{ - 'create_data_offer_page.email_subject' | translate - }} - - - - - - - -
- {{ 'general.method' | translate }} -
- -
- {{ 'create_data_offer_page.custom_http_method_hint' | translate }} -
- - - - - - {{ form.proxyMethod ? 'Default' : '' }} - {{ 'general.method' | translate }} - - - {{ method }} - - - - - - -
- -
- -
URL
- -
- {{ - 'create_data_offer_page.custom_http_subpath_hint' | translate - }} -
- - - - URL - Base URL - - - {{ validationMessages.invalidUrlMessage }} - - - - -
- -
- -
- {{ form.proxyQueryParams ? 'Default' : '' }} - {{ 'create_data_offer_page.query_params' | translate }} -
- -
- - - {{ - 'create_data_offer_page.query_param_name' | translate - }} - - {{ header.errors }} - {{ validationMessages.invalidQueryParam }} - - - - - - {{ 'general.value' | translate }} - - {{ validationMessages.invalidQueryParam }} - - - - - -
- -
- {{ 'asset_list_page.default_query' | translate }} -
- -
- - - - - -
- -
- {{ 'create_data_offer_page.request_body' | translate }} -
- -
- {{ 'create_data_offer_page.request_body_hint' | translate }} -
- - -
- -
- -
- {{ 'general.auth' | translate }} -
- - -
- -
- - - - {{ 'general.type' | translate }} - - - {{ - 'create_data_offer_page.header_with_vault_secret' - | translate - }} - - {{ - 'create_data_offer_page.header_with_value' | translate - }} - - -
- - - {{ - 'create_data_offer_page.auth_header_name' | translate - }} - - - - - - {{ 'general.auth_value' | translate }} - - - - - - {{ - 'create_data_offer_page.vault_secret_name' | translate - }} - - -
- - -
- -
- -
- {{ 'create_data_offer_page.additional_headers' | translate }} -
- -
- - - {{ 'general.header_name' | translate }} - - - - - - {{ 'general.header_value' | translate }} - - - - - -
- - -
- -
-
-
-
-
-
-
- - - - - - diff --git a/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/asset-create-dialog.component.ts b/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/asset-create-dialog.component.ts deleted file mode 100644 index 4af0aa3a8..000000000 --- a/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/asset-create-dialog.component.ts +++ /dev/null @@ -1,107 +0,0 @@ -import {Component, Inject, OnDestroy} from '@angular/core'; -import {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog'; -import {EMPTY, Observable, Subject, switchMap} from 'rxjs'; -import {catchError, finalize, map, takeUntil, tap} from 'rxjs/operators'; -import {IdResponseDto} from '@sovity.de/edc-client'; -import {EdcApiService} from '../../../../core/services/api/edc-api.service'; -import {AssetRequestBuilderLegacy} from '../../../../core/services/asset-request-builder-legacy'; -import {AssetService} from '../../../../core/services/asset.service'; -import {NotificationService} from '../../../../core/services/notification.service'; -import {ValidationMessages} from '../../../../core/validators/validation-messages'; -import {AssetCreateDialogData} from './asset-create-dialog-data'; -import {AssetCreateDialogResult} from './asset-create-dialog-result'; -import {AssetAdvancedFormBuilder} from './form/asset-advanced-form-builder'; -import {AssetCreateDialogForm} from './form/asset-create-dialog-form'; -import {AssetDatasourceFormBuilder} from './form/asset-datasource-form-builder'; -import {AssetMetadataFormBuilder} from './form/asset-metadata-form-builder'; -import {DATA_SOURCE_HTTP_METHODS} from './form/http-methods'; -import {AssetCreateDialogFormValue} from './form/model/asset-create-dialog-form-model'; - -@Component({ - selector: 'asset-create-dialog', - templateUrl: './asset-create-dialog.component.html', - providers: [ - AssetAdvancedFormBuilder, - AssetDatasourceFormBuilder, - AssetCreateDialogForm, - AssetRequestBuilderLegacy, - AssetMetadataFormBuilder, - ], -}) -export class AssetCreateDialogComponent implements OnDestroy { - loading = false; - - methods = DATA_SOURCE_HTTP_METHODS; - - constructor( - private edcApiService: EdcApiService, - private assetService: AssetService, - public form: AssetCreateDialogForm, - public validationMessages: ValidationMessages, - private assetEntryBuilder: AssetRequestBuilderLegacy, - private notificationService: NotificationService, - private dialogRef: MatDialogRef, - @Inject(MAT_DIALOG_DATA) private data: AssetCreateDialogData, - ) { - this.form.reset(this.data.initialFormValue); - } - - onSave() { - const formValue = this.form.value; - - this.form.all.disable(); - this.loading = true; - this._saveRequest(formValue) - .pipe( - // Save Asset - takeUntil(this.ngOnDestroy$), - tap(() => { - this.notificationService.showInfo('Successfully saved asset'); - }), - catchError((error) => { - console.error('Failed saving asset!', error); - this.notificationService.showError('Failed saving asset!'); - this.form.all.enable(); - return EMPTY; - }), - switchMap(() => this.assetService.fetchAssets()), - map( - (assets): AssetCreateDialogResult => ({ - refreshedList: assets, - asset: assets?.find( - (it) => it.assetId === this.form.value.metadata?.id, - )!, - }), - ), - finalize(() => { - this.loading = false; - }), - ) - .subscribe({ - next: (result: AssetCreateDialogResult) => this.close(result), - error: (error) => { - console.error('Failed refreshing asset list!', error); - this.notificationService.showError('Failed refreshing asset list!'); - }, - }); - } - - private _saveRequest( - formValue: AssetCreateDialogFormValue, - ): Observable { - const createRequest = - this.assetEntryBuilder.buildAssetCreateRequestLegacy(formValue); - return this.edcApiService.createAsset(createRequest); - } - - private close(params: AssetCreateDialogResult) { - this.dialogRef.close(params); - } - - ngOnDestroy$ = new Subject(); - - ngOnDestroy(): void { - this.ngOnDestroy$.next(null); - this.ngOnDestroy$.complete(); - } -} diff --git a/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/asset-create-dialog.service.ts b/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/asset-create-dialog.service.ts deleted file mode 100644 index aa35307d8..000000000 --- a/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/asset-create-dialog.service.ts +++ /dev/null @@ -1,35 +0,0 @@ -import {Injectable} from '@angular/core'; -import {MatDialog} from '@angular/material/dialog'; -import {NEVER, Observable} from 'rxjs'; -import {showDialogUntil} from '../../../../core/utils/mat-dialog-utils'; -import {AssetCreateDialogData} from './asset-create-dialog-data'; -import {AssetCreateDialogResult} from './asset-create-dialog-result'; -import {AssetCreateDialogComponent} from './asset-create-dialog.component'; -import {AssetCreateDialogFormMapper} from './form/asset-create-dialog-form-mapper'; - -@Injectable() -export class AssetCreateDialogService { - constructor( - private dialog: MatDialog, - private assetCreateDialogFormMapper: AssetCreateDialogFormMapper, - ) {} - - showCreateDialog( - until$: Observable = NEVER, - ): Observable { - const initialFormValue = this.assetCreateDialogFormMapper.forCreate(); - return this._open({initialFormValue}, until$); - } - - private _open( - data: AssetCreateDialogData, - until$: Observable, - ): Observable { - return showDialogUntil( - this.dialog, - AssetCreateDialogComponent, - {data}, - until$, - ); - } -} diff --git a/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/assets-id-validator-builder.ts b/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/assets-id-validator-builder.ts deleted file mode 100644 index bfef34c99..000000000 --- a/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/assets-id-validator-builder.ts +++ /dev/null @@ -1,35 +0,0 @@ -import {Injectable} from '@angular/core'; -import { - AbstractControl, - AsyncValidatorFn, - ValidationErrors, -} from '@angular/forms'; -import {Observable} from 'rxjs'; -import {map} from 'rxjs/operators'; -import {AssetService} from '../../../../core/services/asset.service'; - -@Injectable({ - providedIn: 'root', -}) -export class AssetsIdValidatorBuilder { - constructor(private assetServiceMapped: AssetService) {} - - assetIdDoesNotExistsValidator(): AsyncValidatorFn { - return (control: AbstractControl): Observable => { - return this.fetchAssetIds().pipe( - map((assetIds) => { - if (assetIds.has(control.value)) { - return {idAlreadyExists: true}; - } - return null; - }), - ); - }; - } - - private fetchAssetIds(): Observable> { - return this.assetServiceMapped - .fetchAssets() - .pipe(map((assets) => new Set(assets.map((asset) => asset.assetId)))); - } -} diff --git a/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/asset-advanced-form-builder.ts b/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/asset-advanced-form-builder.ts deleted file mode 100644 index a3ae32035..000000000 --- a/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/asset-advanced-form-builder.ts +++ /dev/null @@ -1,55 +0,0 @@ -import {Injectable} from '@angular/core'; -import {FormBuilder, FormControl, FormGroup, Validators} from '@angular/forms'; -import {urlValidator} from 'src/app/core/validators/url-validator'; -import {validOptionalDateRange} from 'src/app/core/validators/valid-optional-date-range'; -import {AssetAdvancedFormModel} from './model/asset-advanced-form-model'; -import {AssetCreateDialogFormValue} from './model/asset-create-dialog-form-model'; - -@Injectable() -export class AssetAdvancedFormBuilder { - constructor(private formBuilder: FormBuilder) {} - - buildFormGroup( - initial: AssetCreateDialogFormValue['advanced'], - ): FormGroup { - return this.formBuilder.nonNullable.group({ - dataModel: initial?.dataModel!, - dataCategory: [initial?.dataCategory || null, Validators.required], - dataSubcategory: initial?.dataSubcategory || null, - transportMode: initial?.transportMode || null, - geoReferenceMethod: initial?.geoReferenceMethod!, - sovereignLegalName: initial?.sovereignLegalName!, - geoLocation: initial?.geoLocation!, - nutsLocations: this.formBuilder.nonNullable.array( - initial?.nutsLocations?.map((x) => this.buildRequiredString(x)) ?? [], - ), - dataSampleUrls: this.formBuilder.array( - initial?.dataSampleUrls?.map((x) => this.buildRequiredUrl(x)) ?? [], - ), - referenceFileUrls: this.formBuilder.nonNullable.array( - initial?.referenceFileUrls?.map((x) => this.buildRequiredUrl(x)) ?? [], - ), - referenceFilesDescription: initial?.referenceFilesDescription!, - conditionsForUse: initial?.conditionsForUse!, - dataUpdateFrequency: initial?.dataUpdateFrequency!, - temporalCoverage: this.formBuilder.group( - { - from: initial?.temporalCoverage?.from || null, - toInclusive: initial?.temporalCoverage?.toInclusive || null, - }, - {validators: validOptionalDateRange}, - ), - }); - } - - buildRequiredString(initial: string): FormControl { - return this.formBuilder.nonNullable.control(initial, Validators.required); - } - - buildRequiredUrl(initial: string): FormControl { - return this.formBuilder.nonNullable.control(initial, [ - Validators.required, - urlValidator, - ]); - } -} diff --git a/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/asset-create-dialog-form-mapper.ts b/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/asset-create-dialog-form-mapper.ts deleted file mode 100644 index 8ed74aa76..000000000 --- a/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/asset-create-dialog-form-mapper.ts +++ /dev/null @@ -1,60 +0,0 @@ -import {Injectable} from '@angular/core'; -import {LanguageSelectItemService} from '../../../../../shared/form-elements/language-select/language-select-item.service'; -import {AssetCreateDialogFormValue} from './model/asset-create-dialog-form-model'; -import {AssetDatasourceFormValue} from './model/asset-datasource-form-model'; - -/** - * Handles AngularForms for AssetCreateDialog - */ -@Injectable() -export class AssetCreateDialogFormMapper { - constructor(private languageSelectItemService: LanguageSelectItemService) {} - - forCreate(): AssetCreateDialogFormValue { - return { - metadata: { - id: '', - title: '', - version: '', - contentType: '', - description: '', - keywords: [], - language: this.languageSelectItemService.english(), - publisher: '', - standardLicense: '', - endpointDocumentation: '', - }, - advanced: { - dataModel: '', - dataCategory: null, - dataSubcategory: null, - transportMode: null, - geoReferenceMethod: '', - }, - datasource: this.emptyHttpDatasource(), - }; - } - - private emptyHttpDatasource(): AssetDatasourceFormValue { - return { - dataAddressType: 'Http', - dataDestination: '', - - httpUrl: '', - httpMethod: 'GET', - httpAuthHeaderType: 'None', - httpAuthHeaderName: '', - httpAuthHeaderValue: '', - httpAuthHeaderSecretName: '', - httpQueryParams: [], - - httpDefaultPath: '', - httpProxyMethod: false, - httpProxyPath: false, - httpProxyQueryParams: false, - httpProxyBody: false, - - httpHeaders: [], - }; - } -} diff --git a/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/asset-create-dialog-form.ts b/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/asset-create-dialog-form.ts deleted file mode 100644 index 438976f3f..000000000 --- a/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/asset-create-dialog-form.ts +++ /dev/null @@ -1,166 +0,0 @@ -import {Injectable} from '@angular/core'; -import {FormBuilder, FormGroup} from '@angular/forms'; -import {ActiveFeatureSet} from '../../../../../core/config/active-feature-set'; -import {DataAddressType} from '../../../../../shared/form-elements/data-address-type-select/data-address-type'; -import {DataCategorySelectItem} from '../../../../../shared/form-elements/data-category-select/data-category-select-item'; -import {AssetAdvancedFormBuilder} from './asset-advanced-form-builder'; -import {AssetDatasourceFormBuilder} from './asset-datasource-form-builder'; -import {AssetMetadataFormBuilder} from './asset-metadata-form-builder'; -import {AssetAdvancedFormModel} from './model/asset-advanced-form-model'; -import { - AssetCreateDialogFormModel, - AssetCreateDialogFormValue, -} from './model/asset-create-dialog-form-model'; -import {AssetDatasourceFormModel} from './model/asset-datasource-form-model'; -import {AssetMetadataFormModel} from './model/asset-metadata-form-model'; - -/** - * Handles AngularForms for AssetCreateDialog - */ -@Injectable() -export class AssetCreateDialogForm { - all!: FormGroup; - - /** - * FormGroup for stepper step "Metadata" - */ - metadata!: AssetCreateDialogFormModel['metadata']; - - /** - * FormGroup for stepper step "Advanced" - */ - advanced!: AssetCreateDialogFormModel['advanced']; - - /** - * FormGroup for stepper step "Data Source" - */ - datasource!: AssetCreateDialogFormModel['datasource']; - - /** - * Quick access to selected data address type - */ - get dataAddressType(): DataAddressType | null { - return this.datasource!.controls.dataAddressType.value; - } - - /** - * Quick access to selected data category - */ - get dataCategory(): DataCategorySelectItem | null { - return this.advanced!.controls.dataCategory.value; - } - - /** - * Quick access to full value - */ - get value(): AssetCreateDialogFormValue { - return this.all.value; - } - - get proxyMethod(): boolean { - return this.datasource!.controls.httpProxyMethod.value; - } - - get proxyPath(): boolean { - return this.datasource!.controls.httpProxyPath.value; - } - - get proxyQueryParams(): boolean { - return this.datasource!.controls.httpProxyQueryParams.value; - } - - constructor( - private formBuilder: FormBuilder, - private activeFeatureSet: ActiveFeatureSet, - private assetMetadataFormBuilder: AssetMetadataFormBuilder, - private assetAdvancedFormBuilder: AssetAdvancedFormBuilder, - private assetDatasourceFormBuilder: AssetDatasourceFormBuilder, - ) {} - - reset(initial: AssetCreateDialogFormValue) { - this.all = this.buildFormGroup(initial); - this.metadata = this.all.controls.metadata; - this.advanced = this.all.controls.advanced; - this.datasource = this.all.controls.datasource; - } - - buildFormGroup( - initial: AssetCreateDialogFormValue, - ): FormGroup { - const metadata: FormGroup = - this.assetMetadataFormBuilder.buildFormGroup(initial.metadata!); - - const datasource: FormGroup = - this.assetDatasourceFormBuilder.buildFormGroup(initial.datasource!); - - const formGroup: FormGroup = - this.formBuilder.nonNullable.group({ - metadata, - datasource, - }); - - if (this.activeFeatureSet.hasMdsFields()) { - const advanced: FormGroup = - this.assetAdvancedFormBuilder.buildFormGroup(initial.advanced); - formGroup.addControl('advanced', advanced); - } - - return formGroup; - } - - onHttpHeadersAddClick() { - this.datasource!.controls.httpHeaders.push( - this.assetDatasourceFormBuilder.buildHeaderFormGroup({ - headerName: '', - headerValue: '', - }), - ); - } - - onHttpHeadersRemoveClick(index: number) { - this.datasource!.controls.httpHeaders.removeAt(index); - } - - onHttpQueryParamsAddClick() { - this.datasource!.controls.httpQueryParams.push( - this.assetDatasourceFormBuilder.buildQueryParamFormGroup({ - paramName: '', - paramValue: '', - }), - ); - } - - onHttpQueryParamsRemoveClick(index: number) { - this.datasource!.controls.httpQueryParams.removeAt(index); - } - - onNutsLocationsAddClick() { - this.advanced!.controls.nutsLocations.push( - this.assetAdvancedFormBuilder.buildRequiredString(''), - ); - } - - onNutsLocationsRemoveClick(index: number) { - this.advanced!.controls.nutsLocations.removeAt(index); - } - - onDataSampleUrlsAddClick() { - this.advanced!.controls.dataSampleUrls.push( - this.assetAdvancedFormBuilder.buildRequiredUrl(''), - ); - } - - onDataSampleUrlsRemoveClick(index: number) { - this.advanced!.controls.dataSampleUrls.removeAt(index); - } - - onReferenceFileUrlsAddClick() { - this.advanced!.controls.referenceFileUrls.push( - this.assetAdvancedFormBuilder.buildRequiredUrl(''), - ); - } - - onReferenceFileUrlsRemoveClick(index: number) { - this.advanced!.controls.referenceFileUrls.removeAt(index); - } -} diff --git a/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/asset-datasource-form-builder.ts b/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/asset-datasource-form-builder.ts deleted file mode 100644 index 0fafca5dc..000000000 --- a/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/asset-datasource-form-builder.ts +++ /dev/null @@ -1,105 +0,0 @@ -import {Injectable} from '@angular/core'; -import {FormBuilder, FormGroup, Validators} from '@angular/forms'; -import {validQueryParam} from 'src/app/core/validators/valid-query-param'; -import {switchDisabledControls} from '../../../../../core/utils/form-group-utils'; -import {jsonValidator} from '../../../../../core/validators/json-validator'; -import {urlValidator} from '../../../../../core/validators/url-validator'; -import {assetDatasourceFormEnabledCtrls} from './model/asset-datasource-form-enabled-ctrls'; -import { - AssetDatasourceFormModel, - AssetDatasourceFormValue, -} from './model/asset-datasource-form-model'; -import { - HttpDatasourceHeaderFormModel, - HttpDatasourceHeaderFormValue, -} from './model/http-datasource-header-form-model'; -import { - HttpDatasourceQueryParamFormModel, - HttpDatasourceQueryParamFormValue, -} from './model/http-datasource-query-param-form-model'; - -@Injectable() -export class AssetDatasourceFormBuilder { - constructor(private formBuilder: FormBuilder) {} - - buildFormGroup( - initial: AssetDatasourceFormValue, - ): FormGroup { - const datasource: FormGroup = - this.formBuilder.nonNullable.group({ - dataAddressType: initial?.dataAddressType!, - dataDestination: [ - initial?.dataDestination!, - [Validators.required, jsonValidator], - ], - - // On-Request - contactEmail: [ - initial?.contactEmail!, - [Validators.required, Validators.email], - ], - contactPreferredEmailSubject: [ - initial?.contactPreferredEmailSubject!, - Validators.required, - ], - - // Http Datasource Fields - httpUrl: [initial?.httpUrl!, [Validators.required, urlValidator]], - httpMethod: [initial?.httpMethod!, Validators.required], - - httpAuthHeaderType: [initial?.httpAuthHeaderType!], - httpAuthHeaderName: [initial?.httpAuthHeaderName!, Validators.required], - httpAuthHeaderValue: [ - initial?.httpAuthHeaderValue!, - Validators.required, - ], - httpAuthHeaderSecretName: [ - initial?.httpAuthHeaderSecretName!, - Validators.required, - ], - httpQueryParams: this.formBuilder.array( - initial?.httpQueryParams?.map( - (param: HttpDatasourceQueryParamFormValue) => - this.buildQueryParamFormGroup(param), - ) ?? [], - ), - - httpDefaultPath: [initial?.httpDefaultPath!], - httpProxyMethod: [initial?.httpProxyMethod!], - httpProxyPath: [initial?.httpProxyPath!], - httpProxyQueryParams: [initial?.httpProxyQueryParams!], - httpProxyBody: [initial?.httpProxyBody!], - - httpHeaders: this.formBuilder.array( - initial?.httpHeaders?.map((header: HttpDatasourceHeaderFormValue) => - this.buildHeaderFormGroup(header), - ) ?? [], - ), - }); - - switchDisabledControls( - datasource, - assetDatasourceFormEnabledCtrls, - ); - - return datasource; - } - - buildHeaderFormGroup( - initial: HttpDatasourceHeaderFormValue, - ): FormGroup { - return this.formBuilder.nonNullable.group({ - headerName: [initial.headerName!, Validators.required], - headerValue: [initial.headerValue!, Validators.required], - }); - } - - buildQueryParamFormGroup( - initial: HttpDatasourceQueryParamFormValue, - ): FormGroup { - return this.formBuilder.nonNullable.group({ - paramName: [initial.paramName!, [Validators.required, validQueryParam]], - paramValue: [initial.paramValue!, [validQueryParam]], - }); - } -} diff --git a/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/asset-metadata-form-builder.ts b/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/asset-metadata-form-builder.ts deleted file mode 100644 index d4021e297..000000000 --- a/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/asset-metadata-form-builder.ts +++ /dev/null @@ -1,88 +0,0 @@ -import {Injectable} from '@angular/core'; -import {FormBuilder, FormControl, FormGroup, Validators} from '@angular/forms'; -import {combineLatest, distinctUntilChanged, pairwise} from 'rxjs'; -import {map} from 'rxjs/operators'; -import {value$} from '../../../../../core/utils/form-group-utils'; -import {noWhitespacesOrColonsValidator} from '../../../../../core/validators/no-whitespaces-or-colons-validator'; -import {urlValidator} from '../../../../../core/validators/url-validator'; -import {AssetsIdValidatorBuilder} from '../assets-id-validator-builder'; -import { - AssetMetadataFormModel, - AssetMetadataFormValue, -} from './model/asset-metadata-form-model'; - -@Injectable() -export class AssetMetadataFormBuilder { - constructor( - private formBuilder: FormBuilder, - private assetsIdValidatorBuilder: AssetsIdValidatorBuilder, - ) {} - - buildFormGroup( - initial: AssetMetadataFormValue, - ): FormGroup { - const metadata: FormGroup = - this.formBuilder.nonNullable.group({ - id: [ - initial?.id!, - [Validators.required, noWhitespacesOrColonsValidator], - [this.assetsIdValidatorBuilder.assetIdDoesNotExistsValidator()], - ], - title: [initial?.title!, Validators.required], - version: [initial?.version!], - contentType: [initial?.contentType!], - description: [initial?.description!], - keywords: [initial?.keywords!], - language: [initial?.language ?? null], - publisher: [initial?.publisher!, urlValidator], - standardLicense: [initial?.standardLicense!, urlValidator], - endpointDocumentation: [initial?.endpointDocumentation!, urlValidator], - }); - - // generate id from name and version(if available) - this.initIdGeneration( - metadata.controls.id, - metadata.controls.title, - metadata.controls.version, - ); - - return metadata; - } - - private initIdGeneration( - idCtrl: FormControl, - titleCtrl: FormControl, - versionCtrl: FormControl, - ) { - combineLatest([ - value$(titleCtrl).pipe(distinctUntilChanged()), - value$(versionCtrl).pipe(distinctUntilChanged()), - ]) - .pipe( - map(([title, version]) => this.generateId(title, version)), - pairwise(), - ) - .subscribe(([previousId, currentId]) => { - if (!idCtrl.value || idCtrl.value === previousId) { - idCtrl.setValue(currentId); - } - }); - } - - private generateId(title: string | null, version: string | null) { - if (!title) { - return ''; - } - const titleClean = this.cleanIdComponent(title); - const versionClean = this.cleanIdComponent(version); - return version ? `${titleClean}-${versionClean}` : titleClean; - } - - private cleanIdComponent(s: string | null) { - return (s ?? '') - .trim() - .replace(':', '-') - .replaceAll(' ', '-') - .toLowerCase(); - } -} diff --git a/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/http-methods.ts b/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/http-methods.ts deleted file mode 100644 index ac48610ce..000000000 --- a/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/http-methods.ts +++ /dev/null @@ -1,11 +0,0 @@ -export const DATA_SOURCE_HTTP_METHODS = [ - 'GET', - 'POST', - 'PUT', - 'PATCH', - 'DELETE', - 'OPTIONS', -]; -export const DATA_SINK_HTTP_METHODS = DATA_SOURCE_HTTP_METHODS.filter( - (it) => it !== 'GET', -); diff --git a/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/model/asset-advanced-form-model.ts b/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/model/asset-advanced-form-model.ts deleted file mode 100644 index 8776f2fcb..000000000 --- a/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/model/asset-advanced-form-model.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { - FormArray, - FormControl, - FormGroup, - ɵFormGroupValue, -} from '@angular/forms'; -import {DataCategorySelectItem} from '../../../../../../shared/form-elements/data-category-select/data-category-select-item'; -import {DataSubcategorySelectItem} from '../../../../../../shared/form-elements/data-subcategory-select/data-subcategory-select-item'; -import {TransportModeSelectItem} from '../../../../../../shared/form-elements/transport-mode-select/transport-mode-select-item'; -import {TemporalCoverageFormModel} from './temporal-coverage-form-model'; - -/** - * Form Model for AssetCreateDialog > Advanced - * (MDS Properties) - */ -export interface AssetAdvancedFormModel { - dataCategory: FormControl; - dataSubcategory: FormControl; - dataModel: FormControl; - geoReferenceMethod: FormControl; - transportMode: FormControl; - sovereignLegalName: FormControl; - geoLocation: FormControl; - nutsLocations: FormArray>; - dataSampleUrls: FormArray>; - referenceFileUrls: FormArray>; - referenceFilesDescription: FormControl; - conditionsForUse: FormControl; - dataUpdateFrequency: FormControl; - temporalCoverage: FormGroup; -} - -/** - * Form Value for AssetCreateDialog > Advanced - */ -export type AssetAdvancedFormValue = ɵFormGroupValue; diff --git a/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/model/asset-create-dialog-form-model.ts b/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/model/asset-create-dialog-form-model.ts deleted file mode 100644 index 4a60ec3f3..000000000 --- a/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/model/asset-create-dialog-form-model.ts +++ /dev/null @@ -1,19 +0,0 @@ -import {FormGroup, ɵFormGroupValue} from '@angular/forms'; -import {AssetAdvancedFormModel} from './asset-advanced-form-model'; -import {AssetDatasourceFormModel} from './asset-datasource-form-model'; -import {AssetMetadataFormModel} from './asset-metadata-form-model'; - -/** - * Form Model for AssetCreateDialog - */ -export interface AssetCreateDialogFormModel { - metadata: FormGroup; - datasource: FormGroup; - advanced?: FormGroup; -} - -/** - * Form Value for AssetCreateDialog - */ -export type AssetCreateDialogFormValue = - ɵFormGroupValue; diff --git a/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/model/asset-datasource-form-enabled-ctrls.ts b/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/model/asset-datasource-form-enabled-ctrls.ts deleted file mode 100644 index 3767c8248..000000000 --- a/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/model/asset-datasource-form-enabled-ctrls.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { - AssetDatasourceFormModel, - AssetDatasourceFormValue, -} from './asset-datasource-form-model'; - -export const assetDatasourceFormEnabledCtrls = ( - value: AssetDatasourceFormValue, -): Record => { - const customDataAddressJson = - value.dataAddressType === 'Custom-Data-Address-Json'; - - const onRequest = value.dataAddressType === 'On-Request'; - - const http = value.dataAddressType === 'Http'; - const httpAuth = value.httpAuthHeaderType !== 'None'; - const httpAuthByValue = value.httpAuthHeaderType === 'Value'; - const httpAuthByVault = value.httpAuthHeaderType === 'Vault-Secret'; - const proxyPath = !!value.httpProxyPath; - - return { - dataAddressType: true, - - // Custom Datasource JSON - dataDestination: customDataAddressJson, - - // On Request Datasource - contactEmail: onRequest, - contactPreferredEmailSubject: onRequest, - - // Http Datasource Fields - httpUrl: http, - httpMethod: http, - - httpAuthHeaderType: http, - httpAuthHeaderName: http && httpAuth, - httpAuthHeaderValue: http && httpAuthByValue, - httpAuthHeaderSecretName: http && httpAuthByVault, - httpQueryParams: http, - - httpDefaultPath: http && proxyPath, - httpProxyMethod: http, - httpProxyPath: http, - httpProxyQueryParams: http, - httpProxyBody: http, - - httpHeaders: http, - }; -}; diff --git a/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/model/asset-datasource-form-model.ts b/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/model/asset-datasource-form-model.ts deleted file mode 100644 index 1626a1da4..000000000 --- a/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/model/asset-datasource-form-model.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { - FormArray, - FormControl, - FormGroup, - ɵFormGroupValue, -} from '@angular/forms'; -import {UiDataSourceHttpDataMethod} from '@sovity.de/edc-client'; -import {DataAddressType} from '../../../../../../shared/form-elements/data-address-type-select/data-address-type'; -import {HttpDatasourceAuthHeaderType} from './http-datasource-auth-header-type'; -import {HttpDatasourceHeaderFormModel} from './http-datasource-header-form-model'; -import {HttpDatasourceQueryParamFormModel} from './http-datasource-query-param-form-model'; - -/** - * Form Model for AssetCreateDialog > Datasource - */ -export interface AssetDatasourceFormModel { - dataAddressType: FormControl; - - // Custom Datasource JSON - dataDestination: FormControl; - - // On-Request Datasource - contactEmail: FormControl; - contactPreferredEmailSubject: FormControl; - - // Http Datasource - httpUrl: FormControl; - httpMethod: FormControl; - - httpAuthHeaderType: FormControl; - httpAuthHeaderName: FormControl; - httpAuthHeaderValue: FormControl; - httpAuthHeaderSecretName: FormControl; - httpHeaders: FormArray>; - httpQueryParams: FormArray>; - httpProxyMethod: FormControl; - httpProxyPath: FormControl; - httpProxyQueryParams: FormControl; - httpProxyBody: FormControl; - httpDefaultPath: FormControl; -} - -/** - * Form Value for AssetCreateDialog > Datasource - */ -export type AssetDatasourceFormValue = - ɵFormGroupValue; diff --git a/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/model/asset-metadata-form-model.ts b/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/model/asset-metadata-form-model.ts deleted file mode 100644 index 1476396ea..000000000 --- a/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/model/asset-metadata-form-model.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {FormControl, ɵFormGroupValue} from '@angular/forms'; -import {LanguageSelectItem} from '../../../../../../shared/form-elements/language-select/language-select-item'; - -/** - * Form Model for AssetCreateDialog > Metadata - */ -export interface AssetMetadataFormModel { - id: FormControl; - title: FormControl; - version: FormControl; - contentType: FormControl; - description: FormControl; - keywords: FormControl; - language: FormControl; - publisher: FormControl; - standardLicense: FormControl; - endpointDocumentation: FormControl; -} - -/** - * Form Value for AssetCreateDialog > Metadata - */ -export type AssetMetadataFormValue = ɵFormGroupValue; diff --git a/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/model/http-datasource-auth-header-type.ts b/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/model/http-datasource-auth-header-type.ts deleted file mode 100644 index c208d6fd0..000000000 --- a/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/model/http-datasource-auth-header-type.ts +++ /dev/null @@ -1 +0,0 @@ -export type HttpDatasourceAuthHeaderType = 'None' | 'Value' | 'Vault-Secret'; diff --git a/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/model/http-datasource-header-form-model.ts b/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/model/http-datasource-header-form-model.ts deleted file mode 100644 index 5b0c0e694..000000000 --- a/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/model/http-datasource-header-form-model.ts +++ /dev/null @@ -1,15 +0,0 @@ -import {FormControl, ɵFormGroupValue} from '@angular/forms'; - -/** - * Form Model for AssetCreateDialog > Datasource > HTTP/REST > Header - */ -export interface HttpDatasourceHeaderFormModel { - headerName: FormControl; - headerValue: FormControl; -} - -/** - * Form Value for AssetCreateDialog > Datasource > HTTP/REST > Header - */ -export type HttpDatasourceHeaderFormValue = - ɵFormGroupValue; diff --git a/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/model/http-datasource-query-param-form-model.ts b/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/model/http-datasource-query-param-form-model.ts deleted file mode 100644 index deb3a3bd5..000000000 --- a/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/model/http-datasource-query-param-form-model.ts +++ /dev/null @@ -1,15 +0,0 @@ -import {FormControl, ɵFormGroupValue} from '@angular/forms'; - -/** - * Form Model for AssetCreateDialog > Datasource > HTTP/REST > Header - */ -export interface HttpDatasourceQueryParamFormModel { - paramName: FormControl; - paramValue: FormControl; -} - -/** - * Form Value for AssetCreateDialog > Datasource > HTTP/REST > QueryParam - */ -export type HttpDatasourceQueryParamFormValue = - ɵFormGroupValue; diff --git a/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/model/temporal-coverage-form-model.ts b/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/model/temporal-coverage-form-model.ts deleted file mode 100644 index 0d02477e9..000000000 --- a/src/app/routes/connector-ui/asset-list-page/asset-create-dialog/form/model/temporal-coverage-form-model.ts +++ /dev/null @@ -1,15 +0,0 @@ -import {FormControl, ɵFormGroupValue} from '@angular/forms'; - -/** - * Form Model for AssetCreateDialog > Advanced > Temporal Coverage - */ -export interface TemporalCoverageFormModel { - from: FormControl; - toInclusive: FormControl; -} - -/** - * Form Value for AssetCreateDialog > Advanced > Temporal Coverage - */ -export type TemporalCoverageFormValue = - ɵFormGroupValue; diff --git a/src/app/routes/connector-ui/asset-list-page/asset-list-page.module.ts b/src/app/routes/connector-ui/asset-list-page/asset-list-page.module.ts deleted file mode 100644 index 369387622..000000000 --- a/src/app/routes/connector-ui/asset-list-page/asset-list-page.module.ts +++ /dev/null @@ -1,31 +0,0 @@ -import {CommonModule} from '@angular/common'; -import {NgModule} from '@angular/core'; -import {FormsModule, ReactiveFormsModule} from '@angular/forms'; -import {RouterModule} from '@angular/router'; -import {SharedModule} from '../../../shared/shared.module'; -import {AssetCardsComponent} from './asset-cards/asset-cards.component'; -import {AssetCreateDialogComponent} from './asset-create-dialog/asset-create-dialog.component'; -import {AssetCreateDialogService} from './asset-create-dialog/asset-create-dialog.service'; -import {AssetCreateDialogFormMapper} from './asset-create-dialog/form/asset-create-dialog-form-mapper'; -import {AssetListPageComponent} from './asset-list-page/asset-list-page.component'; - -@NgModule({ - imports: [ - // Angular - CommonModule, - FormsModule, - ReactiveFormsModule, - RouterModule, - - // EDC UI Modules - SharedModule, - ], - declarations: [ - AssetCardsComponent, - AssetListPageComponent, - AssetCreateDialogComponent, - ], - providers: [AssetCreateDialogService, AssetCreateDialogFormMapper], - exports: [AssetListPageComponent], -}) -export class AssetListPageModule {} diff --git a/src/app/routes/connector-ui/asset-list-page/asset-list-page/asset-list-page.component.html b/src/app/routes/connector-ui/asset-list-page/asset-list-page/asset-list-page.component.html deleted file mode 100644 index 9bcb147d8..000000000 --- a/src/app/routes/connector-ui/asset-list-page/asset-list-page/asset-list-page.component.html +++ /dev/null @@ -1,70 +0,0 @@ -
-
- - - {{ 'asset_list_page.search_assets' | translate }} - - search - - - - - - - -
- - - - -
- -
- - - -
- -
- -
-
diff --git a/src/app/routes/connector-ui/asset-list-page/asset-list-page/asset-list-page.component.scss b/src/app/routes/connector-ui/asset-list-page/asset-list-page/asset-list-page.component.scss deleted file mode 100644 index 08f88ff46..000000000 --- a/src/app/routes/connector-ui/asset-list-page/asset-list-page/asset-list-page.component.scss +++ /dev/null @@ -1,14 +0,0 @@ -#wrapper { - margin: 20px; -} - -.contract-definition-card { - width: 500px; - margin-right: 15px; - margin-bottom: 15px; -} - -.search-form-field { - min-width: 200px; - width: 30%; -} diff --git a/src/app/routes/connector-ui/asset-list-page/asset-list-page/asset-list-page.component.ts b/src/app/routes/connector-ui/asset-list-page/asset-list-page/asset-list-page.component.ts deleted file mode 100644 index 1d6827968..000000000 --- a/src/app/routes/connector-ui/asset-list-page/asset-list-page/asset-list-page.component.ts +++ /dev/null @@ -1,100 +0,0 @@ -import {Component, OnDestroy, OnInit} from '@angular/core'; -import {Router} from '@angular/router'; -import {BehaviorSubject, Subject} from 'rxjs'; -import {filter, switchMap} from 'rxjs/operators'; -import {AssetService} from '../../../../core/services/asset.service'; -import {Fetched} from '../../../../core/services/models/fetched'; -import {UiAssetMapped} from '../../../../core/services/models/ui-asset-mapped'; -import {OnAssetEditClickFn} from '../../../../shared/business/asset-detail-dialog/asset-detail-dialog-data'; -import {AssetDetailDialogDataService} from '../../../../shared/business/asset-detail-dialog/asset-detail-dialog-data.service'; -import {AssetDetailDialogService} from '../../../../shared/business/asset-detail-dialog/asset-detail-dialog.service'; -import {AssetCreateDialogService} from '../asset-create-dialog/asset-create-dialog.service'; - -export interface AssetList { - filteredAssets: UiAssetMapped[]; - numTotalAssets: number; -} - -@Component({ - selector: 'asset-list-page', - templateUrl: './asset-list-page.component.html', - styleUrls: ['./asset-list-page.component.scss'], -}) -export class AssetListPageComponent implements OnInit, OnDestroy { - assetList: Fetched = Fetched.empty(); - searchText = ''; - private fetch$ = new BehaviorSubject(null); - - constructor( - private assetServiceMapped: AssetService, - private assetDetailDialogDataService: AssetDetailDialogDataService, - private assetDetailDialogService: AssetDetailDialogService, - private assetCreateDialogService: AssetCreateDialogService, - private router: Router, - ) {} - - ngOnInit(): void { - this.fetch$ - .pipe( - switchMap(() => this.assetServiceMapped.fetchAssets()), - Fetched.wrap({ - failureMessage: 'Failed fetching asset list.', - }), - ) - .pipe( - Fetched.map( - (assets): AssetList => ({ - filteredAssets: assets.filter((asset) => - asset.title - ?.toLowerCase() - .includes(this.searchText.toLowerCase()), - ), - numTotalAssets: assets.length, - }), - ), - ) - .subscribe((assetList) => (this.assetList = assetList)); - } - - onSearch() { - this.refresh(); - } - - onAssetClick(asset: UiAssetMapped) { - const onAssetEditClick: OnAssetEditClickFn = (asset) => { - this.router.navigate(['/my-assets', asset.assetId, 'edit']); - }; - - const buildDialogData = (asset: UiAssetMapped) => - this.assetDetailDialogDataService.assetDetailsEditable(asset, { - onAssetEditClick, - }); - - const data = buildDialogData(asset); - this.assetDetailDialogService - .open(data, this.ngOnDestroy$) - .pipe(filter((it) => !!it?.refreshList)) - .subscribe(() => this.refresh()); - } - - onCreate() { - this.assetCreateDialogService - .showCreateDialog(this.ngOnDestroy$) - .subscribe((result) => { - if (result?.refreshedList) { - this.refresh(); - } - }); - } - - private refresh() { - this.fetch$.next(null); - } - - ngOnDestroy$ = new Subject(); - - ngOnDestroy() { - this.ngOnDestroy$.next(null); - this.ngOnDestroy$.complete(); - } -} diff --git a/src/app/routes/connector-ui/catalog-browser-page/catalog-browser-fetch-detail-dialog/catalog-browser-fetch-detail-dialog.component.html b/src/app/routes/connector-ui/catalog-browser-page/catalog-browser-fetch-detail-dialog/catalog-browser-fetch-detail-dialog.component.html deleted file mode 100644 index f1ce90db8..000000000 --- a/src/app/routes/connector-ui/catalog-browser-page/catalog-browser-fetch-detail-dialog/catalog-browser-fetch-detail-dialog.component.html +++ /dev/null @@ -1,36 +0,0 @@ -
- view_timeline -
-
- {{ 'catalog_browser_page.fetch' | translate }} -
-
- {{ 'catalog_browser_page.endpoint_catalogs' | translate }} -
-
-
- -
-
    -
  • - {{ request.url }} -
      -
    • - {{ request.data.state }} -
    • -
    • - {{ errorMessage }} -
    • -
    -
  • -
-
- -
- - -
diff --git a/src/app/routes/connector-ui/catalog-browser-page/catalog-browser-fetch-detail-dialog/catalog-browser-fetch-detail-dialog.component.ts b/src/app/routes/connector-ui/catalog-browser-page/catalog-browser-fetch-detail-dialog/catalog-browser-fetch-detail-dialog.component.ts deleted file mode 100644 index 92c233c01..000000000 --- a/src/app/routes/connector-ui/catalog-browser-page/catalog-browser-fetch-detail-dialog/catalog-browser-fetch-detail-dialog.component.ts +++ /dev/null @@ -1,82 +0,0 @@ -import {HttpErrorResponse} from '@angular/common/http'; -import {Component, Inject, OnDestroy, OnInit} from '@angular/core'; -import {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog'; -import {Subject} from 'rxjs'; -import {takeUntil} from 'rxjs/operators'; -import {DataOffer} from '../../../../core/services/models/data-offer'; -import {Fetched} from '../../../../core/services/models/fetched'; -import {CatalogBrowserPageData} from '../catalog-browser-page/catalog-browser-page.data'; -import {CatalogBrowserFetchDetailDialogData} from './catalog-browser-fetch-detail-dialog.data'; - -@Component({ - selector: 'app-catalog-browser-fetch-detail-dialog', - templateUrl: './catalog-browser-fetch-detail-dialog.component.html', -}) -export class CatalogBrowserFetchDetailDialogComponent - implements OnInit, OnDestroy -{ - data: CatalogBrowserPageData | null = null; - - constructor( - public dialogRef: MatDialogRef, - @Inject(MAT_DIALOG_DATA) - public dialogData: CatalogBrowserFetchDetailDialogData, - ) {} - - ngOnInit() { - this.dialogData.data$ - .pipe(takeUntil(this.ngOnDestroy$)) - .subscribe((data) => { - this.data = data; - }); - } - - ngOnDestroy$ = new Subject(); - - ngOnDestroy(): void { - this.ngOnDestroy$.next(null); - this.ngOnDestroy$.complete(); - } - - errorMessages(data: Fetched): string[] { - if (!data.isError) { - return []; - } - - const error = data.errorOrUndefined?.error; - if (error instanceof HttpErrorResponse) { - if (!error.status) { - return [ - 'Could not reach EDC backend. Please check your internet connection.', - ]; - } else if (error.status === 502) { - return [ - `Status ${error.status}`, - `EDC Backend failed fetching other connector catalog.`, - `Backend message: ${this.httpErrorResponseMessage(error)}`, - ]; - } else { - return [ - `Status ${error.status}`, - `EDC Backend Error`, - `Backend message: ${this.httpErrorResponseMessage(error)}`, - ]; - } - } else { - return [error?.message ?? 'Unknown UI error.']; - } - } - - private httpErrorResponseMessage(error: HttpErrorResponse) { - const childError = error.error; - if (childError?.message) { - return childError.message; - } else if (childError) { - return JSON.stringify(childError); - } else if (error.message) { - return error.message; - } else { - return error.statusText; - } - } -} diff --git a/src/app/routes/connector-ui/catalog-browser-page/catalog-browser-fetch-detail-dialog/catalog-browser-fetch-detail-dialog.data.ts b/src/app/routes/connector-ui/catalog-browser-page/catalog-browser-fetch-detail-dialog/catalog-browser-fetch-detail-dialog.data.ts deleted file mode 100644 index 387663d0f..000000000 --- a/src/app/routes/connector-ui/catalog-browser-page/catalog-browser-fetch-detail-dialog/catalog-browser-fetch-detail-dialog.data.ts +++ /dev/null @@ -1,7 +0,0 @@ -import {Observable} from 'rxjs'; -import {CatalogBrowserPageData} from '../catalog-browser-page/catalog-browser-page.data'; - -export interface CatalogBrowserFetchDetailDialogData { - data$: Observable; - refresh: () => void; -} diff --git a/src/app/routes/connector-ui/catalog-browser-page/catalog-browser-page.module.ts b/src/app/routes/connector-ui/catalog-browser-page/catalog-browser-page.module.ts deleted file mode 100644 index fcb2e29f4..000000000 --- a/src/app/routes/connector-ui/catalog-browser-page/catalog-browser-page.module.ts +++ /dev/null @@ -1,31 +0,0 @@ -import {CommonModule} from '@angular/common'; -import {HttpClientModule} from '@angular/common/http'; -import {NgModule} from '@angular/core'; -import {FormsModule, ReactiveFormsModule} from '@angular/forms'; -import {RouterModule} from '@angular/router'; -import {SharedModule} from '../../../shared/shared.module'; -import {CatalogBrowserFetchDetailDialogComponent} from './catalog-browser-fetch-detail-dialog/catalog-browser-fetch-detail-dialog.component'; -import {CatalogBrowserPageService} from './catalog-browser-page/catalog-browser-page-service'; -import {CatalogBrowserPageComponent} from './catalog-browser-page/catalog-browser-page.component'; -import {DataOfferBuilder} from './catalog-browser-page/data-offer-builder'; - -@NgModule({ - imports: [ - // Angular - CommonModule, - HttpClientModule, - FormsModule, - ReactiveFormsModule, - RouterModule, - - // EDC UI Modules - SharedModule, - ], - declarations: [ - CatalogBrowserPageComponent, - CatalogBrowserFetchDetailDialogComponent, - ], - exports: [CatalogBrowserPageComponent], - providers: [CatalogBrowserPageService, DataOfferBuilder, DataOfferBuilder], -}) -export class CatalogBrowserPageModule {} diff --git a/src/app/routes/connector-ui/catalog-browser-page/catalog-browser-page/catalog-api-url.service.ts b/src/app/routes/connector-ui/catalog-browser-page/catalog-browser-page/catalog-api-url.service.ts deleted file mode 100644 index a9f0797e8..000000000 --- a/src/app/routes/connector-ui/catalog-browser-page/catalog-browser-page/catalog-api-url.service.ts +++ /dev/null @@ -1,61 +0,0 @@ -import {Inject, Injectable} from '@angular/core'; -import {APP_CONFIG, AppConfig} from '../../../../core/config/app-config'; - -/** - * Builds Catalog fetch URLs. Stores preset and user configured Connector Endpoints. - */ -@Injectable({ - providedIn: 'root', -}) -export class CatalogApiUrlService { - /** - * Preset Connector Endpoints to be used in catalog. - * - * From app-config.json, not user editable - */ - private readonly presetProviders = new Array(); - - /** - * User-added Connector Endpoints - */ - private customProviders = new Array(); - - constructor(@Inject(APP_CONFIG) private config: AppConfig) { - this.presetProviders = this.splitUrls(this.config.catalogUrls); - } - - /** - * Get all configured catalog URLs - */ - getAllProviders() { - return this.distinct([...this.presetProviders, ...this.customProviders]); - } - - /** - * Get preset catalog API URLs - */ - getPresetProviders(): string[] { - return this.presetProviders; - } - - setCustomProvidersAsString(connectorIdsCommaSeparated: string) { - this.setCustomProviders(this.splitUrls(connectorIdsCommaSeparated)); - } - - setCustomProviders(connectorIds: string[]) { - this.customProviders = connectorIds; - } - - private splitUrls(commaJoinedUrls?: string | null): string[] { - return ( - commaJoinedUrls - ?.split(',') - ?.map((url) => url.trim()) - ?.filter((url) => url.length) ?? [] - ); - } - - private distinct(array: T[]): T[] { - return [...new Set(array)]; - } -} diff --git a/src/app/routes/connector-ui/catalog-browser-page/catalog-browser-page/catalog-browser-page-service.ts b/src/app/routes/connector-ui/catalog-browser-page/catalog-browser-page/catalog-browser-page-service.ts deleted file mode 100644 index db5c98d8e..000000000 --- a/src/app/routes/connector-ui/catalog-browser-page/catalog-browser-page/catalog-browser-page-service.ts +++ /dev/null @@ -1,104 +0,0 @@ -import {Injectable} from '@angular/core'; -import {Observable, combineLatest} from 'rxjs'; -import {map, switchMap} from 'rxjs/operators'; -import {EdcApiService} from '../../../../core/services/api/edc-api.service'; -import {DataOffer} from '../../../../core/services/models/data-offer'; -import {Fetched} from '../../../../core/services/models/fetched'; -import {MultiFetched} from '../../../../core/services/models/multi-fetched'; -import {assetSearchTargets, search} from '../../../../core/utils/search-utils'; -import {CatalogApiUrlService} from './catalog-api-url.service'; -import { - CatalogBrowserPageData, - ContractOfferRequest, -} from './catalog-browser-page.data'; -import {DataOfferBuilder} from './data-offer-builder'; - -@Injectable() -export class CatalogBrowserPageService { - constructor( - private edcApiService: EdcApiService, - private catalogApiUrlService: CatalogApiUrlService, - private dataOfferBuilder: DataOfferBuilder, - ) {} - - contractOfferPageData$( - refresh$: Observable, - searchText$: Observable, - ): Observable { - return combineLatest([ - refresh$.pipe(switchMap(() => this.fetchCatalogs())), - searchText$, - ]).pipe( - map(([data, searchText]): CatalogBrowserPageData => { - // Merge fetch results - const contractOffers = data.requestTotals.data.flat(); - // Apply filter - const filteredContractOffers = this.filterContractOffers( - contractOffers, - searchText, - ); - - return { - requests: data.requests, - requestTotals: data.requestTotals, - filteredDataOffers: filteredContractOffers, - numTotalContractOffers: contractOffers.length, - }; - }), - ); - } - - filterContractOffers( - dataOffers: DataOffer[], - searchText: string, - ): DataOffer[] { - return search(dataOffers, searchText, (dataOffer) => - assetSearchTargets(dataOffer.asset), - ); - } - - fetchCatalogs(): Observable< - Pick - > { - // Prepare to fetch individual Catalogs - const urls = this.catalogApiUrlService.getAllProviders(); - const sources = urls.map((it) => - this.fetchDataOffers(it).pipe( - Fetched.wrap({failureMessage: 'Failed fetching catalog.'}), - ), - ); - - return combineLatest(sources).pipe( - map((results) => MultiFetched.aggregate(results)), - map( - ( - requestTotals: MultiFetched, - ): Pick => { - const presetUrls = this.catalogApiUrlService.getPresetProviders(); - return { - requestTotals, - requests: requestTotals.results.map( - (data, index): ContractOfferRequest => ({ - url: urls[index], - isPresetUrl: presetUrls.includes(urls[index]), - data, - }), - ), - }; - }, - ), - ); - } - - private fetchDataOffers(endpoint: string) { - return this.edcApiService - .getCatalogPageDataOffers(endpoint) - .pipe( - map((dataOffers) => - dataOffers.map((dataOffer) => - this.dataOfferBuilder.buildDataOffer(dataOffer), - ), - ), - ); - } -} diff --git a/src/app/routes/connector-ui/catalog-browser-page/catalog-browser-page/catalog-browser-page.component.html b/src/app/routes/connector-ui/catalog-browser-page/catalog-browser-page/catalog-browser-page.component.html deleted file mode 100644 index f08c5c141..000000000 --- a/src/app/routes/connector-ui/catalog-browser-page/catalog-browser-page/catalog-browser-page.component.html +++ /dev/null @@ -1,120 +0,0 @@ -
-
- - - {{ 'catalog_browser_page.search' | translate }} - search - - - - - - - {{ - 'catalog_browser_page.con_endpoints' | translate - }} - link - - {{ presetProvidersMessage }} - - - - - - -
- - - - -
-
- - - - -
-
- -
-
diff --git a/src/app/routes/connector-ui/catalog-browser-page/catalog-browser-page/catalog-browser-page.component.scss b/src/app/routes/connector-ui/catalog-browser-page/catalog-browser-page/catalog-browser-page.component.scss deleted file mode 100644 index dae33aa22..000000000 --- a/src/app/routes/connector-ui/catalog-browser-page/catalog-browser-page/catalog-browser-page.component.scss +++ /dev/null @@ -1,13 +0,0 @@ -#wrapper { - margin: 20px; -} - -.search-form-field { - min-width: 200px; - width: 30%; -} - -mat-paginator { - display: inline-block; - background-color: transparent; -} diff --git a/src/app/routes/connector-ui/catalog-browser-page/catalog-browser-page/catalog-browser-page.component.ts b/src/app/routes/connector-ui/catalog-browser-page/catalog-browser-page/catalog-browser-page.component.ts deleted file mode 100644 index 8309766f2..000000000 --- a/src/app/routes/connector-ui/catalog-browser-page/catalog-browser-page/catalog-browser-page.component.ts +++ /dev/null @@ -1,121 +0,0 @@ -import {Component, OnDestroy, OnInit} from '@angular/core'; -import {FormControl} from '@angular/forms'; -import {MatDialog} from '@angular/material/dialog'; -import { - BehaviorSubject, - Observable, - Subject, - distinctUntilChanged, - sampleTime, - switchMap, -} from 'rxjs'; -import {filter, map, takeUntil} from 'rxjs/operators'; -import {TranslateService} from '@ngx-translate/core'; -import {ConnectorLimitsService} from '../../../../core/services/connector-limits.service'; -import {DataOffer} from '../../../../core/services/models/data-offer'; -import {value$} from '../../../../core/utils/form-group-utils'; -import {AssetDetailDialogDataService} from '../../../../shared/business/asset-detail-dialog/asset-detail-dialog-data.service'; -import {AssetDetailDialogService} from '../../../../shared/business/asset-detail-dialog/asset-detail-dialog.service'; -import {CatalogBrowserFetchDetailDialogComponent} from '../catalog-browser-fetch-detail-dialog/catalog-browser-fetch-detail-dialog.component'; -import {CatalogBrowserFetchDetailDialogData} from '../catalog-browser-fetch-detail-dialog/catalog-browser-fetch-detail-dialog.data'; -import {CatalogApiUrlService} from './catalog-api-url.service'; -import {CatalogBrowserPageService} from './catalog-browser-page-service'; -import {emptyCatalogBrowserPageData} from './catalog-browser-page.data'; - -@Component({ - selector: 'catalog-browser-page', - templateUrl: './catalog-browser-page.component.html', - styleUrls: ['./catalog-browser-page.component.scss'], -}) -export class CatalogBrowserPageComponent implements OnInit, OnDestroy { - data = emptyCatalogBrowserPageData(); - data$ = new BehaviorSubject(this.data); - searchText = new FormControl(''); - customProviders = ''; - presetProvidersMessage = ''; - private fetch$ = new BehaviorSubject(null); - - constructor( - private assetDetailDialogDataService: AssetDetailDialogDataService, - private assetDetailDialogService: AssetDetailDialogService, - private catalogBrowserPageService: CatalogBrowserPageService, - private catalogApiUrlService: CatalogApiUrlService, - private matDialog: MatDialog, - private connectorLimitsService: ConnectorLimitsService, - private translateService: TranslateService, - ) {} - - ngOnInit(): void { - this.catalogBrowserPageService - .contractOfferPageData$( - this.fetch$.pipe(sampleTime(200)), - this.searchText$(), - ) - .subscribe((data) => { - this.data = data; - this.data$.next(data); - }); - this.startBuildingPresetCatalogUrlsMessage(); - } - - onDataOfferClick(dataOffer: DataOffer) { - this.connectorLimitsService - .isConsumingAgreementLimitExceeded() - .pipe( - switchMap((isConsumingLimitsExceeded) => { - const data = this.assetDetailDialogDataService.dataOfferDetails( - dataOffer, - isConsumingLimitsExceeded, - ); - return this.assetDetailDialogService.open(data, this.ngOnDestroy$); - }), - filter((it) => !!it?.refreshList), - ) - .subscribe(() => this.fetch$.next(null)); - } - - onShowFetchDetails() { - const data: CatalogBrowserFetchDetailDialogData = { - data$: this.data$, - refresh: () => this.fetch$.next(null), - }; - this.matDialog.open(CatalogBrowserFetchDetailDialogComponent, {data}); - } - - onCatalogUrlsChange(): void { - this.catalogApiUrlService.setCustomProvidersAsString(this.customProviders); - this.fetch$.next(null); - } - - private startBuildingPresetCatalogUrlsMessage() { - this.translateService - .get(['catalog_browser_page.usage']) - .pipe(takeUntil(this.ngOnDestroy$)) - .subscribe((strings) => { - const urls = this.catalogApiUrlService.getPresetProviders(); - const usage = strings['catalog_browser_page.usage']; - this.presetProvidersMessage = !urls.length - ? '' - : `${usage} ${ - urls.length > 1 ? ` (${urls.length})` : '' - }: ${urls.join(', ')}`; - }); - } - - private searchText$(): Observable { - return (value$(this.searchText) as Observable).pipe( - map((it) => (it ?? '').trim()), - distinctUntilChanged(), - ); - } - - ngOnDestroy$ = new Subject(); - - ngOnDestroy() { - this.ngOnDestroy$.next(null); - this.ngOnDestroy$.complete(); - - // Reset selected Connector Endpoints - this.catalogApiUrlService.setCustomProviders([]); - } -} diff --git a/src/app/routes/connector-ui/catalog-browser-page/catalog-browser-page/catalog-browser-page.data.ts b/src/app/routes/connector-ui/catalog-browser-page/catalog-browser-page/catalog-browser-page.data.ts deleted file mode 100644 index d5aab9bf6..000000000 --- a/src/app/routes/connector-ui/catalog-browser-page/catalog-browser-page/catalog-browser-page.data.ts +++ /dev/null @@ -1,25 +0,0 @@ -import {DataOffer} from '../../../../core/services/models/data-offer'; -import {Fetched} from '../../../../core/services/models/fetched'; -import {MultiFetched} from '../../../../core/services/models/multi-fetched'; - -export interface CatalogBrowserPageData { - requestTotals: MultiFetched; - requests: ContractOfferRequest[]; - filteredDataOffers: DataOffer[]; - numTotalContractOffers: number; -} - -export function emptyCatalogBrowserPageData(): CatalogBrowserPageData { - return { - requests: [], - requestTotals: MultiFetched.empty(), - filteredDataOffers: [], - numTotalContractOffers: 0, - }; -} - -export interface ContractOfferRequest { - url: string; - isPresetUrl: boolean; - data: Fetched; -} diff --git a/src/app/routes/connector-ui/catalog-browser-page/catalog-browser-page/data-offer-builder.ts b/src/app/routes/connector-ui/catalog-browser-page/catalog-browser-page/data-offer-builder.ts deleted file mode 100644 index 782299344..000000000 --- a/src/app/routes/connector-ui/catalog-browser-page/catalog-browser-page/data-offer-builder.ts +++ /dev/null @@ -1,61 +0,0 @@ -import {Injectable} from '@angular/core'; -import {TranslateService} from '@ngx-translate/core'; -import {UiContractOffer, UiDataOffer} from '@sovity.de/edc-client'; -import {AssetBuilder} from '../../../../core/services/asset-builder'; -import {ContractOffer} from '../../../../core/services/models/contract-offer'; -import {DataOffer} from '../../../../core/services/models/data-offer'; -import {UiAssetMapped} from '../../../../core/services/models/ui-asset-mapped'; -import {PolicyPropertyFieldBuilder} from '../../../../shared/business/asset-detail-dialog/policy-property-field-builder'; - -@Injectable() -export class DataOfferBuilder { - constructor( - private assetBuilder: AssetBuilder, - private policyPropertyFieldBuilder: PolicyPropertyFieldBuilder, - private translateService: TranslateService, - ) {} - buildDataOffer(dataOffer: UiDataOffer): DataOffer { - const asset = this.assetBuilder.buildAsset(dataOffer.asset); - return { - ...dataOffer, - asset, - contractOffers: dataOffer.contractOffers.map( - (contractOffer, iContractOffer): ContractOffer => { - return this.buildContractOffer( - dataOffer, - asset, - contractOffer, - iContractOffer, - ); - }, - ), - }; - } - - private buildContractOffer( - dataOffer: UiDataOffer, - asset: UiAssetMapped, - contractOffer: UiContractOffer, - iContractOffer: number, - ): ContractOffer { - const groupLabel = this.getGroupLabel( - iContractOffer, - dataOffer.contractOffers.length, - ); - return { - ...contractOffer, - properties: this.policyPropertyFieldBuilder.buildPolicyPropertyFields( - contractOffer.policy, - `${groupLabel} Contract Policy JSON-LD`, - asset.title, - ), - }; - } - - private getGroupLabel(i: number, total: number) { - const contract = this.translateService.instant( - 'catalog_browser_page.contract', - ); - return `${contract} ${total > 1 ? i : ''}`; - } -} diff --git a/src/app/routes/connector-ui/connector-ui-routing.module.ts b/src/app/routes/connector-ui/connector-ui-routing.module.ts deleted file mode 100644 index 04d609117..000000000 --- a/src/app/routes/connector-ui/connector-ui-routing.module.ts +++ /dev/null @@ -1,86 +0,0 @@ -import {NgModule} from '@angular/core'; -import {RouterModule, Routes} from '@angular/router'; -import {AssetEditPageComponent} from './asset-edit-page/asset-edit-page/asset-edit-page.component'; -import {AssetListPageComponent} from './asset-list-page/asset-list-page/asset-list-page.component'; -import {CatalogBrowserPageComponent} from './catalog-browser-page/catalog-browser-page/catalog-browser-page.component'; -import {ConnectorUiComponent} from './connector-ui.component'; -import {ContractAgreementPageComponent} from './contract-agreement-page/contract-agreement-page/contract-agreement-page.component'; -import {ContractDefinitionPageComponent} from './contract-definition-page/contract-definition-page/contract-definition-page.component'; -import {DashboardPageComponent} from './dashboard-page/dashboard-page/dashboard-page.component'; -import {LogoutPageComponent} from './logout-page/logout-page.component'; -import {PolicyDefinitionCreatePageComponent} from './policy-definition-create-page/policy-definition-create-page/policy-definition-create-page.component'; -import {PolicyDefinitionPageComponent} from './policy-definition-page/policy-definition-page/policy-definition-page.component'; -import {TransferHistoryPageComponent} from './transfer-history-page/transfer-history-page/transfer-history-page.component'; - -export const routes: Routes = [ - { - path: '', - redirectTo: 'dashboard', - pathMatch: 'full', - }, - { - path: 'dashboard', - component: DashboardPageComponent, - data: {title: 'dashboard_page.title'}, - }, - { - path: 'create-asset', - component: AssetEditPageComponent, - data: {title: 'create_data_offer_page.title'}, - }, - { - path: 'catalog-browser', - component: CatalogBrowserPageComponent, - data: {title: 'catalog_browser_page.title'}, - }, - { - path: 'contracts', - component: ContractAgreementPageComponent, - data: {title: 'contract_agreement_page.title'}, - }, - { - path: 'transfer-history', - component: TransferHistoryPageComponent, - data: {title: 'transfer_history_page.title'}, - }, - { - path: 'my-assets', // must not be "assets" to prevent conflict with assets directory - component: AssetListPageComponent, - data: {title: 'asset_list_page.title'}, - }, - { - path: 'my-assets/:id/edit', - component: AssetEditPageComponent, - data: {title: 'edit_asset_page.title'}, - }, - { - path: 'policies', - component: PolicyDefinitionPageComponent, - data: {title: 'policy_definition_page.title'}, - }, - { - path: 'policies/create', - component: PolicyDefinitionCreatePageComponent, - data: {title: 'create_policy_page.title'}, - }, - { - path: 'data-offers', - component: ContractDefinitionPageComponent, - data: {title: 'contract_definition_page.title'}, - }, - { - path: 'logout', - component: LogoutPageComponent, - data: {title: 'logout_page.title'}, - }, -]; - -@NgModule({ - imports: [ - RouterModule.forChild([ - {path: '', component: ConnectorUiComponent, children: routes}, - ]), - ], - exports: [RouterModule], -}) -export class ConnectorUiRoutingModule {} diff --git a/src/app/routes/connector-ui/connector-ui.component.html b/src/app/routes/connector-ui/connector-ui.component.html deleted file mode 100644 index 9b31b4cfb..000000000 --- a/src/app/routes/connector-ui/connector-ui.component.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - Logo - -
- -
-
- Do you have feedback or need help? -

Select  SAML  login on following page

- - CREATE TICKET - - - TUTORIAL & FAQ - -
-
- powered by - sovity logo -
-
- - - - {{ - titleService.getTitle() || '' | translate - }} - -
- -
-
-
diff --git a/src/app/routes/connector-ui/connector-ui.component.scss b/src/app/routes/connector-ui/connector-ui.component.scss deleted file mode 100644 index 67fc9a63d..000000000 --- a/src/app/routes/connector-ui/connector-ui.component.scss +++ /dev/null @@ -1,36 +0,0 @@ -.sidenav-container { - height: 100%; -} - -.sidenav { - width: 300px; -} - -.sidenav .mat-toolbar { - background: inherit; -} - -.mat-toolbar.mat-primary { - position: sticky; - top: 0; - z-index: 1; -} - -#contact-form { - text-align: center; - background: #ffffff; -} - -#contact-form a { - display: block; - margin: 16px 16px; -} - -.custom-toolbar { - margin: 3px 3px; -} - -.is-active { - cursor: pointer; - background-color: #dedede; -} diff --git a/src/app/routes/connector-ui/connector-ui.component.ts b/src/app/routes/connector-ui/connector-ui.component.ts deleted file mode 100644 index 80952b8e1..000000000 --- a/src/app/routes/connector-ui/connector-ui.component.ts +++ /dev/null @@ -1,55 +0,0 @@ -import {BreakpointObserver, Breakpoints} from '@angular/cdk/layout'; -import {Component, Inject, OnInit} from '@angular/core'; -import {Title} from '@angular/platform-browser'; -import {Observable} from 'rxjs'; -import {map, shareReplay} from 'rxjs/operators'; -import {TranslateService} from '@ngx-translate/core'; -import {NavItemGroup} from 'src/app/core/services/models/nav-item-group'; -import {NavItemsBuilder} from 'src/app/core/services/nav-items-builder'; -import {isLanguageSupported} from 'src/app/core/utils/i18n-utils'; -import {LocalStoredValue} from 'src/app/core/utils/local-stored-value'; -import {APP_CONFIG, AppConfig} from '../../core/config/app-config'; -import {LoginPollingService} from '../../core/services/login-polling.service'; - -@Component({ - selector: 'connector-ui-page-layout', - templateUrl: './connector-ui.component.html', - styleUrls: ['./connector-ui.component.scss'], -}) -export class ConnectorUiComponent implements OnInit { - isHandset$: Observable = this.breakpointObserver - .observe(Breakpoints.Handset) - .pipe( - map((result) => result.matches), - shareReplay(), - ); - - navItemGroups: NavItemGroup[] = []; - - selectedLanguage = new LocalStoredValue( - 'en', - 'selectedLanguage', - isLanguageSupported, - ); - - constructor( - @Inject(APP_CONFIG) public config: AppConfig, - public titleService: Title, - private breakpointObserver: BreakpointObserver, - private loginPollingService: LoginPollingService, - private navItemsBuilder: NavItemsBuilder, - private translateService: TranslateService, - ) { - this.navItemGroups = this.navItemsBuilder.buildNavItemGroups(); - this.translateService.setDefaultLang('en'); - this.translateService.use(this.selectedLanguage.value); - } - - ngOnInit() { - this.startLoginPolling(); - } - - private startLoginPolling() { - this.loginPollingService.startPolling(); - } -} diff --git a/src/app/routes/connector-ui/connector-ui.module.ts b/src/app/routes/connector-ui/connector-ui.module.ts deleted file mode 100644 index 1419ee622..000000000 --- a/src/app/routes/connector-ui/connector-ui.module.ts +++ /dev/null @@ -1,52 +0,0 @@ -import {CommonModule} from '@angular/common'; -import {HttpClient} from '@angular/common/http'; -import {NgModule} from '@angular/core'; -import {SharedModule} from '../../shared/shared.module'; -import {AssetEditPageModule} from './asset-edit-page/asset-edit-page.module'; -import {AssetListPageModule} from './asset-list-page/asset-list-page.module'; -import {CatalogBrowserPageModule} from './catalog-browser-page/catalog-browser-page.module'; -import {ConnectorUiRoutingModule} from './connector-ui-routing.module'; -import {ConnectorUiComponent} from './connector-ui.component'; -import {ContractAgreementPageModule} from './contract-agreement-page/contract-agreement-page.module'; -import {ContractDefinitionPageModule} from './contract-definition-page/contract-definition-page.module'; -import {DashboardPageModule} from './dashboard-page/dashboard-page.module'; -import {LocationHistoryUtils} from './logout-page/location-history-utils'; -import {LogoutPageModule} from './logout-page/logout-page.module'; -import {PreviousRouteListener} from './logout-page/previous-route-listener'; -import {PageNotFoundPageModule} from './page-not-found-page/page-not-found-page.module'; -import {PolicyDefinitionCreatePageModule} from './policy-definition-create-page/policy-definition-create-page.module'; -import {PolicyDefinitionPageModule} from './policy-definition-page/policy-definition-page.module'; -import {TransferHistoryPageModule} from './transfer-history-page/transfer-history-page.module'; - -@NgModule({ - imports: [ - // Angular - CommonModule, - - // Features - SharedModule, - - // Pages - AssetListPageModule, - AssetEditPageModule, - CatalogBrowserPageModule, - ContractAgreementPageModule, - ContractDefinitionPageModule, - DashboardPageModule, - LogoutPageModule, - PolicyDefinitionPageModule, - PolicyDefinitionCreatePageModule, - TransferHistoryPageModule, - PageNotFoundPageModule, - - // Routing - ConnectorUiRoutingModule, - ], - declarations: [ConnectorUiComponent], - providers: [PreviousRouteListener, LocationHistoryUtils, HttpClient], -}) -export class ConnectorUiModule { - constructor(previousRouteListener: PreviousRouteListener) { - // Ensure PreviousRouteListener is instantiated - } -} diff --git a/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-cards/contract-agreement-card-mapped.service.ts b/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-cards/contract-agreement-card-mapped.service.ts deleted file mode 100644 index 16178463c..000000000 --- a/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-cards/contract-agreement-card-mapped.service.ts +++ /dev/null @@ -1,64 +0,0 @@ -import {Injectable} from '@angular/core'; -import {ContractAgreementCard} from '@sovity.de/edc-client'; -import {AssetBuilder} from '../../../../core/services/asset-builder'; -import {assetSearchTargets, search} from '../../../../core/utils/search-utils'; -import {ContractAgreementCardMapped} from './contract-agreement-card-mapped'; - -@Injectable({providedIn: 'root'}) -export class ContractAgreementCardMappedService { - constructor(private assetBuilder: AssetBuilder) {} - - /** - * Replace the asset with the parsed asset and add the other required fields of the UI model - * - * {@link ContractAgreementCardMapped} - * @param contractAgreement {@link ContractAgreementCard} - * @returns {@link ContractAgreementCardMapped} - */ - buildContractAgreementCardMapped( - contractAgreement: ContractAgreementCard, - ): ContractAgreementCardMapped { - const asset = this.assetBuilder.buildAsset(contractAgreement.asset); - const isTerminated = contractAgreement.terminationStatus === 'TERMINATED'; - - return { - ...contractAgreement, - asset, - isInProgress: contractAgreement.transferProcesses.some( - (it) => it.state.simplifiedState === 'RUNNING', - ), - isConsumingLimitsEnforced: false, - isTerminated: isTerminated, - searchTargets: [ - contractAgreement.contractAgreementId, - contractAgreement.counterPartyId, - contractAgreement.counterPartyAddress, - ...assetSearchTargets(asset), - ], - }; - } - - filter( - cards: ContractAgreementCardMapped[], - searchText: string, - ): ContractAgreementCardMapped[] { - return search(cards, searchText, (card) => card.searchTargets); - } - - withEnforcedLimits( - maxConsumingContracts: number, - agreements: ContractAgreementCardMapped[], - ): ContractAgreementCardMapped[] { - return agreements.map((it) => { - if (it.isTerminated) { - return it; - } - - const modifiedAgreement = { - ...it, - isConsumingLimitsEnforced: true, - }; - return modifiedAgreement; - }); - } -} diff --git a/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-cards/contract-agreement-card-mapped.ts b/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-cards/contract-agreement-card-mapped.ts deleted file mode 100644 index c544ab0e8..000000000 --- a/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-cards/contract-agreement-card-mapped.ts +++ /dev/null @@ -1,13 +0,0 @@ -import {ContractAgreementCard} from '@sovity.de/edc-client'; -import {UiAssetMapped} from '../../../../core/services/models/ui-asset-mapped'; - -export type ContractAgreementCardMapped = Omit< - ContractAgreementCard, - 'asset' -> & { - asset: UiAssetMapped; - isInProgress: boolean; - isConsumingLimitsEnforced: boolean; - isTerminated: boolean; - searchTargets: (string | null)[]; -}; diff --git a/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-cards/contract-agreement-cards.component.html b/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-cards/contract-agreement-cards.component.html deleted file mode 100644 index e5c8e1bc4..000000000 --- a/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-cards/contract-agreement-cards.component.html +++ /dev/null @@ -1,96 +0,0 @@ -
- - - - {{ - card.direction === 'PROVIDING' - ? card.isTerminated - ? 'file_upload_off' - : 'file_upload' - : card.isTerminated - ? 'file_download_off' - : 'file_download' - }} - - - - {{ card.asset.title }} - - - - {{ card.asset.creatorOrganizationName }} - - - - - - -
- -
-
- {{ 'general.signed' | translate }} -
-
- -
-
- - -
-
- Transfers -
-
- {{ card.transferProcesses.length | number }} -
-
-
-
- -
-
- {{ 'general.oth_connector' | translate }} -
- -
- -
-
- Status -
-
- {{ card.isTerminated ? 'Terminated' : 'Active' }} -
-
-
- - - - - - -
-
-
diff --git a/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-cards/contract-agreement-cards.component.ts b/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-cards/contract-agreement-cards.component.ts deleted file mode 100644 index 21e1f48a2..000000000 --- a/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-cards/contract-agreement-cards.component.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { - Component, - EventEmitter, - HostBinding, - Input, - Output, -} from '@angular/core'; -import {ContractAgreementCardMapped} from './contract-agreement-card-mapped'; - -@Component({ - selector: 'contract-agreement-cards', - templateUrl: './contract-agreement-cards.component.html', -}) -export class ContractAgreementCardsComponent { - @HostBinding('class.flex') - @HostBinding('class.flex-wrap') - @HostBinding('class.gap-[10px]') - cls = true; - - @Input() - contractAgreements: ContractAgreementCardMapped[] = []; - - @Output() - contractAgreementClick = new EventEmitter(); - - onContractAgreementClick(contractAgreement: ContractAgreementCardMapped) { - this.contractAgreementClick.emit(contractAgreement); - } -} diff --git a/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-page.module.ts b/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-page.module.ts deleted file mode 100644 index c5e4e945d..000000000 --- a/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-page.module.ts +++ /dev/null @@ -1,30 +0,0 @@ -import {CommonModule} from '@angular/common'; -import {NgModule} from '@angular/core'; -import {FormsModule, ReactiveFormsModule} from '@angular/forms'; -import {RouterModule} from '@angular/router'; -import {SharedModule} from '../../../shared/shared.module'; -import {ContractAgreementCardsComponent} from './contract-agreement-cards/contract-agreement-cards.component'; -import {ContractAgreementPageComponent} from './contract-agreement-page/contract-agreement-page.component'; -import {ContractAgreementTerminationDialogComponent} from './contract-agreement-termination-dialog/contract-agreement-termination-dialog.component'; -import {ContractAgreementTransferDialogComponent} from './contract-agreement-transfer-dialog/contract-agreement-transfer-dialog.component'; - -@NgModule({ - imports: [ - // Angular - CommonModule, - FormsModule, - ReactiveFormsModule, - RouterModule, - - // EDC UI Modules - SharedModule, - ], - declarations: [ - ContractAgreementPageComponent, - ContractAgreementCardsComponent, - ContractAgreementTerminationDialogComponent, - ContractAgreementTransferDialogComponent, - ], - exports: [ContractAgreementPageComponent], -}) -export class ContractAgreementPageModule {} diff --git a/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-page/contract-agreement-page.component.html b/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-page/contract-agreement-page.component.html deleted file mode 100644 index 33762b650..000000000 --- a/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-page/contract-agreement-page.component.html +++ /dev/null @@ -1,109 +0,0 @@ -
-
- - - {{ - 'contract_agreement_page.search_agree' | translate - }} - - search - - - - -
- - Active Contracts - Terminated Contracts - All Contracts - -
- - -
- - - -
- -
- - - - -
- -
- - - - - - - - - - - - - -
-
diff --git a/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-page/contract-agreement-page.component.scss b/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-page/contract-agreement-page.component.scss deleted file mode 100644 index bad3801ef..000000000 --- a/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-page/contract-agreement-page.component.scss +++ /dev/null @@ -1,13 +0,0 @@ -#wrapper { - margin: 20px; -} - -mat-paginator { - display: inline-block; - background-color: transparent; -} - -.search-form-field { - min-width: 200px; - width: 30%; -} diff --git a/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-page/contract-agreement-page.component.ts b/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-page/contract-agreement-page.component.ts deleted file mode 100644 index 5d8495fdb..000000000 --- a/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-page/contract-agreement-page.component.ts +++ /dev/null @@ -1,151 +0,0 @@ -import {Component, OnDestroy, OnInit} from '@angular/core'; -import {FormControl} from '@angular/forms'; -import { - BehaviorSubject, - EMPTY, - Observable, - Subject, - combineLatest, - concat, - distinctUntilChanged, - interval, - merge, - of, - share, - switchMap, -} from 'rxjs'; -import {catchError, filter, map, takeUntil} from 'rxjs/operators'; -import {ContractTerminationStatus} from '@sovity.de/edc-client'; -import {EdcApiService} from '../../../../core/services/api/edc-api.service'; -import {Fetched} from '../../../../core/services/models/fetched'; -import {value$} from '../../../../core/utils/form-group-utils'; -import {filterNotNull} from '../../../../core/utils/rxjs-utils'; -import {AssetDetailDialogDataService} from '../../../../shared/business/asset-detail-dialog/asset-detail-dialog-data.service'; -import {AssetDetailDialogService} from '../../../../shared/business/asset-detail-dialog/asset-detail-dialog.service'; -import {ContractAgreementCardMapped} from '../contract-agreement-cards/contract-agreement-card-mapped'; -import {ContractAgreementCardMappedService} from '../contract-agreement-cards/contract-agreement-card-mapped.service'; -import {ContractAgreementPageData} from './contract-agreement-page.data'; -import {ContractAgreementPageService} from './contract-agreement-page.service'; - -@Component({ - selector: 'app-contract-agreement-page', - templateUrl: './contract-agreement-page.component.html', - styleUrls: ['./contract-agreement-page.component.scss'], -}) -export class ContractAgreementPageComponent implements OnInit, OnDestroy { - page: Fetched = Fetched.empty(); - page$: Observable> = new Subject(); - searchText = new FormControl(''); - terminationFilterControl: FormControl = new FormControl('ONGOING'); - - terminationFilter: ContractTerminationStatus | null = 'ONGOING'; - - private fetch$ = new BehaviorSubject(null); - - constructor( - private assetDetailDialogDataService: AssetDetailDialogDataService, - private assetDetailDialogService: AssetDetailDialogService, - private contractAgreementPageService: ContractAgreementPageService, - private contractAgreementCardMappedService: ContractAgreementCardMappedService, - private apiService: EdcApiService, - ) {} - - ngOnInit(): void { - this.fetchContracts(); - } - - fetchContracts() { - this.page$ = this.contractAgreementPageService - .contractAgreementPageData$( - this.fetch$, - 5000, - this.searchText$(), - this.terminationFilter, - ) - .pipe(takeUntil(this.ngOnDestroy$), share()); - this.page$.subscribe((contractAgreementList) => { - this.page = contractAgreementList; - }); - } - - onTerminationFilterChange() { - if (this.terminationFilterControl.value === 'all') { - this.terminationFilter = null; - } else { - this.terminationFilter = this.terminationFilterControl - .value as ContractTerminationStatus; - } - - this.fetchContracts(); - } - - onContractAgreementClick(card: ContractAgreementCardMapped) { - const refresh$ = new Subject(); - - const cardUpdates$ = merge(interval(5000), refresh$).pipe( - switchMap(() => - this.apiService - .getContractAgreementById(card.contractAgreementId) - .pipe(catchError(() => EMPTY)), - ), - map((it) => - this.contractAgreementCardMappedService.buildContractAgreementCardMapped( - it, - ), - ), - ); - - const cardUpdatesWithCorrectActive$ = combineLatest([ - this.card$(card.contractAgreementId), - cardUpdates$, - ]).pipe( - map(([oldCard, newCard]) => ({ - ...newCard, - isConsumingLimitsEnforced: oldCard.isConsumingLimitsEnforced, - })), - ); - - const dialogData$ = merge(of(card), cardUpdatesWithCorrectActive$).pipe( - map((card) => - this.assetDetailDialogDataService.contractAgreementDetails(card, () => - refresh$.next(undefined), - ), - ), - ); - - return this.assetDetailDialogService.open(dialogData$, this.ngOnDestroy$); - } - - private card$( - contractAgreementId: string, - ): Observable { - return concat(of(this.page), this.page$).pipe( - filter((fetched) => fetched.isReady), - map((fetched) => fetched.data), - map((page) => - page.contractAgreements.find( - (it) => it.contractAgreementId === contractAgreementId, - ), - ), - filterNotNull(), - ); - } - - refresh() { - this.fetch$.next(null); - } - - private searchText$(): Observable { - return (value$(this.searchText) as Observable).pipe( - map((it) => (it ?? '').trim()), - distinctUntilChanged(), - ); - } - - ngOnDestroy$ = new Subject(); - - ngOnDestroy() { - this.ngOnDestroy$.next(null); - this.ngOnDestroy$.complete(); - } -} diff --git a/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-page/contract-agreement-page.data.ts b/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-page/contract-agreement-page.data.ts deleted file mode 100644 index 6856e2263..000000000 --- a/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-page/contract-agreement-page.data.ts +++ /dev/null @@ -1,12 +0,0 @@ -import {ContractAgreementPage} from '@sovity.de/edc-client'; -import {ContractAgreementCardMapped} from '../contract-agreement-cards/contract-agreement-card-mapped'; - -export type ContractAgreementPageData = Omit< - ContractAgreementPage, - 'contractAgreements' -> & { - contractAgreements: ContractAgreementCardMapped[]; - consumingContractAgreements: ContractAgreementCardMapped[]; - providingContractAgreements: ContractAgreementCardMapped[]; - numTotalContractAgreements: number; -}; diff --git a/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-page/contract-agreement-page.service.ts b/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-page/contract-agreement-page.service.ts deleted file mode 100644 index 4c127f0b7..000000000 --- a/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-page/contract-agreement-page.service.ts +++ /dev/null @@ -1,154 +0,0 @@ -import {Injectable} from '@angular/core'; -import {Observable, combineLatest, concat, interval, of} from 'rxjs'; -import {filter, map, switchMap} from 'rxjs/operators'; -import { - ConnectorLimits, - ContractAgreementCard, - ContractAgreementPage, - ContractTerminationStatus, - GetContractAgreementPageRequest, -} from '@sovity.de/edc-client'; -import {ActiveFeatureSet} from '../../../../core/config/active-feature-set'; -import {EdcApiService} from '../../../../core/services/api/edc-api.service'; -import {Fetched} from '../../../../core/services/models/fetched'; -import {ContractAgreementCardMapped} from '../contract-agreement-cards/contract-agreement-card-mapped'; -import {ContractAgreementCardMappedService} from '../contract-agreement-cards/contract-agreement-card-mapped.service'; -import {ContractAgreementPageData} from './contract-agreement-page.data'; - -@Injectable({providedIn: 'root'}) -export class ContractAgreementPageService { - constructor( - private edcApiService: EdcApiService, - private contractAgreementCardMappedService: ContractAgreementCardMappedService, - private activeFeatureSet: ActiveFeatureSet, - ) {} - - activeTerminationFilter?: ContractTerminationStatus | null; - - contractAgreementPageData$( - refresh$: Observable, - silentPollingInterval: number, - searchText$: Observable, - terminationStatusFilter?: ContractTerminationStatus | null, - ): Observable> { - this.activeTerminationFilter = terminationStatusFilter; - return combineLatest([ - refresh$.pipe( - switchMap(() => - concat( - this.fetchData(), - this.silentRefreshing(silentPollingInterval), - ), - ), - ), - searchText$, - ]).pipe( - map(([fetchedData, searchText]) => - fetchedData.map((contractAgreementPage) => - this.filterContractAgreementPage(contractAgreementPage, searchText), - ), - ), - ); - } - - private fetchData(): Observable> { - const requestBody: GetContractAgreementPageRequest = { - contractAgreementPageQuery: { - terminationStatus: this.activeTerminationFilter ?? undefined, - }, - }; - - return combineLatest([ - this.edcApiService.getContractAgreementPage(requestBody), - this.fetchLimits(), - ]).pipe( - map(([contractAgreementPage, connectorLimits]) => - this.buildContractAgreementPageData( - contractAgreementPage, - connectorLimits, - ), - ), - Fetched.wrap({failureMessage: 'Failed fetching Contract Agreement Page'}), - ); - } - - private buildContractAgreementPageData( - contractAgreementPage: ContractAgreementPage, - connectorLimits: ConnectorLimits | null, - ): ContractAgreementPageData { - const contractAgreements = this.mapContractAgreements( - contractAgreementPage.contractAgreements, - ); - - let consumingContractAgreements = contractAgreements.filter( - (it) => it.direction === 'CONSUMING', - ); - const providingContractAgreements = contractAgreements.filter( - (it) => it.direction === 'PROVIDING', - ); - - const isConsumingLimitsEnforced = - connectorLimits?.maxActiveConsumingContractAgreements != null && - connectorLimits.maxActiveConsumingContractAgreements >= 0; - if (isConsumingLimitsEnforced) { - consumingContractAgreements = - this.contractAgreementCardMappedService.withEnforcedLimits( - connectorLimits?.maxActiveConsumingContractAgreements!, - consumingContractAgreements, - ); - } - - return { - contractAgreements: [ - ...providingContractAgreements, - ...consumingContractAgreements, - ], - consumingContractAgreements, - providingContractAgreements, - numTotalContractAgreements: contractAgreements.length, - }; - } - - private mapContractAgreements( - contractAgreements: ContractAgreementCard[], - ): ContractAgreementCardMapped[] { - return contractAgreements.map((contractAgreement) => - this.contractAgreementCardMappedService.buildContractAgreementCardMapped( - contractAgreement, - ), - ); - } - - private filterContractAgreementPage( - contractAgreementPage: ContractAgreementPageData, - searchText: string, - ): ContractAgreementPageData { - return { - ...contractAgreementPage, - consumingContractAgreements: - this.contractAgreementCardMappedService.filter( - contractAgreementPage.consumingContractAgreements, - searchText, - ), - providingContractAgreements: - this.contractAgreementCardMappedService.filter( - contractAgreementPage.providingContractAgreements, - searchText, - ), - }; - } - - private silentRefreshing(silentPollingInterval: number) { - return interval(silentPollingInterval).pipe( - switchMap(() => this.fetchData()), - filter((it) => it.isReady), - ); - } - - private fetchLimits(): Observable { - if (this.activeFeatureSet.hasConnectorLimits()) { - return this.edcApiService.getEnterpriseEditionConnectorLimits(); - } - return of(null); - } -} diff --git a/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-termination-dialog/contract-agreement-termination-dialog-data.ts b/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-termination-dialog/contract-agreement-termination-dialog-data.ts deleted file mode 100644 index 244defa73..000000000 --- a/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-termination-dialog/contract-agreement-termination-dialog-data.ts +++ /dev/null @@ -1,6 +0,0 @@ -import {UiAssetMapped} from '../../../../core/services/models/ui-asset-mapped'; - -export interface ContractAgreementTerminationDialogData { - contractId: string; - asset: UiAssetMapped; -} diff --git a/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-termination-dialog/contract-agreement-termination-dialog-form-model.ts b/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-termination-dialog/contract-agreement-termination-dialog-form-model.ts deleted file mode 100644 index 747fcdd36..000000000 --- a/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-termination-dialog/contract-agreement-termination-dialog-form-model.ts +++ /dev/null @@ -1,15 +0,0 @@ -import {FormControl, ɵFormGroupValue} from '@angular/forms'; - -/** - * Form Value Type - */ -export type ContractAgreementTransferDialogFormValue = - ɵFormGroupValue; - -/** - * Form Group Template Type - */ -export interface ContractAgreementTerminationDialogFormModel { - shortReason: FormControl; - detailedReason: FormControl; -} diff --git a/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-termination-dialog/contract-agreement-termination-dialog-form.ts b/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-termination-dialog/contract-agreement-termination-dialog-form.ts deleted file mode 100644 index aaf2af2d5..000000000 --- a/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-termination-dialog/contract-agreement-termination-dialog-form.ts +++ /dev/null @@ -1,32 +0,0 @@ -import {Injectable} from '@angular/core'; -import {FormBuilder, FormGroup, Validators} from '@angular/forms'; -import { - ContractAgreementTerminationDialogFormModel, - ContractAgreementTransferDialogFormValue, -} from './contract-agreement-termination-dialog-form-model'; - -/** - * Handles AngularForms for ContractAgreementTerminationDialog - */ -@Injectable() -export class ContractAgreementTerminationDialogForm { - all = this.buildFormGroup(); - - /** - * Quick access to full value - */ - get value(): ContractAgreementTransferDialogFormValue { - return this.all.value; - } - - constructor(private formBuilder: FormBuilder) {} - - buildFormGroup(): FormGroup { - const formGroup = this.formBuilder.nonNullable.group({ - shortReason: ['Terminated by user', Validators.required], - detailedReason: ['', [Validators.required, Validators.maxLength(1000)]], - }); - formGroup.controls.shortReason.disable(); - return formGroup; - } -} diff --git a/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-termination-dialog/contract-agreement-termination-dialog-result.ts b/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-termination-dialog/contract-agreement-termination-dialog-result.ts deleted file mode 100644 index 753cd2db8..000000000 --- a/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-termination-dialog/contract-agreement-termination-dialog-result.ts +++ /dev/null @@ -1,4 +0,0 @@ -export interface ContractAgreementTerminationDialogResult { - contractId: string; - lastUpdatedTime: Date | null; -} diff --git a/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-termination-dialog/contract-agreement-termination-dialog.component.html b/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-termination-dialog/contract-agreement-termination-dialog.component.html deleted file mode 100644 index 64cd56a8f..000000000 --- a/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-termination-dialog/contract-agreement-termination-dialog.component.html +++ /dev/null @@ -1,71 +0,0 @@ -

Terminate Contract Agreement

- -
-
-
- By clicking the 'Terminate Contract' button, you will terminate the - contract agreement. New data transfers via this agreement will no longer - be possible and current transfer processes will be canceled. -
-
This action is irreversible.
-
- -
-
Termination Details
- - - Reason - - - - - Detailed reason - - {{ form.all.controls.detailedReason.value.length }}/1000 - characters - - Maximum 1000 characters allowed. - - - Field is required. - - -
-
- - -
- - I understand the consequences of terminating a contract. - -
-
- - - - - - diff --git a/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-termination-dialog/contract-agreement-termination-dialog.component.ts b/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-termination-dialog/contract-agreement-termination-dialog.component.ts deleted file mode 100644 index 84a32dc84..000000000 --- a/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-termination-dialog/contract-agreement-termination-dialog.component.ts +++ /dev/null @@ -1,88 +0,0 @@ -import {Component, Inject, OnDestroy} from '@angular/core'; -import {MatCheckboxChange} from '@angular/material/checkbox'; -import {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog'; -import {Observable, Subject} from 'rxjs'; -import {finalize} from 'rxjs/operators'; -import {IdResponseDto} from '@sovity.de/edc-client'; -import {EdcApiService} from '../../../../core/services/api/edc-api.service'; -import {NotificationService} from '../../../../core/services/notification.service'; -import {ContractAgreementTerminationDialogData} from './contract-agreement-termination-dialog-data'; -import {ContractAgreementTerminationDialogForm} from './contract-agreement-termination-dialog-form'; -import {ContractAgreementTerminationDialogResult} from './contract-agreement-termination-dialog-result'; - -@Component({ - selector: 'contract-agreement-transfer-dialog', - templateUrl: './contract-agreement-termination-dialog.component.html', - providers: [ContractAgreementTerminationDialogForm], -}) -export class ContractAgreementTerminationDialogComponent implements OnDestroy { - loading = false; - checkboxChecked = false; - - constructor( - public form: ContractAgreementTerminationDialogForm, - private dialogRef: MatDialogRef, - private edcApiService: EdcApiService, - private notificationService: NotificationService, - @Inject(MAT_DIALOG_DATA) - public data: ContractAgreementTerminationDialogData, - ) {} - - public onCheckboxChange($event: MatCheckboxChange) { - this.checkboxChecked = $event.checked; - } - - onSave() { - if (this.loading && !this.form.all.valid) { - return; - } - - this.initiateTermination(); - } - - private initiateTermination() { - this.loading = true; - this.form.all.disable(); - - const value = this.form.value; - let request$: Observable; - request$ = this.edcApiService.terminateContractAgreement({ - contractAgreementId: this.data.contractId, - contractTerminationRequest: { - reason: value.shortReason!, - detail: value.detailedReason!, - }, - }); - - request$ - .pipe( - finalize(() => { - this.loading = false; - this.form.all.enable(); - }), - ) - .subscribe({ - next: (response) => { - this.close({ - contractId: response.id, - lastUpdatedTime: response.lastUpdatedDate, - }); - }, - error: (error) => { - this.notificationService.showError('Contract termination failed!'); - console.error('Contract termination failed', error); - }, - }); - } - - private close(params: ContractAgreementTerminationDialogResult) { - this.dialogRef.close(params); - } - - ngOnDestroy$ = new Subject(); - - ngOnDestroy(): void { - this.ngOnDestroy$.next(null); - this.ngOnDestroy$.complete(); - } -} diff --git a/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-transfer-dialog/contract-agreement-transfer-dialog-data.ts b/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-transfer-dialog/contract-agreement-transfer-dialog-data.ts deleted file mode 100644 index 7efa74e0f..000000000 --- a/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-transfer-dialog/contract-agreement-transfer-dialog-data.ts +++ /dev/null @@ -1,6 +0,0 @@ -import {UiAssetMapped} from '../../../../core/services/models/ui-asset-mapped'; - -export interface ContractAgreementTransferDialogData { - contractId: string; - asset: UiAssetMapped; -} diff --git a/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-transfer-dialog/contract-agreement-transfer-dialog-form-model.ts b/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-transfer-dialog/contract-agreement-transfer-dialog-form-model.ts deleted file mode 100644 index 65b6da841..000000000 --- a/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-transfer-dialog/contract-agreement-transfer-dialog-form-model.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { - FormArray, - FormControl, - FormGroup, - ɵFormGroupValue, -} from '@angular/forms'; -import {HttpDatasourceQueryParamFormModel} from '../../../../shared/business/edit-asset-form/form/model/http-datasource-query-param-form-model'; -import {DataAddressType} from '../../../../shared/form-elements/data-address-type-select/data-address-type'; -import {HttpDatasinkAuthHeaderType} from './http-datasink-auth-header-type'; -import {HttpDatasinkHeaderFormModel} from './http-datasink-header-form-model'; - -/** - * Form Value Type - */ -export type ContractAgreementTransferDialogFormValue = - ɵFormGroupValue; - -/** - * Form Group Template Type - */ -export interface ContractAgreementTransferDialogFormModel { - dataAddressType: FormControl; - - // Custom Datasink JSON - dataDestination: FormControl; - - // Custom Transfer Process Request JSON - transferProcessRequest: FormControl; - - // Http Datasink - httpUrl: FormControl; - httpMethod: FormControl; - - showAllHttpParameterizationFields: FormControl; - - httpAuthHeaderType: FormControl; - httpAuthHeaderName: FormControl; - httpAuthHeaderValue: FormControl; - httpAuthHeaderSecretName: FormControl; - httpHeaders: FormArray>; - - // Http Datasource Parameterization - httpProxiedPath: FormControl; - httpProxiedMethod: FormControl; - httpProxiedQueryParams: FormArray< - FormGroup - >; - httpProxiedBody: FormControl; - httpProxiedBodyContentType: FormControl; -} diff --git a/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-transfer-dialog/contract-agreement-transfer-dialog-form.ts b/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-transfer-dialog/contract-agreement-transfer-dialog-form.ts deleted file mode 100644 index 288b34753..000000000 --- a/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-transfer-dialog/contract-agreement-transfer-dialog-form.ts +++ /dev/null @@ -1,147 +0,0 @@ -import {Injectable} from '@angular/core'; -import {FormBuilder, FormGroup, Validators} from '@angular/forms'; -import {switchDisabledControls} from '../../../../core/utils/form-group-utils'; -import {jsonValidator} from '../../../../core/validators/json-validator'; -import {urlValidator} from '../../../../core/validators/url-validator'; -import {HttpDatasourceAuthHeaderType} from '../../../../shared/business/edit-asset-form/form/model/http-datasource-auth-header-type'; -import {HttpDatasourceQueryParamFormModel} from '../../../../shared/business/edit-asset-form/form/model/http-datasource-query-param-form-model'; -import {DataAddressType} from '../../../../shared/form-elements/data-address-type-select/data-address-type'; -import { - ContractAgreementTransferDialogFormModel, - ContractAgreementTransferDialogFormValue, -} from './contract-agreement-transfer-dialog-form-model'; -import {HttpDatasinkHeaderFormModel} from './http-datasink-header-form-model'; - -/** - * Handles AngularForms for ContractAgreementTransferDialog - */ -@Injectable() -export class ContractAgreementTransferDialogForm { - all = this.buildFormGroup(); - - /** - * Quick access to selected data address type - */ - get dataAddressType(): DataAddressType | null { - return this.all.controls.dataAddressType.value; - } - - /** - * Quick access to full value - */ - get value(): ContractAgreementTransferDialogFormValue { - return this.all.value; - } - - constructor(private formBuilder: FormBuilder) {} - - buildFormGroup(): FormGroup { - const all: FormGroup = - this.formBuilder.nonNullable.group({ - dataAddressType: 'Http' as DataAddressType, - dataDestination: ['', [Validators.required, jsonValidator]], - transferProcessRequest: ['', [Validators.required, jsonValidator]], - - // Http Datasink Fields - httpUrl: ['', [Validators.required, urlValidator]], - httpMethod: ['POST', Validators.required], - - httpAuthHeaderType: ['None' as HttpDatasourceAuthHeaderType], - httpAuthHeaderName: ['', Validators.required], - httpAuthHeaderValue: ['', Validators.required], - httpAuthHeaderSecretName: ['', Validators.required], - - httpHeaders: this.formBuilder.array( - new Array>(), - ), - - showAllHttpParameterizationFields: [false], - - httpProxiedPath: [''], - httpProxiedMethod: ['', Validators.required], - httpProxiedQueryParams: this.formBuilder.array( - new Array>(), - ), - httpProxiedBody: [''], - httpProxiedBodyContentType: [''], - }); - - switchDisabledControls( - all, - (value) => { - const customDataAddressJson = - value.dataAddressType === 'Custom-Data-Address-Json'; - - const customTransferProcessRequest = - value.dataAddressType === 'Custom-Transfer-Process-Request'; - - const http = value.dataAddressType === 'Http'; - const httpAuth = value.httpAuthHeaderType !== 'None'; - const httpAuthByValue = value.httpAuthHeaderType === 'Value'; - const httpAuthByVault = value.httpAuthHeaderType === 'Vault-Secret'; - - const httpProxiedMethod = !!value.showAllHttpParameterizationFields; - - return { - dataAddressType: true, - - // Custom Datasink JSON - dataDestination: customDataAddressJson, - transferProcessRequest: customTransferProcessRequest, - - // Http Datasink Fields - httpUrl: http, - httpMethod: http, - - httpAuthHeaderType: http, - httpAuthHeaderName: http && httpAuth, - httpAuthHeaderValue: http && httpAuthByValue, - httpAuthHeaderSecretName: http && httpAuthByVault, - - httpHeaders: http, - - showAllHttpParameterizationFields: !customTransferProcessRequest, - - httpProxiedPath: !customTransferProcessRequest, - httpProxiedMethod: !customTransferProcessRequest && httpProxiedMethod, - httpProxiedQueryParams: !customTransferProcessRequest, - httpProxiedBody: !customTransferProcessRequest, - httpProxiedBodyContentType: !customTransferProcessRequest, - }; - }, - ); - return all; - } - - buildHeaderFormGroup(): FormGroup { - return this.formBuilder.nonNullable.group({ - headerName: ['', Validators.required], - headerValue: ['', Validators.required], - }); - } - - buildQueryParamFormGroup(): FormGroup { - return this.formBuilder.nonNullable.group({ - paramName: ['', Validators.required], - paramValue: [''], - }); - } - - onHttpHeadersAddClick() { - this.all.controls.httpHeaders.push(this.buildHeaderFormGroup()); - } - - onHttpHeadersRemoveClick(index: number) { - this.all.controls.httpHeaders.removeAt(index); - } - - onHttpQueryParamsAddClick() { - this.all.controls.httpProxiedQueryParams.push( - this.buildQueryParamFormGroup(), - ); - } - - onHttpQueryParamsRemoveClick(index: number) { - this.all.controls.httpProxiedQueryParams.removeAt(index); - } -} diff --git a/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-transfer-dialog/contract-agreement-transfer-dialog-result.ts b/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-transfer-dialog/contract-agreement-transfer-dialog-result.ts deleted file mode 100644 index db4068420..000000000 --- a/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-transfer-dialog/contract-agreement-transfer-dialog-result.ts +++ /dev/null @@ -1,4 +0,0 @@ -export interface ContractAgreementTransferDialogResult { - transferProcessId: string; - contractId: string; -} diff --git a/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-transfer-dialog/contract-agreement-transfer-dialog.component.html b/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-transfer-dialog/contract-agreement-transfer-dialog.component.html deleted file mode 100644 index 1414fa2cb..000000000 --- a/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-transfer-dialog/contract-agreement-transfer-dialog.component.html +++ /dev/null @@ -1,410 +0,0 @@ -

- {{ 'contract_agreement_page.ini_transfer' | translate }} -

- -
-
-
- {{ 'contract_agreement_page.datasink' | translate }} -
- - - - - - - {{ - 'contract_agreement_page.cus_datasink' | translate - }} - - - {{ validationMessages.invalidJsonMessage }} - - - - - - {{ - 'contract_agreement_page.cus_transfer' | translate - }} - - - {{ validationMessages.invalidJsonMessage }} - - - {{ 'contract_agreement_page.json_hint' | translate }} - - - - - - -
- - - {{ 'general.method' | translate }} - - {{ method }} - - - - URL - - - {{ validationMessages.invalidUrlMessage }} - - -
- -
{{ 'general.auth' | translate }}
- - -
- -
- - - - Type - - - {{ 'general.header_sec' | translate }} - - {{ - 'general.header_val' | translate - }} - - -
- - - {{ 'general.auth_header' | translate }} - - - - - - {{ 'general.auth_value' | translate }} - - - - - - {{ 'general.vault_secret' | translate }} - - -
- - -
- -
- -
- {{ 'general.add_header' | translate }} -
- -
- - - {{ 'general.header_name' | translate }} - - - - - - {{ 'general.header_value' | translate }} - - - - - -
- - -
- -
-
- - -
- {{ 'contract_agreement_page.http_para' | translate }} -
- -
- {{ 'contract_agreement_page.http_message' | translate }} -
- -
- {{ 'contract_agreement_page.res_url' | translate }} - {{ - '{baseUrl}{customSubPath}?{baseQueryParams}&{customQueryParams}' - }} -
- -
- - - - {{ - 'contract_agreement_page.cus_meth' | translate - }} - - - {{ method }} - - - {{ - 'contract_agreement_page.proxy_method' | translate - }} - - - - - - - {{ - 'contract_agreement_page.cus_sub' | translate - }} - - {{ - 'contract_agreement_page.proxy_path' | translate - }} - - -
- - -
- - - {{ - 'contract_agreement_page.cus_query' | translate - }} - - - {{ 'contract_agreement_page.proxy_query' | translate }} - - - - - - {{ 'general.value' | translate }} - - - - - -
- -
- - -
-
- - - - - {{ - 'contract_agreement_page.req_cont' | translate - }} - - - {{ 'contract_agreement_page.proxy_body' | translate }} - - - - - - {{ - 'contract_agreement_page.req_body' | translate - }} - - - {{ 'contract_agreement_page.proxy_body' | translate }} - - - - -
- -
-
-
-
-
- - - - - - diff --git a/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-transfer-dialog/contract-agreement-transfer-dialog.component.ts b/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-transfer-dialog/contract-agreement-transfer-dialog.component.ts deleted file mode 100644 index c2ae2e7c2..000000000 --- a/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-transfer-dialog/contract-agreement-transfer-dialog.component.ts +++ /dev/null @@ -1,167 +0,0 @@ -import {Component, Inject, OnDestroy} from '@angular/core'; -import {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog'; -import {Observable, Subject} from 'rxjs'; -import {finalize} from 'rxjs/operators'; -import { - IdResponseDto, - InitiateCustomTransferRequest, - InitiateTransferRequest, -} from '@sovity.de/edc-client'; -import {EdcApiService} from '../../../../core/services/api/edc-api.service'; -import {DataAddressMapper} from '../../../../core/services/data-address-mapper'; -import {NotificationService} from '../../../../core/services/notification.service'; -import {TransferDataSinkMapper} from '../../../../core/services/transfer-data-sink-mapper'; -import {ValidationMessages} from '../../../../core/validators/validation-messages'; -import { - DATA_SINK_HTTP_METHODS, - DATA_SOURCE_HTTP_METHODS, -} from '../../../../shared/business/edit-asset-form/form/http-methods'; -import {ContractAgreementTransferDialogData} from './contract-agreement-transfer-dialog-data'; -import {ContractAgreementTransferDialogForm} from './contract-agreement-transfer-dialog-form'; -import {ContractAgreementTransferDialogFormValue} from './contract-agreement-transfer-dialog-form-model'; -import {ContractAgreementTransferDialogResult} from './contract-agreement-transfer-dialog-result'; - -@Component({ - selector: 'contract-agreement-transfer-dialog', - templateUrl: './contract-agreement-transfer-dialog.component.html', - providers: [ContractAgreementTransferDialogForm], -}) -export class ContractAgreementTransferDialogComponent implements OnDestroy { - loading = false; - - dataSinkMethods = DATA_SINK_HTTP_METHODS; - dataSourceMethods = DATA_SOURCE_HTTP_METHODS; - - get proxyMethod(): boolean { - return ( - this.showAllHttpParameterizationFields || - this.data.asset.httpDatasourceHintsProxyMethod === true - ); - } - - get proxyPath(): boolean { - return ( - this.showAllHttpParameterizationFields || - this.data.asset.httpDatasourceHintsProxyPath === true - ); - } - - get proxyQueryParams(): boolean { - return ( - this.showAllHttpParameterizationFields || - this.data.asset.httpDatasourceHintsProxyQueryParams === true - ); - } - - get proxyBody(): boolean { - return ( - this.showAllHttpParameterizationFields || - this.data.asset.httpDatasourceHintsProxyBody === true - ); - } - - get showHttpParameterizationToggleButton(): boolean { - return ( - this.data.asset.httpDatasourceHintsProxyMethod !== true || - this.data.asset.httpDatasourceHintsProxyPath !== true || - this.data.asset.httpDatasourceHintsProxyQueryParams !== true || - this.data.asset.httpDatasourceHintsProxyBody !== true - ); - } - - get showAllHttpParameterizationFields(): boolean { - return this.form.all.controls.showAllHttpParameterizationFields.value; - } - - constructor( - public form: ContractAgreementTransferDialogForm, - public validationMessages: ValidationMessages, - private dialogRef: MatDialogRef, - private edcApiService: EdcApiService, - private notificationService: NotificationService, - private httpRequestParamsMapper: TransferDataSinkMapper, - private dataAddressMapper: DataAddressMapper, - @Inject(MAT_DIALOG_DATA) public data: ContractAgreementTransferDialogData, - ) {} - - onSave() { - if (this.loading && !this.form.all.valid) { - return; - } - - this.initiateTransfer(); - } - - private initiateTransfer() { - this.loading = true; - this.form.all.disable(); - - const value = this.form.value; - let request$: Observable; - if (value.dataAddressType === 'Custom-Transfer-Process-Request') { - const request = this.buildCustomTransferRequest(value); - request$ = this.edcApiService.initiateCustomTransfer(request); - } else { - const request = this.buildTransferRequest(value); - request$ = this.edcApiService.initiateTransfer(request); - } - - request$ - .pipe( - finalize(() => { - this.loading = false; - this.form.all.enable(); - }), - ) - .subscribe({ - next: (response) => - this.close({ - transferProcessId: response.id!, - contractId: this.data.contractId, - }), - error: (err) => { - this.notificationService.showError('Failed initiating transfer!'); - console.error('Failed initiating transfer', err); - }, - }); - } - - private close(params: ContractAgreementTransferDialogResult) { - this.dialogRef.close(params); - } - - ngOnDestroy$ = new Subject(); - - ngOnDestroy(): void { - this.ngOnDestroy$.next(null); - this.ngOnDestroy$.complete(); - } - - private buildTransferRequest( - value: ContractAgreementTransferDialogFormValue, - ): InitiateTransferRequest { - const transferProcessProperties = - this.httpRequestParamsMapper.encodeHttpProxyTransferRequestProperties( - this.data.asset, - value, - ); - - const dataSinkProperties = - this.dataAddressMapper.buildDataAddressProperties(value) ?? {}; - - return { - contractAgreementId: this.data.contractId, - transferProcessProperties, - dataSinkProperties, - }; - } - - private buildCustomTransferRequest( - value: ContractAgreementTransferDialogFormValue, - ): InitiateCustomTransferRequest { - return { - contractAgreementId: this.data.contractId, - transferProcessRequestJsonLd: value.transferProcessRequest!, - }; - } -} diff --git a/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-transfer-dialog/http-datasink-auth-header-type.ts b/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-transfer-dialog/http-datasink-auth-header-type.ts deleted file mode 100644 index af3bcb614..000000000 --- a/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-transfer-dialog/http-datasink-auth-header-type.ts +++ /dev/null @@ -1 +0,0 @@ -export type HttpDatasinkAuthHeaderType = 'None' | 'Value' | 'Vault-Secret'; diff --git a/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-transfer-dialog/http-datasink-header-form-model.ts b/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-transfer-dialog/http-datasink-header-form-model.ts deleted file mode 100644 index 0ce1303e2..000000000 --- a/src/app/routes/connector-ui/contract-agreement-page/contract-agreement-transfer-dialog/http-datasink-header-form-model.ts +++ /dev/null @@ -1,15 +0,0 @@ -import {FormControl, ɵFormGroupValue} from '@angular/forms'; - -/** - * Form Model for ContractAgreementTransferDialog > Datasink > HTTP/REST > Header - */ -export interface HttpDatasinkHeaderFormModel { - headerName: FormControl; - headerValue: FormControl; -} - -/** - * Form Value for ContractAgreementTransferDialog > Datasink > HTTP/REST > Header - */ -export type HttpDatasinkHeaderFormValue = - ɵFormGroupValue; diff --git a/src/app/routes/connector-ui/contract-definition-page/asset-select/asset-select.component.html b/src/app/routes/connector-ui/contract-definition-page/asset-select/asset-select.component.html deleted file mode 100644 index 78b49f38e..000000000 --- a/src/app/routes/connector-ui/contract-definition-page/asset-select/asset-select.component.html +++ /dev/null @@ -1,27 +0,0 @@ -
- - {{ label }} - - -
- {{ asset.title }} -
-
-
-
- -
diff --git a/src/app/routes/connector-ui/contract-definition-page/asset-select/asset-select.component.ts b/src/app/routes/connector-ui/contract-definition-page/asset-select/asset-select.component.ts deleted file mode 100644 index 500c812b3..000000000 --- a/src/app/routes/connector-ui/contract-definition-page/asset-select/asset-select.component.ts +++ /dev/null @@ -1,38 +0,0 @@ -import {Component, Input, OnDestroy} from '@angular/core'; -import {FormControl} from '@angular/forms'; -import {Subject} from 'rxjs'; -import {UiAssetMapped} from '../../../../core/services/models/ui-asset-mapped'; -import {AssetDetailDialogDataService} from '../../../../shared/business/asset-detail-dialog/asset-detail-dialog-data.service'; -import {AssetDetailDialogService} from '../../../../shared/business/asset-detail-dialog/asset-detail-dialog.service'; - -@Component({ - selector: 'asset-select', - templateUrl: './asset-select.component.html', -}) -export class AssetSelectComponent implements OnDestroy { - @Input() - label!: string; - - @Input() - control!: FormControl; - - @Input() - assets: UiAssetMapped[] = []; - - constructor( - private assetDetailDialogDataService: AssetDetailDialogDataService, - private assetDetailDialogService: AssetDetailDialogService, - ) {} - - onAssetClick(asset: UiAssetMapped) { - const data = this.assetDetailDialogDataService.assetDetailsReadonly(asset); - this.assetDetailDialogService.open(data, this.ngOnDestroy$); - } - - ngOnDestroy$ = new Subject(); - - ngOnDestroy() { - this.ngOnDestroy$.next(null); - this.ngOnDestroy$.complete(); - } -} diff --git a/src/app/routes/connector-ui/contract-definition-page/contract-definition-cards/contract-definition-card-builder.ts b/src/app/routes/connector-ui/contract-definition-page/contract-definition-cards/contract-definition-card-builder.ts deleted file mode 100644 index 57793559e..000000000 --- a/src/app/routes/connector-ui/contract-definition-page/contract-definition-cards/contract-definition-card-builder.ts +++ /dev/null @@ -1,126 +0,0 @@ -import {Injectable} from '@angular/core'; -import { - ContractDefinitionEntry, - ContractDefinitionPage, - PolicyDefinitionDto, - UiCriterion, -} from '@sovity.de/edc-client'; -import {CRITERION_OPERATOR_SYMBOLS} from '../../../../core/services/api/model/criterion-type-ext'; -import {AssetProperty} from '../../../../core/services/models/asset-properties'; -import {UiAssetMapped} from '../../../../core/services/models/ui-asset-mapped'; -import {associateBy} from '../../../../core/utils/map-utils'; -import {assetSearchTargets} from '../../../../core/utils/search-utils'; -import { - ContractDefinitionCard, - ContractDefinitionCardCriterionValue, - ContractDefinitionCardPolicy, -} from './contract-definition-card'; - -@Injectable({providedIn: 'root'}) -export class ContractDefinitionCardBuilder { - buildContractDefinitionCards( - contractDefinitionPage: ContractDefinitionPage, - assets: UiAssetMapped[], - policyDefinitions: PolicyDefinitionDto[], - ): ContractDefinitionCard[] { - const assetById = associateBy(assets, (asset) => asset.assetId); - const policyDefinitionById = associateBy( - policyDefinitions, - (policyDefinition) => policyDefinition.policyDefinitionId, - ); - - return contractDefinitionPage.contractDefinitions.map( - (contractDefinition) => - this.buildContractDefinitionCard( - contractDefinition, - assetById, - policyDefinitionById, - ), - ); - } - - buildContractDefinitionCard( - contractDefinition: ContractDefinitionEntry, - assetById: Map, - policyDefinitionById: Map, - ): ContractDefinitionCard { - return { - id: contractDefinition.contractDefinitionId, - contractPolicy: this.extractPolicy( - contractDefinition.contractPolicyId, - policyDefinitionById, - ), - accessPolicy: this.extractPolicy( - contractDefinition.accessPolicyId, - policyDefinitionById, - ), - - criteria: contractDefinition.assetSelector.map((criterion) => ({ - label: this.extractCriterionOperation(criterion), - values: this.extractCriterionValues(criterion, assetById), - })), - detailJsonObj: contractDefinition, - }; - } - - private extractPolicy( - policyDefinitionId: string, - policyDefinitionsById: Map, - ): ContractDefinitionCardPolicy { - return { - policyDefinitionId: policyDefinitionId, - policyDefinition: policyDefinitionsById.get(policyDefinitionId) || null, - }; - } - - private extractCriterionOperation(criterion: UiCriterion): string { - const {operandLeft, operator} = criterion; - if ( - operandLeft === AssetProperty.id && - (operator === 'EQ' || operator === 'IN') - ) { - return 'Assets'; - } - - const operatorStr = CRITERION_OPERATOR_SYMBOLS[operator] ?? operator; - return `${operandLeft} ${operatorStr}`; - } - - private extractCriterionValues( - criterion: UiCriterion, - assetsById: Map, - ): ContractDefinitionCardCriterionValue[] { - const {operandLeft, operandRight} = criterion; - - let values: string[] = []; - if (operandRight.type === 'VALUE_LIST') { - values = operandRight.valueList ?? []; - } else { - values = [operandRight.value!!]; - } - - return values.map((it) => { - const stringType: ContractDefinitionCardCriterionValue = { - type: 'string', - value: it, - searchTargets: [it], - }; - - // Try to find asset - if (operandLeft === AssetProperty.id) { - const asset = assetsById.get(it); - if (asset) { - return { - type: 'asset', - asset, - searchTargets: assetSearchTargets(asset), - }; - } - - return stringType; - } - - return stringType; - }); - } -} diff --git a/src/app/routes/connector-ui/contract-definition-page/contract-definition-cards/contract-definition-card.ts b/src/app/routes/connector-ui/contract-definition-page/contract-definition-cards/contract-definition-card.ts deleted file mode 100644 index ed1113e23..000000000 --- a/src/app/routes/connector-ui/contract-definition-page/contract-definition-cards/contract-definition-card.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { - ContractDefinitionEntry, - PolicyDefinitionDto, -} from '@sovity.de/edc-client'; -import {UiAssetMapped} from '../../../../core/services/models/ui-asset-mapped'; - -export interface ContractDefinitionCard { - id: string; - criteria: ContractDefinitionCardCriterion[]; - contractPolicy: ContractDefinitionCardPolicy; - accessPolicy: ContractDefinitionCardPolicy; - - detailJsonObj: ContractDefinitionEntry; -} - -export interface ContractDefinitionCardPolicy { - policyDefinitionId: string; - policyDefinition: PolicyDefinitionDto | null; -} - -export interface ContractDefinitionCardCriterion { - label: string; - values: ContractDefinitionCardCriterionValue[]; -} - -export interface ContractDefinitionCardCriterionValue { - type: 'string' | 'asset' | 'json'; - searchTargets: (string | null)[]; - value?: string; - asset?: UiAssetMapped; - json?: any; -} diff --git a/src/app/routes/connector-ui/contract-definition-page/contract-definition-cards/contract-definition-cards.component.html b/src/app/routes/connector-ui/contract-definition-page/contract-definition-cards/contract-definition-cards.component.html deleted file mode 100644 index f221f9ea0..000000000 --- a/src/app/routes/connector-ui/contract-definition-page/contract-definition-cards/contract-definition-cards.component.html +++ /dev/null @@ -1,76 +0,0 @@ -
- - - policy - - - {{ card.id }} - - - {{ 'general.con_def' | translate }} - - -
-
- {{ 'general.access_pol' | translate }} -
-
- - {{ card.accessPolicy.policyDefinitionId }} - - - {{ card.accessPolicy.policyDefinitionId }} - -
-
-
-
- {{ 'general.contract_policy' | translate }} -
-
- - {{ card.contractPolicy.policyDefinitionId }} - - - {{ card.contractPolicy.policyDefinitionId }} - -
-
-
-
- {{ criterion.label }} -
-
- {{ - value.value - }} - {{ - value.json | json - }} - - {{ value.asset!.title }} - -
-
-
-
-
diff --git a/src/app/routes/connector-ui/contract-definition-page/contract-definition-cards/contract-definition-cards.component.ts b/src/app/routes/connector-ui/contract-definition-page/contract-definition-cards/contract-definition-cards.component.ts deleted file mode 100644 index 60b44cbaf..000000000 --- a/src/app/routes/connector-ui/contract-definition-page/contract-definition-cards/contract-definition-cards.component.ts +++ /dev/null @@ -1,111 +0,0 @@ -import { - Component, - EventEmitter, - HostBinding, - Input, - OnDestroy, - Output, -} from '@angular/core'; -import {MatDialog, MatDialogRef} from '@angular/material/dialog'; -import {EMPTY, Subject} from 'rxjs'; -import {catchError, filter, tap} from 'rxjs/operators'; -import {TranslateService} from '@ngx-translate/core'; -import {PolicyDefinitionDto} from '@sovity.de/edc-client'; -import {EdcApiService} from '../../../../core/services/api/edc-api.service'; -import {UiAssetMapped} from '../../../../core/services/models/ui-asset-mapped'; -import {NotificationService} from '../../../../core/services/notification.service'; -import {AssetDetailDialogDataService} from '../../../../shared/business/asset-detail-dialog/asset-detail-dialog-data.service'; -import {AssetDetailDialogService} from '../../../../shared/business/asset-detail-dialog/asset-detail-dialog.service'; -import {ConfirmDialogModel} from '../../../../shared/common/confirmation-dialog/confirmation-dialog.component'; -import {JsonDialogComponent} from '../../../../shared/common/json-dialog/json-dialog.component'; -import {JsonDialogData} from '../../../../shared/common/json-dialog/json-dialog.data'; -import {ContractDefinitionCard} from './contract-definition-card'; - -@Component({ - selector: 'contract-definition-cards', - templateUrl: './contract-definition-cards.component.html', -}) -export class ContractDefinitionCardsComponent implements OnDestroy { - @HostBinding('class.flex') - @HostBinding('class.flex-wrap') - @HostBinding('class.gap-[10px]') - cls = true; - - @Input() - contractDefinitionCards: ContractDefinitionCard[] = []; - - @Input() - deleteBusy = false; - - @Output() - deleteDone = new EventEmitter(); - - constructor( - private edcApiService: EdcApiService, - private assetDetailDialogDataService: AssetDetailDialogDataService, - private assetDetailDialogService: AssetDetailDialogService, - private matDialog: MatDialog, - private notificationService: NotificationService, - private translateService: TranslateService, - ) {} - - onPolicyClick(policyDefinition: PolicyDefinitionDto) { - const data: JsonDialogData = { - title: policyDefinition.policyDefinitionId, - subtitle: 'Policy', - icon: 'policy', - objectForJson: JSON.parse(policyDefinition.policy.policyJsonLd), - }; - this.matDialog.open(JsonDialogComponent, {data}); - } - - onAssetClick(asset: UiAssetMapped) { - const data = this.assetDetailDialogDataService.assetDetailsReadonly(asset); - this.assetDetailDialogService - .open(data, this.ngOnDestroy$) - .pipe(filter((it) => !!it?.refreshList)) - .subscribe(() => this.deleteDone.emit()); - } - - onContractDefinitionClick(card: ContractDefinitionCard) { - let dialogRef: MatDialogRef; - const data: JsonDialogData = { - title: card.id, - subtitle: 'Data Offer', - icon: 'policy', - objectForJson: card.detailJsonObj, - toolbarButton: { - text: 'Delete', - icon: 'delete', - confirmation: ConfirmDialogModel.forDelete( - 'general.con_def', - card.id, - this.translateService, - ), - action: () => - this.edcApiService.deleteContractDefinition(card.id).pipe( - tap(() => { - this.notificationService.showInfo('Data Offer deleted!'); - this.deleteDone.emit(); - dialogRef?.close(); - }), - catchError((err) => { - const msg = `Failed deleting data offer with id ${card.id}`; - console.error(msg, err); - this.notificationService.showError(msg); - return EMPTY; - }), - ), - }, - }; - - dialogRef = this.matDialog.open(JsonDialogComponent, {data}); - } - - ngOnDestroy$ = new Subject(); - - ngOnDestroy() { - this.ngOnDestroy$.next(null); - this.ngOnDestroy$.complete(); - } -} diff --git a/src/app/routes/connector-ui/contract-definition-page/contract-definition-editor-dialog/contract-definition-editor-dialog-form-model.ts b/src/app/routes/connector-ui/contract-definition-page/contract-definition-editor-dialog/contract-definition-editor-dialog-form-model.ts deleted file mode 100644 index 188bfdf77..000000000 --- a/src/app/routes/connector-ui/contract-definition-page/contract-definition-editor-dialog/contract-definition-editor-dialog-form-model.ts +++ /dev/null @@ -1,19 +0,0 @@ -import {FormControl, ɵFormGroupValue} from '@angular/forms'; -import {PolicyDefinitionDto} from '@sovity.de/edc-client'; -import {UiAssetMapped} from '../../../../core/services/models/ui-asset-mapped'; - -/** - * Form Value Type - */ -export type ContractDefinitionEditorDialogFormValue = - ɵFormGroupValue; - -/** - * Form Group Template Type - */ -export interface ContractDefinitionEditorDialogFormModel { - id: FormControl; - accessPolicy: FormControl; - contractPolicy: FormControl; - assets: FormControl; -} diff --git a/src/app/routes/connector-ui/contract-definition-page/contract-definition-editor-dialog/contract-definition-editor-dialog-form.ts b/src/app/routes/connector-ui/contract-definition-page/contract-definition-editor-dialog/contract-definition-editor-dialog-form.ts deleted file mode 100644 index 8cdc29a37..000000000 --- a/src/app/routes/connector-ui/contract-definition-page/contract-definition-editor-dialog/contract-definition-editor-dialog-form.ts +++ /dev/null @@ -1,43 +0,0 @@ -import {Injectable} from '@angular/core'; -import {FormBuilder, FormGroup, Validators} from '@angular/forms'; -import {PolicyDefinitionDto} from '@sovity.de/edc-client'; -import {DataOfferFormValidators} from 'src/app/core/validators/data-offer-form-validators'; -import {UiAssetMapped} from '../../../../core/services/models/ui-asset-mapped'; -import {noWhitespacesOrColonsValidator} from '../../../../core/validators/no-whitespaces-or-colons-validator'; -import { - ContractDefinitionEditorDialogFormModel, - ContractDefinitionEditorDialogFormValue, -} from './contract-definition-editor-dialog-form-model'; - -/** - * Handles AngularForms for ContractDefinitionEditorDialog - */ -@Injectable() -export class ContractDefinitionEditorDialogForm { - group = this.buildFormGroup(); - - /** - * Quick access to full value - */ - get value(): ContractDefinitionEditorDialogFormValue { - return this.group.value; - } - - constructor( - private formBuilder: FormBuilder, - private validators: DataOfferFormValidators, - ) {} - - buildFormGroup(): FormGroup { - return this.formBuilder.nonNullable.group({ - id: [ - '', - [Validators.required, noWhitespacesOrColonsValidator], - [this.validators.contractDefinitionIdExistsValidator], - ], - accessPolicy: [null as PolicyDefinitionDto | null, Validators.required], - contractPolicy: [null as PolicyDefinitionDto | null, Validators.required], - assets: [[] as UiAssetMapped[], Validators.required], - }); - } -} diff --git a/src/app/routes/connector-ui/contract-definition-page/contract-definition-editor-dialog/contract-definition-editor-dialog-result.ts b/src/app/routes/connector-ui/contract-definition-page/contract-definition-editor-dialog/contract-definition-editor-dialog-result.ts deleted file mode 100644 index 81ebdf921..000000000 --- a/src/app/routes/connector-ui/contract-definition-page/contract-definition-editor-dialog/contract-definition-editor-dialog-result.ts +++ /dev/null @@ -1,6 +0,0 @@ -export interface ContractDefinitionEditorDialogResult { - /** - * When creating a contract definition, update contract definition list - */ - refreshList: boolean; -} diff --git a/src/app/routes/connector-ui/contract-definition-page/contract-definition-editor-dialog/contract-definition-editor-dialog.component.html b/src/app/routes/connector-ui/contract-definition-page/contract-definition-editor-dialog/contract-definition-editor-dialog.component.html deleted file mode 100644 index 6326b0b34..000000000 --- a/src/app/routes/connector-ui/contract-definition-page/contract-definition-editor-dialog/contract-definition-editor-dialog.component.html +++ /dev/null @@ -1,53 +0,0 @@ -

{{ 'contract_agreement_page.new_def' | translate }}

- - -
- - - ID - - {{ - validationMessages.invalidWhitespacesOrColonsMessage - }} - - {{ validationMessages.idExistsErrorMessage }} - - - - - - - - - - - -
-
- - - - - - diff --git a/src/app/routes/connector-ui/contract-definition-page/contract-definition-editor-dialog/contract-definition-editor-dialog.component.ts b/src/app/routes/connector-ui/contract-definition-page/contract-definition-editor-dialog/contract-definition-editor-dialog.component.ts deleted file mode 100644 index e0e9ddf89..000000000 --- a/src/app/routes/connector-ui/contract-definition-page/contract-definition-editor-dialog/contract-definition-editor-dialog.component.ts +++ /dev/null @@ -1,91 +0,0 @@ -import {Component, OnDestroy, OnInit} from '@angular/core'; -import {MatDialogRef} from '@angular/material/dialog'; -import {Subject} from 'rxjs'; -import {finalize, takeUntil} from 'rxjs/operators'; -import {PolicyDefinitionDto} from '@sovity.de/edc-client'; -import {EdcApiService} from '../../../../core/services/api/edc-api.service'; -import {AssetService} from '../../../../core/services/asset.service'; -import {ContractDefinitionBuilder} from '../../../../core/services/contract-definition-builder'; -import {UiAssetMapped} from '../../../../core/services/models/ui-asset-mapped'; -import {NotificationService} from '../../../../core/services/notification.service'; -import {ValidationMessages} from '../../../../core/validators/validation-messages'; -import {ContractDefinitionEditorDialogForm} from './contract-definition-editor-dialog-form'; -import {ContractDefinitionEditorDialogResult} from './contract-definition-editor-dialog-result'; - -@Component({ - selector: 'contract-definition-editor-dialog', - templateUrl: './contract-definition-editor-dialog.component.html', - providers: [ContractDefinitionEditorDialogForm], -}) -export class ContractDefinitionEditorDialog implements OnInit, OnDestroy { - policies: PolicyDefinitionDto[] = []; - assets: UiAssetMapped[] = []; - loading = false; - - constructor( - private assetServiceMapped: AssetService, - public form: ContractDefinitionEditorDialogForm, - private notificationService: NotificationService, - private edcApiService: EdcApiService, - private contractDefinitionBuilder: ContractDefinitionBuilder, - private dialogRef: MatDialogRef, - public validationMessages: ValidationMessages, - ) {} - - ngOnInit() { - this.edcApiService - .getPolicyDefinitionPage() - .pipe(takeUntil(this.ngOnDestroy$)) - .subscribe((policyDefinitionPage) => { - this.policies = policyDefinitionPage.policies; - }); - this.assetServiceMapped - .fetchAssets() - .pipe(takeUntil(this.ngOnDestroy$)) - .subscribe((assets) => { - this.assets = assets; - }); - } - - onCreate() { - const formValue = this.form.value; - const contractDefinition = - this.contractDefinitionBuilder.buildContractDefinition(formValue); - this.loading = true; - this.edcApiService - .createContractDefinition(contractDefinition) - .pipe( - takeUntil(this.ngOnDestroy$), - finalize(() => { - this.form.group.enable(); - this.loading = false; - }), - ) - .subscribe({ - complete: () => { - this.notificationService.showInfo('Successfully created data offer.'); - this.close({refreshList: true}); - }, - error: (error) => { - if (error.status == 409) { - this.notificationService.showError('Data offer ID already taken.'); - } else if (error.status >= 500) { - this.notificationService.showError( - 'Error creating data offer: ' + (error?.error?.message ?? '???'), - ); - } - console.error('Error creating data offer!', error); - }, - }); - } - - private close(params: ContractDefinitionEditorDialogResult) { - this.dialogRef.close(params); - } - ngOnDestroy$ = new Subject(); - - ngOnDestroy(): void { - this.ngOnDestroy$.next(null); - this.ngOnDestroy$.complete(); - } -} diff --git a/src/app/routes/connector-ui/contract-definition-page/contract-definition-page.module.ts b/src/app/routes/connector-ui/contract-definition-page/contract-definition-page.module.ts deleted file mode 100644 index cd1361de8..000000000 --- a/src/app/routes/connector-ui/contract-definition-page/contract-definition-page.module.ts +++ /dev/null @@ -1,32 +0,0 @@ -import {CommonModule} from '@angular/common'; -import {NgModule} from '@angular/core'; -import {FormsModule, ReactiveFormsModule} from '@angular/forms'; -import {RouterModule} from '@angular/router'; -import {SharedModule} from '../../../shared/shared.module'; -import {AssetSelectComponent} from './asset-select/asset-select.component'; -import {ContractDefinitionCardsComponent} from './contract-definition-cards/contract-definition-cards.component'; -import {ContractDefinitionEditorDialog} from './contract-definition-editor-dialog/contract-definition-editor-dialog.component'; -import {ContractDefinitionPageComponent} from './contract-definition-page/contract-definition-page.component'; -import {PolicySelectComponent} from './policy-select/policy-select.component'; - -@NgModule({ - imports: [ - // Angular - CommonModule, - FormsModule, - ReactiveFormsModule, - RouterModule, - - // EDC UI Modules - SharedModule, - ], - declarations: [ - AssetSelectComponent, - ContractDefinitionCardsComponent, - ContractDefinitionEditorDialog, - ContractDefinitionPageComponent, - PolicySelectComponent, - ], - exports: [ContractDefinitionPageComponent], -}) -export class ContractDefinitionPageModule {} diff --git a/src/app/routes/connector-ui/contract-definition-page/contract-definition-page/contract-definition-page.component.html b/src/app/routes/connector-ui/contract-definition-page/contract-definition-page/contract-definition-page.component.html deleted file mode 100644 index 5d0fd5453..000000000 --- a/src/app/routes/connector-ui/contract-definition-page/contract-definition-page/contract-definition-page.component.html +++ /dev/null @@ -1,76 +0,0 @@ -
-
- - - - {{ 'contract_agreement_page.search_def' | translate }} - - search - - - - - - - -
- - - -
- -
- - - -
- -
diff --git a/src/app/routes/connector-ui/contract-definition-page/contract-definition-page/contract-definition-page.component.scss b/src/app/routes/connector-ui/contract-definition-page/contract-definition-page/contract-definition-page.component.scss deleted file mode 100644 index 2fd1ec0ea..000000000 --- a/src/app/routes/connector-ui/contract-definition-page/contract-definition-page/contract-definition-page.component.scss +++ /dev/null @@ -1,21 +0,0 @@ -#wrapper { - margin: 20px; -} - -.contract-definition-card { - width: calc(100% / 2 - 48px); -} - -#create-button { - margin-left: 10px; -} - -mat-paginator { - display: inline-block; - background-color: transparent; -} - -.search-form-field { - min-width: 200px; - width: 30%; -} diff --git a/src/app/routes/connector-ui/contract-definition-page/contract-definition-page/contract-definition-page.component.ts b/src/app/routes/connector-ui/contract-definition-page/contract-definition-page/contract-definition-page.component.ts deleted file mode 100644 index b6dd0375b..000000000 --- a/src/app/routes/connector-ui/contract-definition-page/contract-definition-page/contract-definition-page.component.ts +++ /dev/null @@ -1,59 +0,0 @@ -import {Component, OnInit} from '@angular/core'; -import {FormControl} from '@angular/forms'; -import {MatDialog} from '@angular/material/dialog'; -import {BehaviorSubject, Observable, distinctUntilChanged} from 'rxjs'; -import {filter, map} from 'rxjs/operators'; -import {Fetched} from '../../../../core/services/models/fetched'; -import {value$} from '../../../../core/utils/form-group-utils'; -import {ContractDefinitionEditorDialogResult} from '../contract-definition-editor-dialog/contract-definition-editor-dialog-result'; -import {ContractDefinitionEditorDialog} from '../contract-definition-editor-dialog/contract-definition-editor-dialog.component'; -import {ContractDefinitionPageData} from './contract-definition-page.data'; -import {ContractDefinitionPageService} from './contract-definition-page.service'; - -@Component({ - selector: 'app-contract-definition-page', - templateUrl: './contract-definition-page.component.html', - styleUrls: ['./contract-definition-page.component.scss'], -}) -export class ContractDefinitionPageComponent implements OnInit { - contractDefinitionList: Fetched = Fetched.empty(); - searchText = new FormControl(''); - deleteBusy = false; - - private fetch$ = new BehaviorSubject(null); - - constructor( - private contractDefinitionPageService: ContractDefinitionPageService, - private readonly dialog: MatDialog, - ) {} - - ngOnInit(): void { - this.contractDefinitionPageService - .contractDefinitionPageData$(this.fetch$, this.searchText$()) - .subscribe((contractDefinitionList) => { - this.contractDefinitionList = contractDefinitionList; - }); - } - - onCreate() { - const dialogRef = this.dialog.open(ContractDefinitionEditorDialog); - dialogRef - .afterClosed() - .pipe( - map((it) => it as ContractDefinitionEditorDialogResult | null), - filter((it) => !!it?.refreshList), - ) - .subscribe(() => this.refresh()); - } - - refresh() { - this.fetch$.next(null); - } - - private searchText$(): Observable { - return (value$(this.searchText) as Observable).pipe( - map((it) => (it ?? '').trim()), - distinctUntilChanged(), - ); - } -} diff --git a/src/app/routes/connector-ui/contract-definition-page/contract-definition-page/contract-definition-page.data.ts b/src/app/routes/connector-ui/contract-definition-page/contract-definition-page/contract-definition-page.data.ts deleted file mode 100644 index 6af45dd2a..000000000 --- a/src/app/routes/connector-ui/contract-definition-page/contract-definition-page/contract-definition-page.data.ts +++ /dev/null @@ -1,6 +0,0 @@ -import {ContractDefinitionCard} from '../contract-definition-cards/contract-definition-card'; - -export interface ContractDefinitionPageData { - contractDefinitionCards: ContractDefinitionCard[]; - numTotalContractDefinitions: number; -} diff --git a/src/app/routes/connector-ui/contract-definition-page/contract-definition-page/contract-definition-page.service.ts b/src/app/routes/connector-ui/contract-definition-page/contract-definition-page/contract-definition-page.service.ts deleted file mode 100644 index e867c2daf..000000000 --- a/src/app/routes/connector-ui/contract-definition-page/contract-definition-page/contract-definition-page.service.ts +++ /dev/null @@ -1,83 +0,0 @@ -import {Injectable} from '@angular/core'; -import {Observable, combineLatest, of} from 'rxjs'; -import {catchError, map, switchMap} from 'rxjs/operators'; -import {EdcApiService} from '../../../../core/services/api/edc-api.service'; -import {AssetService} from '../../../../core/services/asset.service'; -import {Fetched} from '../../../../core/services/models/fetched'; -import {search} from '../../../../core/utils/search-utils'; -import {ContractDefinitionCard} from '../contract-definition-cards/contract-definition-card'; -import {ContractDefinitionCardBuilder} from '../contract-definition-cards/contract-definition-card-builder'; - -export interface ContractDefinitionList { - contractDefinitionCards: ContractDefinitionCard[]; - numTotalContractDefinitions: number; -} - -@Injectable({providedIn: 'root'}) -export class ContractDefinitionPageService { - constructor( - private edcApiService: EdcApiService, - private assetServiceMapped: AssetService, - private contractDefinitionCardBuilder: ContractDefinitionCardBuilder, - ) {} - - contractDefinitionPageData$( - refresh$: Observable, - searchText$: Observable, - ): Observable> { - return combineLatest([ - refresh$.pipe(switchMap(() => this.fetchCards())), - searchText$, - ]).pipe( - map(([fetchedCards, searchText]) => - fetchedCards.map((cards) => ({ - contractDefinitionCards: this.filterCards(cards, searchText), - numTotalContractDefinitions: cards.length, - })), - ), - ); - } - - filterCards( - cards: ContractDefinitionCard[], - searchText: string, - ): ContractDefinitionCard[] { - return search(cards, searchText, (card) => [ - card.id, - card.accessPolicy.policyDefinitionId, - card.contractPolicy.policyDefinitionId, - ...card.criteria.map((it) => it.label), - ...card.criteria - .flatMap((it) => it.values) - .flatMap((it) => it.searchTargets), - ]); - } - //ed - fetchCards(): Observable> { - return combineLatest([ - this.edcApiService.getContractDefinitionPage(), - this.assetServiceMapped.fetchAssets().pipe( - catchError((err) => { - console.warn('Failed fetching assets.', err); - return of([]); - }), - ), - this.edcApiService.getPolicyDefinitionPage().pipe( - map((policyDefinitionPage) => policyDefinitionPage.policies), - catchError((err) => { - console.warn('Failed fetching policy definitions.', err); - return of([]); - }), - ), - ]).pipe( - map(([contractDefinitions, assets, policyDefinitions]) => - this.contractDefinitionCardBuilder.buildContractDefinitionCards( - contractDefinitions, - assets, - policyDefinitions, - ), - ), - Fetched.wrap({failureMessage: 'Failed fetching contract definitions'}), - ); - } -} diff --git a/src/app/routes/connector-ui/contract-definition-page/policy-select/policy-select.component.html b/src/app/routes/connector-ui/contract-definition-page/policy-select/policy-select.component.html deleted file mode 100644 index 486af06fb..000000000 --- a/src/app/routes/connector-ui/contract-definition-page/policy-select/policy-select.component.html +++ /dev/null @@ -1,9 +0,0 @@ - - {{ label }} - - - - {{ policyId(policy) }} - - - diff --git a/src/app/routes/connector-ui/contract-definition-page/policy-select/policy-select.component.ts b/src/app/routes/connector-ui/contract-definition-page/policy-select/policy-select.component.ts deleted file mode 100644 index b0ac41d9f..000000000 --- a/src/app/routes/connector-ui/contract-definition-page/policy-select/policy-select.component.ts +++ /dev/null @@ -1,33 +0,0 @@ -import {Component, HostBinding, Input} from '@angular/core'; -import {FormControl} from '@angular/forms'; -import {PolicyDefinitionDto} from '@sovity.de/edc-client'; - -@Component({ - selector: 'policy-select', - templateUrl: 'policy-select.component.html', -}) -export class PolicySelectComponent { - @Input() - label!: string; - - @Input() - control!: FormControl; - - @Input() - policies: PolicyDefinitionDto[] = []; - - @HostBinding('class.flex') - @HostBinding('class.flex-row') - cls = true; - - compareWith( - a: PolicyDefinitionDto | null, - b: PolicyDefinitionDto | null, - ): boolean { - return this.policyId(a) === this.policyId(b); - } - - policyId(a: PolicyDefinitionDto | null): string | null { - return a?.policyDefinitionId ?? null; - } -} diff --git a/src/app/routes/connector-ui/dashboard-page/dashboard-donut-chart/dashboard-donut-chart.component.html b/src/app/routes/connector-ui/dashboard-page/dashboard-donut-chart/dashboard-donut-chart.component.html deleted file mode 100644 index e3193e14b..000000000 --- a/src/app/routes/connector-ui/dashboard-page/dashboard-donut-chart/dashboard-donut-chart.component.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - -
- {{ data.data.totalLabel }}: {{ data.data.totalValue | number }} -
-
- - - diff --git a/src/app/routes/connector-ui/dashboard-page/dashboard-donut-chart/dashboard-donut-chart.component.ts b/src/app/routes/connector-ui/dashboard-page/dashboard-donut-chart/dashboard-donut-chart.component.ts deleted file mode 100644 index 9e2f527c6..000000000 --- a/src/app/routes/connector-ui/dashboard-page/dashboard-donut-chart/dashboard-donut-chart.component.ts +++ /dev/null @@ -1,20 +0,0 @@ -import {Component, HostBinding, Input} from '@angular/core'; -import {Fetched} from '../../../../core/services/models/fetched'; -import {DonutChartData} from './donut-chart-data'; - -@Component({ - selector: 'dashboard-donut-chart', - templateUrl: './dashboard-donut-chart.component.html', -}) -export class DashboardDonutChartComponent { - @HostBinding('class.flex') - @HostBinding('class.flex-col') - @HostBinding('class.justify-center') - @HostBinding('class.items-center') - @HostBinding('class.items-center') - @HostBinding('class.min-h-[300px]') - cls = true; - - @Input() - data = Fetched.empty(); -} diff --git a/src/app/routes/connector-ui/dashboard-page/dashboard-donut-chart/donut-chart-data.ts b/src/app/routes/connector-ui/dashboard-page/dashboard-donut-chart/donut-chart-data.ts deleted file mode 100644 index a74844744..000000000 --- a/src/app/routes/connector-ui/dashboard-page/dashboard-donut-chart/donut-chart-data.ts +++ /dev/null @@ -1,13 +0,0 @@ -import {ChartConfiguration} from 'chart.js'; - -export interface DonutChartData { - labels: string[]; - datasets: ChartConfiguration<'doughnut'>['data']['datasets']; - options: ChartConfiguration<'doughnut'>['options']; - - isEmpty: boolean; - emptyMessage: string; - - totalLabel: string; - totalValue: number; -} diff --git a/src/app/routes/connector-ui/dashboard-page/dashboard-kpi-card/dashboard-kpi-card.component.html b/src/app/routes/connector-ui/dashboard-page/dashboard-kpi-card/dashboard-kpi-card.component.html deleted file mode 100644 index 74e97e7af..000000000 --- a/src/app/routes/connector-ui/dashboard-page/dashboard-kpi-card/dashboard-kpi-card.component.html +++ /dev/null @@ -1,32 +0,0 @@ - -
- {{ - kpi.error.failureIcon - }} - - -
- {{ - kpi.data | number - }} -
-
-
-
- {{ kpi.error.failureMessage }} -
-
- {{ label }} -
-
-
diff --git a/src/app/routes/connector-ui/dashboard-page/dashboard-kpi-card/dashboard-kpi-card.component.ts b/src/app/routes/connector-ui/dashboard-page/dashboard-kpi-card/dashboard-kpi-card.component.ts deleted file mode 100644 index 50c9e965a..000000000 --- a/src/app/routes/connector-ui/dashboard-page/dashboard-kpi-card/dashboard-kpi-card.component.ts +++ /dev/null @@ -1,38 +0,0 @@ -import {Component, HostBinding, Input} from '@angular/core'; -import {Fetched} from '../../../../core/services/models/fetched'; - -@Component({ - selector: 'dashboard-kpi-card', - styles: [ - ` - :host { - min-width: 200px; - height: 180px; - } - `, - ], - templateUrl: './dashboard-kpi-card.component.html', -}) -export class DashboardKpiCardComponent { - @HostBinding('class.flex') - cls = true; - - @Input() - kpi = Fetched.empty(); - - @Input() - label = 'Label'; - - fontSize(data: number): number { - const abs = Math.abs(data); - if (abs < 100) { - return 81; - } else if (abs < 1000) { - return 72; - } else if (abs < 10000) { - return 64; - } else { - return 56; - } - } -} diff --git a/src/app/routes/connector-ui/dashboard-page/dashboard-page.module.ts b/src/app/routes/connector-ui/dashboard-page/dashboard-page.module.ts deleted file mode 100644 index baba53f70..000000000 --- a/src/app/routes/connector-ui/dashboard-page/dashboard-page.module.ts +++ /dev/null @@ -1,28 +0,0 @@ -import {CommonModule} from '@angular/common'; -import {NgModule} from '@angular/core'; -import {FormsModule, ReactiveFormsModule} from '@angular/forms'; -import {RouterModule} from '@angular/router'; -import {SharedModule} from '../../../shared/shared.module'; -import {DashboardDonutChartComponent} from './dashboard-donut-chart/dashboard-donut-chart.component'; -import {DashboardKpiCardComponent} from './dashboard-kpi-card/dashboard-kpi-card.component'; -import {DashboardPageComponent} from './dashboard-page/dashboard-page.component'; - -@NgModule({ - imports: [ - // Angular - CommonModule, - FormsModule, - ReactiveFormsModule, - RouterModule, - - // EDC UI Modules - SharedModule, - ], - declarations: [ - DashboardDonutChartComponent, - DashboardKpiCardComponent, - DashboardPageComponent, - ], - exports: [DashboardPageComponent], -}) -export class DashboardPageModule {} diff --git a/src/app/routes/connector-ui/dashboard-page/dashboard-page/dashboard-page-data.service.ts b/src/app/routes/connector-ui/dashboard-page/dashboard-page/dashboard-page-data.service.ts deleted file mode 100644 index c2afe5432..000000000 --- a/src/app/routes/connector-ui/dashboard-page/dashboard-page/dashboard-page-data.service.ts +++ /dev/null @@ -1,199 +0,0 @@ -import {Injectable} from '@angular/core'; -import {Observable, combineLatest, merge, of, sampleTime, scan} from 'rxjs'; -import {catchError, map} from 'rxjs/operators'; -import {TranslateService} from '@ngx-translate/core'; -import {DashboardTransferAmounts, UiDataOffer} from '@sovity.de/edc-client'; -import {EdcApiService} from '../../../../core/services/api/edc-api.service'; -import {LastCommitInfoService} from '../../../../core/services/api/last-commit-info.service'; -import {ConnectorInfoPropertyGridGroupBuilder} from '../../../../core/services/connector-info-property-grid-group-builder'; -import {Fetched} from '../../../../core/services/models/fetched'; -import {CatalogApiUrlService} from '../../catalog-browser-page/catalog-browser-page/catalog-api-url.service'; -import {DonutChartData} from '../dashboard-donut-chart/donut-chart-data'; -import {DashboardPageData, defaultDashboardData} from './dashboard-page-data'; - -@Injectable({providedIn: 'root'}) -export class DashboardPageDataService { - constructor( - private edcApiService: EdcApiService, - private catalogApiUrlService: CatalogApiUrlService, - private lastCommitInfoService: LastCommitInfoService, - private connectorInfoPropertyGridGroupBuilder: ConnectorInfoPropertyGridGroupBuilder, - private translateService: TranslateService, - ) {} - - /** - * Fetch {@link DashboardPageData}. - */ - getDashboardData(): Observable { - const initial = defaultDashboardData(); - - // Dashboard is built from different API calls - const sources: Observable>[] = [ - this.catalogBrowserKpis(), - this.numCatalogs(), - this.dashboardData(), - ]; - - // We merge all results as they come in, constructing our DashboardData - // This allows single KPIs to have their own individual loading statuses - return merge(...sources).pipe( - scan((data, patch) => ({...data, ...patch}), initial), - ); - } - - private catalogBrowserKpis(): Observable> { - return this.getAllDataOffers().pipe( - map((dataOffers) => dataOffers.length), - Fetched.wrap({ - failureMessage: this.translateService.instant( - 'dashboard_page.failed_offers', - ), - }), - map((numOffers) => ({numCatalogEntries: numOffers})), - ); - } - - private getAllDataOffers(): Observable { - const catalogUrls = this.catalogApiUrlService.getAllProviders(); - - const dataOffers = catalogUrls.map((it) => - this.edcApiService - .getCatalogPageDataOffers(it) - .pipe(catchError(() => of([]))), - ); - - return merge(...dataOffers).pipe( - sampleTime(50), - map((results) => results.flat()), - ); - } - - private numCatalogs(): Observable> { - return of({ - numCatalogs: Fetched.ready( - this.catalogApiUrlService.getPresetProviders().length, - ), - }); - } - - private buildTransferChart( - transfers: DashboardTransferAmounts, - direction: 'CONSUMING' | 'PROVIDING', - ): DonutChartData { - const amounts: {label: string; amount: number; color: string}[] = [ - { - label: this.translateService.instant('dashboard_page.completed'), - amount: transfers.numOk, - color: '#b2e061', - }, - { - label: this.translateService.instant('dashboard_page.progress'), - amount: transfers.numRunning, - color: '#7eb0d5', - }, - { - label: this.translateService.instant('dashboard_page.error'), - amount: transfers.numError, - color: '#fd7f6f', - }, - ].filter((it) => it.amount); - - const total = transfers.numTotal; - const emptyMessage = - direction === 'CONSUMING' - ? this.translateService.instant('dashboard_page.no_transfer') - : this.translateService.instant('dashboard_page.no_transfer2'); - return { - totalLabel: this.translateService.instant('general.total'), - totalValue: total, - isEmpty: !total, - emptyMessage, - labels: amounts.map((it) => it.label), - datasets: [ - { - label: this.translateService.instant('dashboard_page.num_transfer'), - data: amounts.map((it) => it.amount), - backgroundColor: amounts.map((it) => it.color), - }, - ], - options: {responsive: false}, - }; - } - - private dashboardData(): Observable> { - return combineLatest([ - this.lastCommitInfoService.getLastCommitInfoData().pipe( - Fetched.wrap({ - failureMessage: this.translateService.instant( - 'dashboard_page.failed_env', - ), - }), - ), - this.lastCommitInfoService.getUiBuildDateDetails().pipe( - Fetched.wrap({ - failureMessage: this.translateService.instant( - 'dashboard_page.failed_ui_build', - ), - }), - ), - this.lastCommitInfoService.getUiCommitDetails().pipe( - Fetched.wrap({ - failureMessage: this.translateService.instant( - 'dashboard_page.failed_ui', - ), - }), - ), - this.edcApiService.getDashboardPage().pipe( - Fetched.wrap({ - failureMessage: this.translateService.instant( - 'dashboard_page.failed_dashboard', - ), - }), - ), - ]).pipe( - map(([lastCommitInfo, uiBuildDate, uiCommitDetails, fetched]) => ({ - title: this.extractString(fetched, (it) => it.connectorTitle), - description: this.extractString( - fetched, - (it) => it.connectorDescription, - ), - numAssets: fetched.map((it) => it.numAssets), - numPolicies: fetched.map((it) => it.numPolicies), - numContractDefinitions: fetched.map((it) => it.numContractDefinitions), - numContractAgreements: fetched.map( - (it) => - it.numContractAgreementsConsuming + - it.numContractAgreementsProviding, - ), - connectorEndpoint: this.extractString( - fetched, - (it) => it.connectorEndpoint, - ), - incomingTransfersChart: fetched.map((it) => - this.buildTransferChart(it.transferProcessesConsuming, 'CONSUMING'), - ), - outgoingTransfersChart: fetched.map((it) => - this.buildTransferChart(it.transferProcessesProviding, 'PROVIDING'), - ), - connectorProperties: - this.connectorInfoPropertyGridGroupBuilder.buildPropertyGridGroups( - lastCommitInfo, - uiBuildDate, - uiCommitDetails, - fetched, - ), - })), - ); - } - - private extractString( - fetched: Fetched, - extractor: (item: T) => string, - ): string { - return fetched.match({ - ifLoading: () => 'Loading...', - ifError: () => 'Failed loading.', - ifOk: extractor, - }); - } -} diff --git a/src/app/routes/connector-ui/dashboard-page/dashboard-page/dashboard-page-data.ts b/src/app/routes/connector-ui/dashboard-page/dashboard-page/dashboard-page-data.ts deleted file mode 100644 index 41b9d8b7d..000000000 --- a/src/app/routes/connector-ui/dashboard-page/dashboard-page/dashboard-page-data.ts +++ /dev/null @@ -1,35 +0,0 @@ -import {Fetched} from '../../../../core/services/models/fetched'; -import {PropertyGridGroup} from '../../../../shared/common/property-grid-group/property-grid-group'; -import {DonutChartData} from '../dashboard-donut-chart/donut-chart-data'; - -export interface DashboardPageData { - incomingTransfersChart: Fetched; - outgoingTransfersChart: Fetched; - numContractAgreements: Fetched; - numAssets: Fetched; - numCatalogEntries: Fetched; - numContractDefinitions: Fetched; - numPolicies: Fetched; - numCatalogs: Fetched; - connectorProperties: PropertyGridGroup[]; - connectorEndpoint: string; - title: string; - description: string; -} - -export function defaultDashboardData(): DashboardPageData { - return { - incomingTransfersChart: Fetched.empty(), - outgoingTransfersChart: Fetched.empty(), - numContractAgreements: Fetched.empty(), - numAssets: Fetched.empty(), - numCatalogEntries: Fetched.empty(), - numPolicies: Fetched.empty(), - numContractDefinitions: Fetched.empty(), - numCatalogs: Fetched.empty(), - connectorProperties: [], - connectorEndpoint: 'Loading...', - title: 'Loading...', - description: 'Loading...', - }; -} diff --git a/src/app/routes/connector-ui/dashboard-page/dashboard-page/dashboard-page.component.html b/src/app/routes/connector-ui/dashboard-page/dashboard-page/dashboard-page.component.html deleted file mode 100644 index 1919707c9..000000000 --- a/src/app/routes/connector-ui/dashboard-page/dashboard-page/dashboard-page.component.html +++ /dev/null @@ -1,330 +0,0 @@ -
-
-
- - {{ - 'dashboard_page.inc_data' | translate - }} - {{ - 'dashboard_page.trans_pro' | translate - }} -
- -
-
- - - {{ - 'dashboard_page.out_data' | translate - }} - {{ - 'dashboard_page.trans_pro' | translate - }} -
- -
-
-
- -
- - - - - - - - - -
- - - {{ - 'dashboard_page.conn_prop' | translate - }} - {{ - 'dashboard_page.add_prop' | translate - }} - - - -
- -
- - {{ - 'dashboard_page.edc_conn' | translate - }} - - {{ data.title }} - -

- {{ data.description }} -

-

- {{ 'dashboard_page.descrip' | translate }} -

- - {{ 'dashboard_page.conn_end' | translate }} - - link - - - - {{ 'dashboard_page.api_url' | translate }} - - link - - -
- - - {{ 'dashboard_page.provided' | translate }} - sovity logo - {{ - 'dashboard_page.edition_edc' | translate - }} - -
-
-

- {{ 'dashboard_page.marketing_mds_basic_intro' | translate }} -

-

- {{ 'dashboard_page.marketing_mds_basic_intro2' | translate }} -

-
-
- -
- - - {{ - 'dashboard_page.managed_edc' | translate - }} - {{ - 'dashboard_page.conn_service' | translate - }} - - - - {{ 'dashboard_page.about' | translate }} - {{ - 'dashboard_page.eclipse' | translate - }} -
-

- {{ 'dashboard_page.marketing_about' | translate }} -

-

- {{ 'dashboard_page.marketing_about2' | translate }} -

-

- {{ 'dashboard_page.marketing_about3' | translate }} -

- -
-
- - {{ - 'dashboard_page.about_ui' | translate - }} - {{ - 'dashboard_page.data_dashboard' | translate - }} - - -
-
diff --git a/src/app/routes/connector-ui/dashboard-page/dashboard-page/dashboard-page.component.ts b/src/app/routes/connector-ui/dashboard-page/dashboard-page/dashboard-page.component.ts deleted file mode 100644 index 368496c73..000000000 --- a/src/app/routes/connector-ui/dashboard-page/dashboard-page/dashboard-page.component.ts +++ /dev/null @@ -1,40 +0,0 @@ -import {Component, Inject, OnDestroy, OnInit} from '@angular/core'; -import {BehaviorSubject, Subject} from 'rxjs'; -import {switchMap, takeUntil} from 'rxjs/operators'; -import {APP_CONFIG, AppConfig} from 'src/app/core/config/app-config'; -import {ConnectorInfoPropertyGridGroupBuilder} from '../../../../core/services/connector-info-property-grid-group-builder'; -import {DashboardPageData, defaultDashboardData} from './dashboard-page-data'; -import {DashboardPageDataService} from './dashboard-page-data.service'; - -@Component({ - selector: 'dashboard-page', - templateUrl: './dashboard-page.component.html', - providers: [ConnectorInfoPropertyGridGroupBuilder], -}) -export class DashboardPageComponent implements OnInit, OnDestroy { - data: DashboardPageData = defaultDashboardData(); - private refresh$ = new BehaviorSubject(true); - - constructor( - @Inject(APP_CONFIG) public config: AppConfig, - private dashboardDataService: DashboardPageDataService, - ) {} - - ngOnInit() { - this.refresh$ - .pipe( - switchMap(() => this.dashboardDataService.getDashboardData()), - takeUntil(this.ngOnDestroy$), - ) - .subscribe((data) => { - this.data = data; - }); - } - - ngOnDestroy$ = new Subject(); - - ngOnDestroy() { - this.ngOnDestroy$.next(null); - this.ngOnDestroy$.complete(); - } -} diff --git a/src/app/routes/connector-ui/logout-page/location-history-utils.ts b/src/app/routes/connector-ui/logout-page/location-history-utils.ts deleted file mode 100644 index c80709499..000000000 --- a/src/app/routes/connector-ui/logout-page/location-history-utils.ts +++ /dev/null @@ -1,39 +0,0 @@ -import {Location} from '@angular/common'; -import {Injectable} from '@angular/core'; -import {PreviousRouteListener} from './previous-route-listener'; - -/** - * Required because: - * - The logout action is currently a "page"/route instead of a navigation entry with a click/enter handler. - * - This page should not be in location history or the back button won't work. - * - For that we need to replace the logout page's state with the correct URL to return to. - * - For that we need that URL in the first place. - */ -@Injectable() -export class LocationHistoryUtils { - constructor( - private location: Location, - private previousRouteListener: PreviousRouteListener, - ) {} - - replaceStateWithPreviousUrl(opts: {skipUrlsStartingWith: string}) { - const goodReplacementUrl = this.getGoodReplacementUrl(opts); - this.location.replaceState(goodReplacementUrl); - } - - getGoodReplacementUrl(opts: {skipUrlsStartingWith: string}): string { - const urlsToTry: (string | null)[] = [ - this.previousRouteListener.currentUrl, - this.previousRouteListener.previousUrl, - - // Fallback to dashboard - '/', - ]; - - const url = urlsToTry.find( - (url) => url && !url.startsWith(opts.skipUrlsStartingWith), - ); - - return url ?? urlsToTry[urlsToTry.length - 1]!!; - } -} diff --git a/src/app/routes/connector-ui/logout-page/logout-page.component.ts b/src/app/routes/connector-ui/logout-page/logout-page.component.ts deleted file mode 100644 index cc5a1bb5c..000000000 --- a/src/app/routes/connector-ui/logout-page/logout-page.component.ts +++ /dev/null @@ -1,24 +0,0 @@ -import {DOCUMENT} from '@angular/common'; -import {Component, Inject, OnInit} from '@angular/core'; -import {APP_CONFIG, AppConfig} from '../../../core/config/app-config'; -import {LocationHistoryUtils} from './location-history-utils'; - -@Component({ - selector: 'logout', - template: ``, -}) -export class LogoutPageComponent implements OnInit { - constructor( - @Inject(APP_CONFIG) private config: AppConfig, - @Inject(DOCUMENT) private document: Document, - private locationHistoryUtils: LocationHistoryUtils, - ) {} - - ngOnInit(): void { - // Prevent back button hijacking from /logout in history - this.locationHistoryUtils.replaceStateWithPreviousUrl({ - skipUrlsStartingWith: '/logout', - }); - this.document.location.href = this.config.logoutUrl!; - } -} diff --git a/src/app/routes/connector-ui/logout-page/logout-page.module.ts b/src/app/routes/connector-ui/logout-page/logout-page.module.ts deleted file mode 100644 index d32f270d9..000000000 --- a/src/app/routes/connector-ui/logout-page/logout-page.module.ts +++ /dev/null @@ -1,15 +0,0 @@ -import {CommonModule} from '@angular/common'; -import {NgModule} from '@angular/core'; -import {RouterModule} from '@angular/router'; -import {LogoutPageComponent} from './logout-page.component'; - -@NgModule({ - imports: [ - // Angular - CommonModule, - RouterModule, - ], - declarations: [LogoutPageComponent], - exports: [LogoutPageComponent], -}) -export class LogoutPageModule {} diff --git a/src/app/routes/connector-ui/logout-page/previous-route-listener.ts b/src/app/routes/connector-ui/logout-page/previous-route-listener.ts deleted file mode 100644 index 974a1495f..000000000 --- a/src/app/routes/connector-ui/logout-page/previous-route-listener.ts +++ /dev/null @@ -1,28 +0,0 @@ -import {Injectable} from '@angular/core'; -import {NavigationEnd, Router} from '@angular/router'; - -/** - * Required because: - * - The logout action is currently a "page"/route instead of a navigation entry with a click/enter handler. - * - This page should not be in location history or the back button won't work. - * - For that we need to replace the logout page's state with the correct URL to return to. - * - For that we need that URL in the first place. - */ -@Injectable() -export class PreviousRouteListener { - previousUrl: string | null = null; - currentUrl: string | null = null; - - constructor(private router: Router) { - this.startListeningToUrlChanges(); - } - - private startListeningToUrlChanges() { - this.router.events.subscribe((event) => { - if (event instanceof NavigationEnd) { - this.previousUrl = this.currentUrl; - this.currentUrl = event.url; - } - }); - } -} diff --git a/src/app/routes/connector-ui/page-not-found-page/page-not-found-page.component.html b/src/app/routes/connector-ui/page-not-found-page/page-not-found-page.component.html deleted file mode 100644 index 21ab90fec..000000000 --- a/src/app/routes/connector-ui/page-not-found-page/page-not-found-page.component.html +++ /dev/null @@ -1,9 +0,0 @@ -
-

- Page not found -

-

The page you are looking for doesn't exist.

- -
diff --git a/src/app/routes/connector-ui/page-not-found-page/page-not-found-page.component.ts b/src/app/routes/connector-ui/page-not-found-page/page-not-found-page.component.ts deleted file mode 100644 index db210a297..000000000 --- a/src/app/routes/connector-ui/page-not-found-page/page-not-found-page.component.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {Component, HostBinding} from '@angular/core'; - -@Component({ - selector: 'app-page-not-found-page', - templateUrl: './page-not-found-page.component.html', -}) -export class PageNotFoundPageComponent { - @HostBinding('class.container') - @HostBinding('class.flex') - @HostBinding('class.items-center') - @HostBinding('class.min-h-screen') - @HostBinding('class.px-6') - @HostBinding('class.py-12') - @HostBinding('class.box-border') - cls = true; -} diff --git a/src/app/routes/connector-ui/page-not-found-page/page-not-found-page.module.ts b/src/app/routes/connector-ui/page-not-found-page/page-not-found-page.module.ts deleted file mode 100644 index 3a17739ca..000000000 --- a/src/app/routes/connector-ui/page-not-found-page/page-not-found-page.module.ts +++ /dev/null @@ -1,15 +0,0 @@ -import {CommonModule} from '@angular/common'; -import {NgModule} from '@angular/core'; -import {RouterModule} from '@angular/router'; -import {PageNotFoundPageComponent} from './page-not-found-page.component'; - -@NgModule({ - imports: [ - // Angular - CommonModule, - RouterModule, - ], - declarations: [PageNotFoundPageComponent], - exports: [PageNotFoundPageComponent], -}) -export class PageNotFoundPageModule {} diff --git a/src/app/routes/connector-ui/policy-definition-create-page/policy-definition-create-page.module.ts b/src/app/routes/connector-ui/policy-definition-create-page/policy-definition-create-page.module.ts deleted file mode 100644 index 84d6c92bd..000000000 --- a/src/app/routes/connector-ui/policy-definition-create-page/policy-definition-create-page.module.ts +++ /dev/null @@ -1,24 +0,0 @@ -import {CommonModule} from '@angular/common'; -import {NgModule} from '@angular/core'; -import {FormsModule, ReactiveFormsModule} from '@angular/forms'; -import {RouterModule} from '@angular/router'; -import {TranslateModule} from '@ngx-translate/core'; -import {SharedModule} from '../../../shared/shared.module'; -import {PolicyDefinitionCreatePageComponent} from './policy-definition-create-page/policy-definition-create-page.component'; - -@NgModule({ - imports: [ - // Angular - CommonModule, - FormsModule, - ReactiveFormsModule, - RouterModule, - TranslateModule, - - // EDC UI Modules - SharedModule, - ], - declarations: [PolicyDefinitionCreatePageComponent], - exports: [PolicyDefinitionCreatePageComponent], -}) -export class PolicyDefinitionCreatePageModule {} diff --git a/src/app/routes/connector-ui/policy-definition-create-page/policy-definition-create-page/policy-definition-create-page-form-model.ts b/src/app/routes/connector-ui/policy-definition-create-page/policy-definition-create-page/policy-definition-create-page-form-model.ts deleted file mode 100644 index 3d1eae0db..000000000 --- a/src/app/routes/connector-ui/policy-definition-create-page/policy-definition-create-page/policy-definition-create-page-form-model.ts +++ /dev/null @@ -1,9 +0,0 @@ -import {FormControl, UntypedFormGroup, ɵFormGroupValue} from '@angular/forms'; - -export type PolicyDefinitionCreatePageFormValue = - ɵFormGroupValue; - -export interface PolicyDefinitionCreatePageFormModel { - id: FormControl; - treeControls: UntypedFormGroup; -} diff --git a/src/app/routes/connector-ui/policy-definition-create-page/policy-definition-create-page/policy-definition-create-page-form.ts b/src/app/routes/connector-ui/policy-definition-create-page/policy-definition-create-page/policy-definition-create-page-form.ts deleted file mode 100644 index e068e10eb..000000000 --- a/src/app/routes/connector-ui/policy-definition-create-page/policy-definition-create-page/policy-definition-create-page-form.ts +++ /dev/null @@ -1,41 +0,0 @@ -import {Injectable} from '@angular/core'; -import {FormBuilder, FormGroup, Validators} from '@angular/forms'; -import {DataOfferFormValidators} from 'src/app/core/validators/data-offer-form-validators'; -import {noWhitespacesOrColonsValidator} from '../../../../core/validators/no-whitespaces-or-colons-validator'; -import {ExpressionFormControls} from '../../../../shared/business/policy-editor/editor/expression-form-controls'; -import { - PolicyDefinitionCreatePageFormModel, - PolicyDefinitionCreatePageFormValue, -} from './policy-definition-create-page-form-model'; - -/** - * Handles AngularForms for NewPolicyDialog - */ -@Injectable() -export class PolicyDefinitionCreatePageForm { - group = this.buildFormGroup(); - - /** - * Quick access to full value - */ - get value(): PolicyDefinitionCreatePageFormValue { - return this.group.value; - } - - constructor( - private formBuilder: FormBuilder, - private expressionFormControls: ExpressionFormControls, - private validators: DataOfferFormValidators, - ) {} - - buildFormGroup(): FormGroup { - return this.formBuilder.nonNullable.group({ - id: [ - '', - [Validators.required, noWhitespacesOrColonsValidator], - [this.validators.policyIdExistsValidator], - ], - treeControls: this.expressionFormControls.formGroup, - }); - } -} diff --git a/src/app/routes/connector-ui/policy-definition-create-page/policy-definition-create-page/policy-definition-create-page.component.html b/src/app/routes/connector-ui/policy-definition-create-page/policy-definition-create-page/policy-definition-create-page.component.html deleted file mode 100644 index be0829ea6..000000000 --- a/src/app/routes/connector-ui/policy-definition-create-page/policy-definition-create-page/policy-definition-create-page.component.html +++ /dev/null @@ -1,40 +0,0 @@ -
-
- {{ 'policy_definition_page.metadata' | translate }} -
- - - ID - - {{ - validationMessages.invalidWhitespacesOrColonsMessage - }} - {{ - validationMessages.idExistsErrorMessage - }} - - -
- {{ 'policy_definition_page.expression' | translate }} -
- - - -
- - - -
-
diff --git a/src/app/routes/connector-ui/policy-definition-create-page/policy-definition-create-page/policy-definition-create-page.component.ts b/src/app/routes/connector-ui/policy-definition-create-page/policy-definition-create-page/policy-definition-create-page.component.ts deleted file mode 100644 index e0d9d0c2a..000000000 --- a/src/app/routes/connector-ui/policy-definition-create-page/policy-definition-create-page/policy-definition-create-page.component.ts +++ /dev/null @@ -1,78 +0,0 @@ -import {Component, OnDestroy} from '@angular/core'; -import {Router} from '@angular/router'; -import {Subject} from 'rxjs'; -import {finalize, takeUntil} from 'rxjs/operators'; -import {TranslateService} from '@ngx-translate/core'; -import {PolicyDefinitionCreateDto} from '@sovity.de/edc-client'; -import {EdcApiService} from '../../../../core/services/api/edc-api.service'; -import {NotificationService} from '../../../../core/services/notification.service'; -import {ValidationMessages} from '../../../../core/validators/validation-messages'; -import {ExpressionFormHandler} from '../../../../shared/business/policy-editor/editor/expression-form-handler'; -import {policyFormRequiredViewProviders} from '../../../../shared/business/policy-editor/editor/policy-form-required-providers'; -import {PolicyDefinitionCreatePageForm} from './policy-definition-create-page-form'; - -@Component({ - selector: 'policy-definition-create-page', - templateUrl: './policy-definition-create-page.component.html', - viewProviders: [ - ...policyFormRequiredViewProviders, - PolicyDefinitionCreatePageForm, - ], -}) -export class PolicyDefinitionCreatePageComponent implements OnDestroy { - loading = false; - - constructor( - private router: Router, - public form: PolicyDefinitionCreatePageForm, - public expressionFormHandler: ExpressionFormHandler, - public validationMessages: ValidationMessages, - private edcApiService: EdcApiService, - private notificationService: NotificationService, - private translateService: TranslateService, - ) {} - - onSave() { - const createDto = this.buildPolicyDefinitionCreateDto(); - this.form.group.disable(); - this.loading = true; - this.edcApiService - .createPolicyDefinitionV2(createDto) - .pipe( - takeUntil(this.ngOnDestroy$), - finalize(() => { - this.form.group.enable(); - this.loading = false; - }), - ) - .subscribe({ - complete: () => { - this.notificationService.showInfo( - this.translateService.instant('notification.succ_pol'), - ); - this.router.navigate(['/policies']); - }, - error: (error) => { - const message = this.translateService.instant( - 'notification.failed_create_policy', - ); - console.error(message, error); - this.notificationService.showError(message); - }, - }); - } - - private buildPolicyDefinitionCreateDto(): PolicyDefinitionCreateDto { - return { - policyDefinitionId: this.form.group.controls.id.value, - expression: this.expressionFormHandler.toUiPolicyExpression(), - }; - } - - ngOnDestroy$ = new Subject(); - - ngOnDestroy(): void { - this.ngOnDestroy$.next(null); - this.ngOnDestroy$.complete(); - } -} diff --git a/src/app/routes/connector-ui/policy-definition-page/policy-cards/policy-card-builder.ts b/src/app/routes/connector-ui/policy-definition-page/policy-cards/policy-card-builder.ts deleted file mode 100644 index 11f49b8f5..000000000 --- a/src/app/routes/connector-ui/policy-definition-page/policy-cards/policy-card-builder.ts +++ /dev/null @@ -1,29 +0,0 @@ -import {Injectable} from '@angular/core'; -import {PolicyDefinitionDto, PolicyDefinitionPage} from '@sovity.de/edc-client'; -import {PolicyMapper} from '../../../../shared/business/policy-editor/model/policy-mapper'; -import {PolicyCard} from './policy-card'; - -@Injectable({providedIn: 'root'}) -export class PolicyCardBuilder { - constructor(private policyMapper: PolicyMapper) {} - buildPolicyCards(policyDefinitionPage: PolicyDefinitionPage): PolicyCard[] { - return policyDefinitionPage.policies.map((policyDefinition) => - this.buildPolicyCard(policyDefinition), - ); - } - - buildPolicyCard(policyDefinition: PolicyDefinitionDto): PolicyCard { - const irregularities = policyDefinition.policy?.errors ?? []; - const expression = this.policyMapper.buildPolicy( - policyDefinition.policy.expression!, - ); - return { - id: policyDefinition.policyDefinitionId, - isRegular: !irregularities.length, - irregularities, - expression, - searchText: JSON.stringify(expression), - objectForJson: JSON.parse(policyDefinition.policy.policyJsonLd), - }; - } -} diff --git a/src/app/routes/connector-ui/policy-definition-page/policy-cards/policy-card.ts b/src/app/routes/connector-ui/policy-definition-page/policy-cards/policy-card.ts deleted file mode 100644 index 1953da00a..000000000 --- a/src/app/routes/connector-ui/policy-definition-page/policy-cards/policy-card.ts +++ /dev/null @@ -1,18 +0,0 @@ -import {PolicyExpressionMapped} from '../../../../shared/business/policy-editor/model/policy-expression-mapped'; - -export interface PolicyCard { - id: string; - isRegular: boolean; - irregularities: string[]; - expression: PolicyExpressionMapped; - - searchText: string; - - objectForJson: any; -} - -export interface PolicyCardConstraint { - left: string; - operator: string; - right: string; -} diff --git a/src/app/routes/connector-ui/policy-definition-page/policy-cards/policy-cards.component.html b/src/app/routes/connector-ui/policy-definition-page/policy-cards/policy-cards.component.html deleted file mode 100644 index d63600a11..000000000 --- a/src/app/routes/connector-ui/policy-definition-page/policy-cards/policy-cards.component.html +++ /dev/null @@ -1,23 +0,0 @@ -
- - - policy - - - {{ policyCard.id }} - - - {{ 'general.policy' | translate }} - - - - - -
diff --git a/src/app/routes/connector-ui/policy-definition-page/policy-cards/policy-cards.component.ts b/src/app/routes/connector-ui/policy-definition-page/policy-cards/policy-cards.component.ts deleted file mode 100644 index e2ea37634..000000000 --- a/src/app/routes/connector-ui/policy-definition-page/policy-cards/policy-cards.component.ts +++ /dev/null @@ -1,79 +0,0 @@ -import { - Component, - EventEmitter, - HostBinding, - Input, - Output, -} from '@angular/core'; -import {MatDialog, MatDialogRef} from '@angular/material/dialog'; -import {EMPTY} from 'rxjs'; -import {catchError, tap} from 'rxjs/operators'; -import {TranslateService} from '@ngx-translate/core'; -import {EdcApiService} from '../../../../core/services/api/edc-api.service'; -import {NotificationService} from '../../../../core/services/notification.service'; -import {ConfirmDialogModel} from '../../../../shared/common/confirmation-dialog/confirmation-dialog.component'; -import {JsonDialogComponent} from '../../../../shared/common/json-dialog/json-dialog.component'; -import {JsonDialogData} from '../../../../shared/common/json-dialog/json-dialog.data'; -import {PolicyCard} from './policy-card'; - -@Component({ - selector: 'policy-cards', - templateUrl: './policy-cards.component.html', -}) -export class PolicyCardsComponent { - @HostBinding('class.flex') - @HostBinding('class.flex-wrap') - @HostBinding('class.gap-[10px]') - cls = true; - - @Input() - policyCards: PolicyCard[] = []; - - @Input() - deleteBusy = false; - - @Output() - deleteDone = new EventEmitter(); - - constructor( - private edcApiService: EdcApiService, - private matDialog: MatDialog, - private notificationService: NotificationService, - private translateService: TranslateService, - ) {} - - onPolicyDetailClick(policyCard: PolicyCard) { - let dialogRef: MatDialogRef; - const data: JsonDialogData = { - title: policyCard.id, - subtitle: this.translateService.instant('general.policy'), - icon: 'policy', - objectForJson: policyCard.objectForJson, - toolbarButton: { - text: this.translateService.instant('general.delete'), - icon: 'delete', - confirmation: ConfirmDialogModel.forDelete( - 'general.policy', - policyCard.id, - this.translateService, - ), - action: () => - this.edcApiService.deletePolicyDefinition(policyCard.id).pipe( - tap(() => { - this.notificationService.showInfo('Policy deleted!'); - this.deleteDone.emit(); - dialogRef?.close(); - }), - catchError((err) => { - const msg = `Failed deleting policy with id ${policyCard.id}`; - console.error(msg, err); - this.notificationService.showError(msg); - return EMPTY; - }), - ), - }, - }; - - dialogRef = this.matDialog.open(JsonDialogComponent, {data}); - } -} diff --git a/src/app/routes/connector-ui/policy-definition-page/policy-definition-page.module.ts b/src/app/routes/connector-ui/policy-definition-page/policy-definition-page.module.ts deleted file mode 100644 index 003dbeca1..000000000 --- a/src/app/routes/connector-ui/policy-definition-page/policy-definition-page.module.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {CommonModule} from '@angular/common'; -import {NgModule} from '@angular/core'; -import {FormsModule, ReactiveFormsModule} from '@angular/forms'; -import {RouterModule} from '@angular/router'; -import {SharedModule} from '../../../shared/shared.module'; -import {PolicyCardsComponent} from './policy-cards/policy-cards.component'; -import {PolicyDefinitionPageComponent} from './policy-definition-page/policy-definition-page.component'; - -@NgModule({ - imports: [ - // Angular - CommonModule, - FormsModule, - ReactiveFormsModule, - RouterModule, - - // EDC UI Modules - SharedModule, - ], - declarations: [PolicyCardsComponent, PolicyDefinitionPageComponent], - exports: [PolicyDefinitionPageComponent], -}) -export class PolicyDefinitionPageModule {} diff --git a/src/app/routes/connector-ui/policy-definition-page/policy-definition-page/policy-definition-page.component.html b/src/app/routes/connector-ui/policy-definition-page/policy-definition-page/policy-definition-page.component.html deleted file mode 100644 index 127a047de..000000000 --- a/src/app/routes/connector-ui/policy-definition-page/policy-definition-page/policy-definition-page.component.html +++ /dev/null @@ -1,69 +0,0 @@ -
-
- - - {{ - 'policy_definition_page.search_pol' | translate - }} - - search - - - - - - - -
- - - -
- -
- - - -
- -
diff --git a/src/app/routes/connector-ui/policy-definition-page/policy-definition-page/policy-definition-page.component.scss b/src/app/routes/connector-ui/policy-definition-page/policy-definition-page/policy-definition-page.component.scss deleted file mode 100644 index 68efc9c9e..000000000 --- a/src/app/routes/connector-ui/policy-definition-page/policy-definition-page/policy-definition-page.component.scss +++ /dev/null @@ -1,21 +0,0 @@ -#wrapper { - margin: 20px; -} - -.policy-card { - width: calc(100% / 2 - 48px); -} - -#create-button { - margin-left: 10px; -} - -mat-paginator { - display: inline-block; - background-color: transparent; -} - -.search-form-field { - min-width: 200px; - width: 30%; -} diff --git a/src/app/routes/connector-ui/policy-definition-page/policy-definition-page/policy-definition-page.component.ts b/src/app/routes/connector-ui/policy-definition-page/policy-definition-page/policy-definition-page.component.ts deleted file mode 100644 index 0c6b2df03..000000000 --- a/src/app/routes/connector-ui/policy-definition-page/policy-definition-page/policy-definition-page.component.ts +++ /dev/null @@ -1,78 +0,0 @@ -import {Component, OnInit} from '@angular/core'; -import {BehaviorSubject} from 'rxjs'; -import {map, switchMap} from 'rxjs/operators'; -import {EdcApiService} from '../../../../core/services/api/edc-api.service'; -import {Fetched} from '../../../../core/services/models/fetched'; -import {search} from '../../../../core/utils/search-utils'; -import {PolicyCard} from '../policy-cards/policy-card'; -import {PolicyCardBuilder} from '../policy-cards/policy-card-builder'; - -export interface PolicyList { - policyCards: PolicyCard[]; - numTotalPolicies: number; -} - -@Component({ - selector: 'policy-definition-page', - templateUrl: './policy-definition-page.component.html', - styleUrls: ['./policy-definition-page.component.scss'], -}) -export class PolicyDefinitionPageComponent implements OnInit { - policyList: Fetched = Fetched.empty(); - searchText: string = ''; - deleteBusy = false; - private fetch$ = new BehaviorSubject(null); - - constructor( - private edcApiService: EdcApiService, - private policyCardBuilder: PolicyCardBuilder, - ) {} - - ngOnInit(): void { - this.fetch$ - .pipe( - switchMap(() => { - return this.edcApiService.getPolicyDefinitionPage().pipe( - map( - (policyDefinitionPage): PolicyList => ({ - policyCards: - this.policyCardBuilder.buildPolicyCards(policyDefinitionPage), - - numTotalPolicies: policyDefinitionPage.policies.length, - }), - ), - map((policyList) => this.filterPolicies(policyList)), - Fetched.wrap({ - failureMessage: 'Failed fetching policies.', - }), - ); - }), - ) - .subscribe((policyList) => (this.policyList = policyList)); - } - - onSearch() { - this.refresh(); - } - - refresh() { - this.fetch$.next(null); - } - - private filterPolicies(policyList: PolicyList): PolicyList { - const policyCards = search( - policyList.policyCards, - this.searchText, - (policyCard: PolicyCard) => [ - policyCard.id, - ...policyCard.irregularities, - policyCard.searchText, - ], - ); - - return { - policyCards, - numTotalPolicies: policyCards.length, - }; - } -} diff --git a/src/app/routes/connector-ui/transfer-history-page/transfer-history-page.module.ts b/src/app/routes/connector-ui/transfer-history-page/transfer-history-page.module.ts deleted file mode 100644 index fe9ca4574..000000000 --- a/src/app/routes/connector-ui/transfer-history-page/transfer-history-page.module.ts +++ /dev/null @@ -1,24 +0,0 @@ -import {CommonModule} from '@angular/common'; -import {NgModule} from '@angular/core'; -import {FormsModule, ReactiveFormsModule} from '@angular/forms'; -import {RouterModule} from '@angular/router'; -import {TranslateModule} from '@ngx-translate/core'; -import {SharedModule} from '../../../shared/shared.module'; -import {TransferHistoryPageComponent} from './transfer-history-page/transfer-history-page.component'; - -@NgModule({ - imports: [ - // Angular - CommonModule, - FormsModule, - ReactiveFormsModule, - RouterModule, - TranslateModule, - - // EDC UI Modules - SharedModule, - ], - declarations: [TransferHistoryPageComponent], - exports: [TransferHistoryPageComponent], -}) -export class TransferHistoryPageModule {} diff --git a/src/app/routes/connector-ui/transfer-history-page/transfer-history-page/transfer-history-page.component.html b/src/app/routes/connector-ui/transfer-history-page/transfer-history-page/transfer-history-page.component.html deleted file mode 100644 index fb547048f..000000000 --- a/src/app/routes/connector-ui/transfer-history-page/transfer-history-page/transfer-history-page.component.html +++ /dev/null @@ -1,145 +0,0 @@ -
-
-
- -
-
- - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- {{ 'general.direction' | translate }} - - - {{ item.direction === 'PROVIDING' ? 'upload' : 'download' }} - - - {{ 'general.updated' | translate }} - - - - {{ 'general.asset' | translate }} - - -
- {{ item.assetName }} -
-
- {{ 'general.state' | translate }} - -
- - {{ item.state.name }} - {{ - item.state.name === 'CUSTOM' ? ' (' + item.state.code + ')' : '' - }} - - - warning - - - - -
-
- {{ 'transfer_history_page.counter_id' | translate }} - - {{ item.counterPartyParticipantId }} - - {{ 'transfer_history_page.counter_endpoint' | translate }} - - {{ item.counterPartyConnectorEndpoint }} - - {{ 'general.details' | translate }} - - - {{ 'general.details' | translate }} - -
-
-
diff --git a/src/app/routes/connector-ui/transfer-history-page/transfer-history-page/transfer-history-page.component.scss b/src/app/routes/connector-ui/transfer-history-page/transfer-history-page/transfer-history-page.component.scss deleted file mode 100644 index 61532b28b..000000000 --- a/src/app/routes/connector-ui/transfer-history-page/transfer-history-page/transfer-history-page.component.scss +++ /dev/null @@ -1,46 +0,0 @@ -#wrapper { - margin: 20px; -} - -.transfer-history-table { - width: 100%; -} - -.transfer-history-table-header th { - font-weight: bold; -} - -.mat-table { - overflow-x: scroll; -} - -.mat-cell, -.mat-header-cell { - padding: 0px 10px; -} - -.singleline-cell { - white-space: nowrap; -} - -mat-paginator { - display: inline-block; - background-color: transparent; -} - -.info-box { - display: flex; - align-items: center; - - .text { - padding-left: 10px; - } - - .button { - margin-left: auto; - } -} - -.action-button { - margin-right: 5px; -} diff --git a/src/app/routes/connector-ui/transfer-history-page/transfer-history-page/transfer-history-page.component.ts b/src/app/routes/connector-ui/transfer-history-page/transfer-history-page/transfer-history-page.component.ts deleted file mode 100644 index baa1dd7bf..000000000 --- a/src/app/routes/connector-ui/transfer-history-page/transfer-history-page/transfer-history-page.component.ts +++ /dev/null @@ -1,137 +0,0 @@ -import {Component, OnDestroy, OnInit} from '@angular/core'; -import { - EMPTY, - Observable, - Subject, - concat, - interval, - skip, - switchMap, -} from 'rxjs'; -import {catchError, map} from 'rxjs/operators'; -import {TranslateService} from '@ngx-translate/core'; -import { - TransferHistoryEntry, - TransferHistoryPage, - UiAsset, -} from '@sovity.de/edc-client'; -import {EdcApiService} from '../../../../core/services/api/edc-api.service'; -import {AssetBuilder} from '../../../../core/services/asset-builder'; -import {Fetched} from '../../../../core/services/models/fetched'; -import {UiAssetMapped} from '../../../../core/services/models/ui-asset-mapped'; -import {NotificationService} from '../../../../core/services/notification.service'; -import {ParticipantIdLocalization} from '../../../../core/services/participant-id-localization'; -import {AssetDetailDialogDataService} from '../../../../shared/business/asset-detail-dialog/asset-detail-dialog-data.service'; -import {AssetDetailDialogService} from '../../../../shared/business/asset-detail-dialog/asset-detail-dialog.service'; -import {JsonDialogService} from '../../../../shared/common/json-dialog/json-dialog.service'; - -@Component({ - selector: 'transfer-history-page', - templateUrl: './transfer-history-page.component.html', - styleUrls: ['./transfer-history-page.component.scss'], -}) -export class TransferHistoryPageComponent implements OnInit, OnDestroy { - columns: string[] = [ - 'direction', - 'lastUpdated', - 'assetName', - 'state', - 'counterPartyParticipantId', - 'counterPartyConnectorEndpoint', - 'details', - ]; - transferProcessesList: Fetched<{ - transferProcesses: Array; - }> = Fetched.empty(); - - constructor( - private edcApiService: EdcApiService, - private assetDetailDialogDataService: AssetDetailDialogDataService, - private assetDetailDialogService: AssetDetailDialogService, - private assetBuilder: AssetBuilder, - private notificationService: NotificationService, - private jsonDialogService: JsonDialogService, - public participantIdLocalization: ParticipantIdLocalization, - private translateService: TranslateService, - ) {} - - onTransferHistoryDetailsClick(item: TransferHistoryEntry) { - this.jsonDialogService.showJsonDetailDialog( - { - title: item.assetName ?? item.assetId, - subtitle: this.translateService.instant( - 'transfer_history_page.subtitle', - ), - icon: 'assignment', - objectForJson: item, - }, - this.ngOnDestroy$, - ); - } - - loadAssetDetails(item: TransferHistoryEntry): Observable { - return this.edcApiService - .getTransferProcessAsset(item.transferProcessId) - .pipe(map((asset: UiAsset) => this.assetBuilder.buildAsset(asset))); - } - - onAssetDetailsClick(item: TransferHistoryEntry) { - this.loadAssetDetails(item).subscribe({ - next: (asset) => { - const data = - this.assetDetailDialogDataService.assetDetailsReadonly(asset); - this.assetDetailDialogService.open(data, this.ngOnDestroy$); - }, - error: (error) => { - const message = this.translateService.instant( - 'notification.failed_transfer_detail_fetch', - ); - console.error(message, error); - this.notificationService.showError(message); - }, - }); - } - - ngOnInit(): void { - this.loadTransferProcesses(); - } - - loadTransferProcesses() { - const initialRequest: Observable> = - this.edcApiService.getTransferHistoryPage().pipe( - Fetched.wrap({ - failureMessage: 'Failed fetching transfer history.', - }), - ); - - const polling: Observable> = interval( - 5_000, - ).pipe( - skip(1), - switchMap(() => - this.edcApiService - .getTransferHistoryPage() - .pipe(catchError(() => EMPTY)), - ), - map((data) => Fetched.ready(data)), - ); - - return concat(initialRequest, polling) - .pipe( - Fetched.map((transferHistoryPage) => ({ - transferProcesses: transferHistoryPage.transferEntries, - })), - ) - .subscribe( - (transferProcessesList) => - (this.transferProcessesList = transferProcessesList), - ); - } - - ngOnDestroy$ = new Subject(); - - ngOnDestroy() { - this.ngOnDestroy$.next(null); - this.ngOnDestroy$.complete(); - } -} diff --git a/src/app/shared/business/asset-card-tag-list/asset-card-tag-list.component.html b/src/app/shared/business/asset-card-tag-list/asset-card-tag-list.component.html deleted file mode 100644 index 4392c8708..000000000 --- a/src/app/shared/business/asset-card-tag-list/asset-card-tag-list.component.html +++ /dev/null @@ -1,10 +0,0 @@ - - {{ version }} - {{ keyword }} - - +{{ keywords!.length - numberOfKeywordsDisplayed }} - - diff --git a/src/app/shared/business/asset-card-tag-list/asset-card-tag-list.component.ts b/src/app/shared/business/asset-card-tag-list/asset-card-tag-list.component.ts deleted file mode 100644 index a656d4fd9..000000000 --- a/src/app/shared/business/asset-card-tag-list/asset-card-tag-list.component.ts +++ /dev/null @@ -1,12 +0,0 @@ -import {Component, HostBinding, Input} from '@angular/core'; - -@Component({ - selector: 'asset-card-tag-list', - templateUrl: './asset-card-tag-list.component.html', -}) -export class AssetCardTagListComponent { - @HostBinding('class.block') cls = true; - @Input() numberOfKeywordsDisplayed: number = 3; - @Input() keywords: string[] | undefined; - @Input() version: string | undefined; -} diff --git a/src/app/shared/business/asset-detail-dialog/asset-detail-dialog-data.service.ts b/src/app/shared/business/asset-detail-dialog/asset-detail-dialog-data.service.ts deleted file mode 100644 index 4680aa20d..000000000 --- a/src/app/shared/business/asset-detail-dialog/asset-detail-dialog-data.service.ts +++ /dev/null @@ -1,109 +0,0 @@ -import {Injectable} from '@angular/core'; -import {TranslateService} from '@ngx-translate/core'; -import {DataOffer} from '../../../core/services/models/data-offer'; -import {UiAssetMapped} from '../../../core/services/models/ui-asset-mapped'; -import {ContractAgreementCardMapped} from '../../../routes/connector-ui/contract-agreement-page/contract-agreement-cards/contract-agreement-card-mapped'; -import { - AssetDetailDialogData, - OnAssetEditClickFn, -} from './asset-detail-dialog-data'; -import {AssetPropertyGridGroupBuilder} from './asset-property-grid-group-builder'; - -@Injectable() -export class AssetDetailDialogDataService { - constructor( - private assetPropertyGridGroupBuilder: AssetPropertyGridGroupBuilder, - private translateService: TranslateService, - ) {} - - assetDetailsReadonly(asset: UiAssetMapped): AssetDetailDialogData { - const propertyGridGroups = [ - this.assetPropertyGridGroupBuilder.buildAssetPropertiesGroup(asset, null), - ...this.assetPropertyGridGroupBuilder.buildAdditionalPropertiesGroups( - asset, - ), - ].filter((it) => it.properties.length); - - return { - type: 'asset-details', - asset, - propertyGridGroups, - }; - } - - assetDetailsEditable( - asset: UiAssetMapped, - opts: {onAssetEditClick: OnAssetEditClickFn}, - ): AssetDetailDialogData { - const assetDetailsReadonly = this.assetDetailsReadonly(asset); - return { - ...assetDetailsReadonly, - propertyGridGroups: [ - ...assetDetailsReadonly.propertyGridGroups, - ...this.assetPropertyGridGroupBuilder.buildOnRequestContactInformation( - asset, - ), - ], - showDeleteButton: true, - showEditButton: true, - onAssetEditClick: opts.onAssetEditClick, - }; - } - - dataOfferDetails( - dataOffer: DataOffer, - consumingLimitsExceeded: boolean, - ): AssetDetailDialogData { - const asset = dataOffer.asset; - const propertyGridGroups = [ - this.assetPropertyGridGroupBuilder.buildAssetPropertiesGroup(asset, null), - ...this.assetPropertyGridGroupBuilder.buildAdditionalPropertiesGroups( - asset, - ), - ...this.assetPropertyGridGroupBuilder.buildOnRequestContactInformation( - asset, - true, - ), - ].filter((it) => it.properties.length); - - return { - type: 'data-offer', - asset: asset, - dataOffer, - propertyGridGroups, - consumingLimitsExceeded, - }; - } - - contractAgreementDetails( - contractAgreement: ContractAgreementCardMapped, - refreshCallback: () => void, - ): AssetDetailDialogData { - const asset = contractAgreement.asset; - - const propertyGridGroups = [ - this.assetPropertyGridGroupBuilder.buildContractAgreementGroup( - contractAgreement, - ), - this.assetPropertyGridGroupBuilder.buildContractPolicyGroup( - contractAgreement.contractPolicy, - asset.title, - ), - this.assetPropertyGridGroupBuilder.buildAssetPropertiesGroup( - asset, - this.translateService.instant('general.asset'), - ), - ...this.assetPropertyGridGroupBuilder.buildAdditionalPropertiesGroups( - asset, - ), - ].filter((it) => it.properties.length); - - return { - type: 'contract-agreement', - asset: contractAgreement.asset, - contractAgreement, - propertyGridGroups, - refreshCallback, - }; - } -} diff --git a/src/app/shared/business/asset-detail-dialog/asset-detail-dialog-data.ts b/src/app/shared/business/asset-detail-dialog/asset-detail-dialog-data.ts deleted file mode 100644 index a40a6f6b5..000000000 --- a/src/app/shared/business/asset-detail-dialog/asset-detail-dialog-data.ts +++ /dev/null @@ -1,25 +0,0 @@ -import {UiAssetMapped} from 'src/app/core/services/models/ui-asset-mapped'; -import {DataOffer} from '../../../core/services/models/data-offer'; -import {ContractAgreementCardMapped} from '../../../routes/connector-ui/contract-agreement-page/contract-agreement-cards/contract-agreement-card-mapped'; -import {PropertyGridGroup} from '../../common/property-grid-group/property-grid-group'; - -export interface AssetDetailDialogData { - type: 'asset-details' | 'data-offer' | 'contract-agreement'; - propertyGridGroups: PropertyGridGroup[]; - asset: UiAssetMapped; - dataOffer?: DataOffer; - consumingLimitsExceeded?: boolean; - contractAgreement?: ContractAgreementCardMapped; - showDeleteButton?: boolean; - showEditButton?: boolean; - onAssetEditClick?: OnAssetEditClickFn; - refreshCallback?: () => void; -} - -export type OnAssetEditClickFn = ( - asset: UiAssetMapped, - /** - * Required so that after the editing the detail dialog can be updated again - */ - afterEditCb: (updatedDialogData: AssetDetailDialogData) => void, -) => void; diff --git a/src/app/shared/business/asset-detail-dialog/asset-detail-dialog-result.ts b/src/app/shared/business/asset-detail-dialog/asset-detail-dialog-result.ts deleted file mode 100644 index 8fede8221..000000000 --- a/src/app/shared/business/asset-detail-dialog/asset-detail-dialog-result.ts +++ /dev/null @@ -1,6 +0,0 @@ -export interface AssetDetailDialogResult { - /** - * When deleting an asset, update asset list - */ - refreshList: boolean; -} diff --git a/src/app/shared/business/asset-detail-dialog/asset-detail-dialog.component.html b/src/app/shared/business/asset-detail-dialog/asset-detail-dialog.component.html deleted file mode 100644 index c4b84e3e2..000000000 --- a/src/app/shared/business/asset-detail-dialog/asset-detail-dialog.component.html +++ /dev/null @@ -1,240 +0,0 @@ -
-
- - {{ asset.dataSourceAvailability === 'LIVE' ? 'upload' : 'contact_page' }} - - - {{ - data.contractAgreement!.direction === 'PROVIDING' - ? data.contractAgreement!.isTerminated - ? 'file_upload_off' - : 'file_upload' - : data.contractAgreement!.isTerminated - ? 'file_download_off' - : 'file_download' - }} - - -
-
- {{ asset.title }} -
-
- {{ asset.creatorOrganizationName }} -
-
-
-
- - -
-
- -
- - - - -
-
-
- -
-
-
- {{ data.contractAgreement!.terminationInformation!.reason }} -
-
- {{ data.contractAgreement!.terminationInformation!.detail }} -
-
- - · {{ 'general.terminated_by' | translate }} - {{ - data.contractAgreement!.terminationInformation?.terminatedBy === - 'SELF' - ? 'you' - : 'the counter-party' - }} -
-
-
-
- - - - -
-
-
- - -
- - {{ keyword }} - -
- - - -
- {{ 'component_library.t_history' | translate }} -
- - -
- - - - - - - - - - -
- {{ 'asset_detail_dialog.on_request_data_offer_title' | translate }} -
-
-
-
- - -
-
- -
- -
- - - - - - - - - - - - -
-
-
diff --git a/src/app/shared/business/asset-detail-dialog/asset-detail-dialog.component.scss b/src/app/shared/business/asset-detail-dialog/asset-detail-dialog.component.scss deleted file mode 100644 index b16dfa10f..000000000 --- a/src/app/shared/business/asset-detail-dialog/asset-detail-dialog.component.scss +++ /dev/null @@ -1,4 +0,0 @@ -mat-dialog-content, -.mat-card-header { - width: 800px; -} diff --git a/src/app/shared/business/asset-detail-dialog/asset-detail-dialog.component.ts b/src/app/shared/business/asset-detail-dialog/asset-detail-dialog.component.ts deleted file mode 100644 index 3c7e526fb..000000000 --- a/src/app/shared/business/asset-detail-dialog/asset-detail-dialog.component.ts +++ /dev/null @@ -1,255 +0,0 @@ -import {DOCUMENT} from '@angular/common'; -import {Component, Inject, OnDestroy} from '@angular/core'; -import { - MAT_DIALOG_DATA, - MatDialog, - MatDialogRef, -} from '@angular/material/dialog'; -import {Observable, Subject, isObservable} from 'rxjs'; -import {filter, finalize, takeUntil} from 'rxjs/operators'; -import {TranslateService} from '@ngx-translate/core'; -import {UiContractOffer} from '@sovity.de/edc-client'; -import {MailtoLinkBuilder} from 'src/app/core/services/mailto-link-builder'; -import {EdcApiService} from '../../../core/services/api/edc-api.service'; -import {ConnectorLimitsService} from '../../../core/services/connector-limits.service'; -import {ContractNegotiationService} from '../../../core/services/contract-negotiation.service'; -import {UiAssetMapped} from '../../../core/services/models/ui-asset-mapped'; -import {NotificationService} from '../../../core/services/notification.service'; -import {ContractAgreementTerminationDialogData} from '../../../routes/connector-ui/contract-agreement-page/contract-agreement-termination-dialog/contract-agreement-termination-dialog-data'; -import {ContractAgreementTerminationDialogResult} from '../../../routes/connector-ui/contract-agreement-page/contract-agreement-termination-dialog/contract-agreement-termination-dialog-result'; -import {ContractAgreementTerminationDialogComponent} from '../../../routes/connector-ui/contract-agreement-page/contract-agreement-termination-dialog/contract-agreement-termination-dialog.component'; -import {ContractAgreementTransferDialogData} from '../../../routes/connector-ui/contract-agreement-page/contract-agreement-transfer-dialog/contract-agreement-transfer-dialog-data'; -import {ContractAgreementTransferDialogResult} from '../../../routes/connector-ui/contract-agreement-page/contract-agreement-transfer-dialog/contract-agreement-transfer-dialog-result'; -import {ContractAgreementTransferDialogComponent} from '../../../routes/connector-ui/contract-agreement-page/contract-agreement-transfer-dialog/contract-agreement-transfer-dialog.component'; -import { - ConfirmDialogModel, - ConfirmationDialogComponent, -} from '../../common/confirmation-dialog/confirmation-dialog.component'; -import {PropertyGridGroup} from '../../common/property-grid-group/property-grid-group'; -import {AssetDetailDialogData} from './asset-detail-dialog-data'; -import {AssetDetailDialogResult} from './asset-detail-dialog-result'; - -/** - * Asset Detail Dialog - * Contract Agreement Detail Dialog - * Contract Offer Detail Dialog - *

- * All in one! If that's a good idea remains to be seen. - */ -@Component({ - selector: 'asset-detail-dialog', - templateUrl: './asset-detail-dialog.component.html', - styleUrls: ['./asset-detail-dialog.component.scss'], -}) -export class AssetDetailDialogComponent implements OnDestroy { - data!: AssetDetailDialogData; - asset!: UiAssetMapped; - propGroups!: PropertyGridGroup[]; - - limitsExceeded: boolean | null = null; - - loading = false; - - get isProgressBarVisible(): boolean { - switch (this.data.type) { - case 'data-offer': - return ( - this.data.dataOffer?.contractOffers?.some((it) => - this.contractNegotiationService.isBusy(it), - ) ?? false - ); - case 'contract-agreement': - return this.data.contractAgreement!.isInProgress; - default: - return false; - } - } - - get isLiveDataOffer(): boolean { - return ( - this.data.type === 'data-offer' && - this.data.asset.dataSourceAvailability === 'LIVE' - ); - } - - get isOnRequestDataOffer(): boolean { - return ( - this.data.type === 'data-offer' && - this.data.asset.dataSourceAvailability === 'ON_REQUEST' - ); - } - - constructor( - private edcApiService: EdcApiService, - private notificationService: NotificationService, - private connectorLimitsService: ConnectorLimitsService, - private matDialog: MatDialog, - private matDialogRef: MatDialogRef, - @Inject(MAT_DIALOG_DATA) - private _data: AssetDetailDialogData | Observable, - public contractNegotiationService: ContractNegotiationService, - private mailtoLinkBuilder: MailtoLinkBuilder, - @Inject(DOCUMENT) private document: Document, - private translateService: TranslateService, - ) { - if (isObservable(this._data)) { - this._data - .pipe(takeUntil(this.ngOnDestroy$)) - .subscribe((data) => this.setData(data)); - } else { - this.setData(this._data); - } - } - - setData(data: AssetDetailDialogData) { - this.data = data; - this.limitsExceeded = data.consumingLimitsExceeded ?? null; - this.asset = this.data.asset; - this.propGroups = this.data.propertyGridGroups; - } - - onContactClick() { - if (!this.asset.onRequestContactEmail) { - throw new Error('On request asset must have contact email'); - } - - const url = this.mailtoLinkBuilder.buildMailtoUrl( - this.asset.onRequestContactEmail, - this.asset.onRequestContactEmailSubject ?? - "I'm interested in your data offer", - ); - this.document.location.href = url; - } - - onEditClick() { - if (this.data.onAssetEditClick) { - this.data.onAssetEditClick(this.data.asset, (data) => this.setData(data)); - } - } - - onDeleteClick() { - this.confirmDelete().subscribe(() => { - this.blockingRequest({ - successMessage: `Deleted asset ${this.asset.assetId}.`, - failureMessage: `Failed deleting asset ${this.asset.assetId}.`, - onsuccess: () => this.close({refreshList: true}), - req: () => this.edcApiService.deleteAsset(this.asset.assetId), - }); - }); - } - - onNegotiateClick(contractOffer: UiContractOffer) { - this.connectorLimitsService - .isConsumingAgreementLimitExceeded() - .subscribe((limitExceeded) => { - if (!limitExceeded) { - this.limitsExceeded = false; - this.contractNegotiationService.negotiate( - this.data.dataOffer!, - contractOffer, - ); - } else { - this.limitsExceeded = true; - this.notificationService.showError( - 'Cannot negotiate. Maximum number of active consuming contracts reached.', - ); - } - }); - } - - onTransferClick() { - const data: ContractAgreementTransferDialogData = { - contractId: this.data.contractAgreement?.contractAgreementId!!, - asset: this.data.asset, - }; - const ref = this.matDialog.open(ContractAgreementTransferDialogComponent, { - data, - }); - - ref - .afterClosed() - .subscribe( - (result: ContractAgreementTransferDialogResult | undefined) => { - if (result) { - this.data.refreshCallback?.(); - } - }, - ); - } - - onTerminateClick() { - const data: ContractAgreementTerminationDialogData = { - contractId: this.data.contractAgreement?.contractAgreementId!!, - asset: this.data.asset, - }; - const ref = this.matDialog.open( - ContractAgreementTerminationDialogComponent, - {data}, - ); - - ref - .afterClosed() - .subscribe( - (result: ContractAgreementTerminationDialogResult | undefined) => { - if (result) { - this.data.refreshCallback?.(); - } - }, - ); - } - - private confirmDelete(): Observable { - const dialogData = ConfirmDialogModel.forDelete( - 'general.asset', - this.asset.title, - this.translateService, - ); - const ref = this.matDialog.open(ConfirmationDialogComponent, { - maxWidth: '20%', - data: dialogData, - }); - return ref.afterClosed().pipe(filter((it) => !!it)); - } - - private blockingRequest(opts: { - req: () => Observable; - successMessage: string; - failureMessage: string; - onsuccess?: () => void; - }) { - if (this.loading) { - return; - } - - this.loading = true; - opts - .req() - .pipe( - takeUntil(this.ngOnDestroy$), - finalize(() => (this.loading = false)), - ) - .subscribe({ - complete: () => { - this.notificationService.showInfo(opts.successMessage); - if (opts.onsuccess) { - opts.onsuccess(); - } - }, - error: (err) => { - console.error(opts.failureMessage, err); - this.notificationService.showError(opts.failureMessage); - }, - }); - } - - private close(result: AssetDetailDialogResult) { - this.matDialogRef.close(result); - } - - ngOnDestroy$ = new Subject(); - - ngOnDestroy(): void { - this.ngOnDestroy$.next(null); - this.ngOnDestroy$.complete(); - } -} diff --git a/src/app/shared/business/asset-detail-dialog/asset-detail-dialog.service.ts b/src/app/shared/business/asset-detail-dialog/asset-detail-dialog.service.ts deleted file mode 100644 index 2772149ed..000000000 --- a/src/app/shared/business/asset-detail-dialog/asset-detail-dialog.service.ts +++ /dev/null @@ -1,29 +0,0 @@ -import {Injectable} from '@angular/core'; -import {MatDialog} from '@angular/material/dialog'; -import {NEVER, Observable} from 'rxjs'; -import {showDialogUntil} from '../../../core/utils/mat-dialog-utils'; -import {AssetDetailDialogData} from './asset-detail-dialog-data'; -import {AssetDetailDialogResult} from './asset-detail-dialog-result'; -import {AssetDetailDialogComponent} from './asset-detail-dialog.component'; - -@Injectable() -export class AssetDetailDialogService { - constructor(private dialog: MatDialog) {} - - /** - * Shows an Asset Detail Dialog until until$ emits / completes - * @param data Asset Detail Dialog data, or a stream if there's a need to refresh the data - * @param until$ observable that controls the lifetime of the dialog - */ - open( - data: AssetDetailDialogData | Observable, - until$: Observable = NEVER, - ): Observable { - return showDialogUntil( - this.dialog, - AssetDetailDialogComponent, - {data, maxWidth: '1000px', maxHeight: '90vh', autoFocus: false}, - until$, - ); - } -} diff --git a/src/app/shared/business/asset-detail-dialog/asset-property-grid-group-builder.ts b/src/app/shared/business/asset-detail-dialog/asset-property-grid-group-builder.ts deleted file mode 100644 index 5007ffcc6..000000000 --- a/src/app/shared/business/asset-detail-dialog/asset-property-grid-group-builder.ts +++ /dev/null @@ -1,475 +0,0 @@ -import {Injectable} from '@angular/core'; -import {TranslateService} from '@ngx-translate/core'; -import {UiPolicy} from '@sovity.de/edc-client'; -import {ActiveFeatureSet} from '../../../core/config/active-feature-set'; -import {UiAssetMapped} from '../../../core/services/models/ui-asset-mapped'; -import {ParticipantIdLocalization} from '../../../core/services/participant-id-localization'; -import {ContractAgreementCardMapped} from '../../../routes/connector-ui/contract-agreement-page/contract-agreement-cards/contract-agreement-card-mapped'; -import {PropertyGridGroup} from '../../common/property-grid-group/property-grid-group'; -import {PropertyGridField} from '../../common/property-grid/property-grid-field'; -import {PropertyGridFieldService} from '../../common/property-grid/property-grid-field.service'; -import {UrlListDialogService} from '../../common/url-list-dialog/url-list-dialog.service'; -import {ConditionsForUseDialogService} from '../conditions-for-use-dialog/conditions-for-use-dialog.service'; -import {PolicyPropertyFieldBuilder} from './policy-property-field-builder'; - -@Injectable() -export class AssetPropertyGridGroupBuilder { - constructor( - private activeFeatureSet: ActiveFeatureSet, - private propertyGridUtils: PropertyGridFieldService, - private urlListDialogService: UrlListDialogService, - private conditionsForUseDialogService: ConditionsForUseDialogService, - private policyPropertyFieldBuilder: PolicyPropertyFieldBuilder, - private translateService: TranslateService, - private participantIdLocalization: ParticipantIdLocalization, - ) {} - - buildAssetPropertiesGroup( - asset: UiAssetMapped, - groupLabel: string | null, - ): PropertyGridGroup { - const fields: PropertyGridField[] = [ - { - icon: 'category', - label: 'ID', - ...this.propertyGridUtils.guessValue(asset.assetId), - }, - { - icon: 'file_copy', - label: 'Version', - ...this.propertyGridUtils.guessValue(asset.version), - }, - { - icon: 'language', - label: this.translateService.instant('general.language'), - ...this.propertyGridUtils.guessValue(asset.language?.label), - }, - { - icon: 'apartment', - label: this.translateService.instant('general.publisher'), - ...this.propertyGridUtils.guessValue(asset.publisherHomepage), - }, - { - icon: 'bookmarks', - label: this.translateService.instant('general.endpoint_doc'), - ...this.propertyGridUtils.guessValue(asset.landingPageUrl), - }, - { - icon: 'gavel', - label: this.translateService.instant('general.standard_license'), - ...this.propertyGridUtils.guessValue(asset.licenseUrl), - }, - { - icon: 'category', - label: this.translateService.instant( - 'component_library.participant_id', - ), - ...this.propertyGridUtils.guessValue(asset.participantId), - }, - { - icon: 'account_circle', - label: this.translateService.instant('component_library.organization'), - ...this.propertyGridUtils.guessValue(asset.creatorOrganizationName), - }, - this.buildConnectorEndpointField(asset.connectorEndpoint), - ...this.buildHttpDatasourceFields(asset), - ]; - - if (this.activeFeatureSet.hasMdsFields()) { - fields.push(...this.buildMdsProperties(asset)); - } - - return { - groupLabel, - properties: fields, - }; - } - - private buildHttpDatasourceFields(asset: UiAssetMapped): PropertyGridField[] { - const fields: PropertyGridField[] = []; - - const hints: {label: string; value: boolean | undefined}[] = [ - { - label: this.translateService.instant('general.method'), - value: asset.httpDatasourceHintsProxyMethod, - }, - { - label: this.translateService.instant('general.path'), - value: asset.httpDatasourceHintsProxyPath, - }, - { - label: this.translateService.instant('general.params'), - value: asset.httpDatasourceHintsProxyQueryParams, - }, - { - label: this.translateService.instant('general.body'), - value: asset.httpDatasourceHintsProxyBody, - }, - ]; - - if (hints.some((hint) => hint.value != null)) { - const text = hints.some((hint) => hint.value) - ? hints - .filter((hint) => hint.value) - .map((hint) => hint.label) - .join(', ') - : 'Disabled'; - - fields.push({ - icon: 'api', - label: this.translateService.instant('component_library.http_param'), - text, - }); - } - - if (asset.mediaType) { - fields.push({ - icon: 'category', - label: this.translateService.instant('general.content_type'), - ...this.propertyGridUtils.guessValue(asset.mediaType), - }); - } - - return fields; - } - - buildAdditionalPropertiesGroups(asset: UiAssetMapped): PropertyGridGroup[] { - const additionalProperties: PropertyGridField[] = []; - if (!this.activeFeatureSet.hasMdsFields()) { - additionalProperties.push(...this.buildMdsProperties(asset)); - } - - const customProperties: PropertyGridField[] = [ - asset.customJsonProperties, - asset.customJsonLdProperties, - ] - .flat() - .map((prop) => { - return { - icon: 'category ', - label: prop.key, - labelTitle: prop.key, - ...this.propertyGridUtils.guessValue(prop.value), - }; - }); - - const privateCustomProperties: PropertyGridField[] = [ - asset.privateCustomJsonProperties, - asset.privateCustomJsonLdProperties, - ] - .flat() - .map((prop) => { - return { - icon: 'category ', - label: prop.key, - labelTitle: prop.key, - ...this.propertyGridUtils.guessValue(prop.value), - }; - }); - - return [ - { - groupLabel: this.translateService.instant( - 'general.additional_properties', - ), - properties: additionalProperties, - }, - { - groupLabel: 'Custom Properties', - properties: customProperties, - }, - { - groupLabel: 'Private Properties', - properties: privateCustomProperties, - }, - ]; - } - - buildMdsProperties(asset: UiAssetMapped): PropertyGridField[] { - const fields: PropertyGridField[] = []; - if (asset.transportMode) { - fields.push({ - icon: 'commute', - label: this.translateService.instant('general.transport_mode'), - ...this.propertyGridUtils.guessValue(asset.transportMode?.label), - }); - } - if (asset.dataCategory) { - fields.push({ - icon: 'commute', - label: this.translateService.instant('general.data_category'), - ...this.propertyGridUtils.guessValue(asset.dataCategory?.label), - }); - } - if (asset.dataSubcategory) { - fields.push({ - icon: 'commute', - label: this.translateService.instant('general.data_subcategory'), - ...this.propertyGridUtils.guessValue(asset.dataSubcategory?.label), - }); - } - if (asset.dataModel) { - fields.push({ - icon: 'category', - label: this.translateService.instant('general.data_model'), - ...this.propertyGridUtils.guessValue(asset.dataModel), - }); - } - if (asset.geoReferenceMethod) { - fields.push({ - icon: 'commute', - label: this.translateService.instant('general.geo_reference_method'), - ...this.propertyGridUtils.guessValue(asset.geoReferenceMethod), - }); - } - if (asset.geoLocation) { - fields.push({ - icon: 'location_on', - label: this.translateService.instant('general.geo_location'), - ...this.propertyGridUtils.guessValue(asset.geoLocation), - }); - } - if (asset.nutsLocations?.length) { - fields.push(this.buildNutsLocationsField(asset.nutsLocations)); - } - if (asset.sovereignLegalName) { - fields.push({ - icon: 'account_balance', - label: this.translateService.instant('general.sovereign'), - ...this.propertyGridUtils.guessValue(asset.sovereignLegalName), - }); - } - if (asset.dataSampleUrls?.length) { - fields.push( - this.buildDataSampleUrlsField(asset.dataSampleUrls, asset.title), - ); - } - if (asset.referenceFileUrls?.length) { - fields.push( - this.buildReferenceFileUrlsField( - asset.referenceFileUrls, - asset.referenceFilesDescription, - asset.title, - ), - ); - } - if (asset.conditionsForUse) { - fields.push( - this.buildConditionsForUseField(asset.conditionsForUse, asset.title), - ); - } - if (asset.dataUpdateFrequency) { - fields.push({ - icon: 'timelapse', - label: this.translateService.instant('general.frequency'), - ...this.propertyGridUtils.guessValue(asset.dataUpdateFrequency), - }); - } - if (asset.temporalCoverageFrom || asset.temporalCoverageToInclusive) { - fields.push({ - icon: 'today', - label: this.translateService.instant('general.coverage'), - ...this.propertyGridUtils.guessValue( - this.buildTemporalCoverageString( - asset.temporalCoverageFrom, - asset.temporalCoverageToInclusive, - ), - ), - }); - } - return fields; - } - - buildContractAgreementGroup(contractAgreement: ContractAgreementCardMapped) { - const properties: PropertyGridField[] = [ - { - icon: 'category', - label: this.translateService.instant('general.signed'), - ...this.propertyGridUtils.guessValue( - this.propertyGridUtils.formatDateWithTime( - contractAgreement.contractSigningDate, - ), - ), - }, - { - icon: 'policy', - label: this.translateService.instant('general.direction'), - ...this.propertyGridUtils.guessValue( - contractAgreement.direction === 'CONSUMING' - ? this.translateService.instant('general.consuming') - : this.translateService.instant('general.providing'), - ), - }, - { - icon: 'category', - label: this.translateService.instant('general.contract') + ' ID', - ...this.propertyGridUtils.guessValue( - contractAgreement.contractAgreementId, - ), - }, - { - icon: 'link', - label: `${this.translateService.instant('general.oth_connector')} ${ - this.participantIdLocalization.participantId - }`, - ...this.propertyGridUtils.guessValue(contractAgreement.counterPartyId), - }, - { - icon: 'link', - label: this.translateService.instant( - 'transfer_history_page.counter_endpoint', - ), - ...this.propertyGridUtils.guessValue( - contractAgreement.counterPartyAddress, - ), - }, - ]; - - if (contractAgreement.isConsumingLimitsEnforced) { - properties.push({ - icon: contractAgreement.isTerminated ? 'sync_disabled' : 'sync', - label: 'Status', - additionalClasses: contractAgreement.isTerminated ? 'text-warn' : '', - }); - } - - return { - groupLabel: this.translateService.instant('general.contract'), - properties, - }; - } - - buildContractPolicyGroup( - contractPolicy: UiPolicy, - subtitle: string, - ): PropertyGridGroup { - return { - groupLabel: this.translateService.instant('general.contract_policy'), - properties: this.policyPropertyFieldBuilder.buildPolicyPropertyFields( - contractPolicy, - this.translateService.instant('general.contract_policy') + ' JSON-LD', - subtitle, - ), - }; - } - - buildConnectorEndpointField(endpoint: string): PropertyGridField { - return { - icon: 'link', - label: this.translateService.instant('general.endpoint'), - ...this.propertyGridUtils.guessValue(endpoint), - }; - } - - buildNutsLocationsField(locations: string[]): PropertyGridField { - return { - icon: 'location_on', - label: this.translateService.instant('general.nuts'), - text: locations.join(', '), - }; - } - - buildDataSampleUrlsField( - dataSampleUrls: string[], - title: string, - ): PropertyGridField { - return { - icon: 'attachment', - label: this.translateService.instant('general.data'), - text: this.translateService.instant('general.show_data'), - onclick: () => - this.urlListDialogService.showUrlListDialog({ - title: this.translateService.instant('general.data'), - subtitle: title, - icon: 'attachment', - urls: dataSampleUrls, - }), - }; - } - - buildConditionsForUseField( - conditionsForUse: string, - title: string, - ): PropertyGridField { - return { - icon: 'description', - label: this.translateService.instant('general.conditions'), - text: 'Show Conditions For Use', // TODO - onclick: () => - this.conditionsForUseDialogService.showConditionsForUseDialog({ - title: 'Conditions For Use', - subtitle: title, - icon: 'description', - description: conditionsForUse, - }), - }; - } - - buildReferenceFileUrlsField( - referenceFileUrls: string[], - description: string | undefined, - title: string, - ): PropertyGridField { - return { - icon: 'receipt', - label: this.translateService.instant('general.files'), - text: this.translateService.instant('general.show_files'), - onclick: () => - this.urlListDialogService.showUrlListDialog({ - title: this.translateService.instant('general.show_files'), - subtitle: title, - icon: 'receipt', - urls: referenceFileUrls, - description: description, - }), - }; - } - - buildTemporalCoverageString( - start: Date | undefined, - end: Date | undefined, - ): string { - if (!end) { - return `Start: ${this.propertyGridUtils.formatDate(start)}`; - } - - if (!start) { - return `End: ${this.propertyGridUtils.formatDate(end)}`; - } - - return `${this.propertyGridUtils.formatDate( - start, - )} - ${this.propertyGridUtils.formatDate(end)}`; - } - - buildOnRequestContactInformation( - asset: UiAssetMapped, - isMailHidden = false, - ): PropertyGridGroup[] { - if (asset.dataSourceAvailability === 'LIVE') { - return []; - } - return [ - { - groupLabel: 'Contact Information', - properties: [ - { - icon: 'mail', - label: 'Contact E-Mail Address', - copyButton: true, - hideFieldValue: isMailHidden, - ...this.propertyGridUtils.guessValue(asset.onRequestContactEmail), - }, - { - icon: 'subject', - label: 'Preferred E-Mail Subject', - copyButton: true, - ...this.propertyGridUtils.guessValue( - asset.onRequestContactEmailSubject, - ), - }, - ], - }, - ]; - } -} diff --git a/src/app/shared/business/asset-detail-dialog/policy-property-field-builder.ts b/src/app/shared/business/asset-detail-dialog/policy-property-field-builder.ts deleted file mode 100644 index c5fa5478c..000000000 --- a/src/app/shared/business/asset-detail-dialog/policy-property-field-builder.ts +++ /dev/null @@ -1,44 +0,0 @@ -import {Injectable} from '@angular/core'; -import {TranslateService} from '@ngx-translate/core'; -import {UiPolicy} from '@sovity.de/edc-client'; -import {JsonDialogService} from '../../common/json-dialog/json-dialog.service'; -import {PropertyGridField} from '../../common/property-grid/property-grid-field'; -import {PolicyMapper} from '../policy-editor/model/policy-mapper'; - -@Injectable() -export class PolicyPropertyFieldBuilder { - constructor( - private jsonDialogService: JsonDialogService, - private policyMapper: PolicyMapper, - private translateService: TranslateService, - ) {} - - buildPolicyPropertyFields( - policy: UiPolicy, - policyDetailDialogTitle: string, - policyDetailDialogSubtitle: string, - ): PropertyGridField[] { - return [ - { - icon: 'policy', - label: this.translateService.instant('general.contract_policy'), - policy: this.policyMapper.buildPolicy(policy.expression!), - policyErrors: policy.errors || [], - additionalContainerClasses: 'col-span-2', - }, - { - icon: 'policy', - label: - this.translateService.instant('general.contract_policy') + ' JSON-LD', - text: this.translateService.instant('component_library.json_ld'), - onclick: () => - this.jsonDialogService.showJsonDetailDialog({ - title: policyDetailDialogTitle, - subtitle: policyDetailDialogSubtitle, - icon: 'policy', - objectForJson: JSON.parse(policy.policyJsonLd), - }), - }, - ]; - } -} diff --git a/src/app/shared/business/conditions-for-use-dialog/conditions-for-use-dialog.component.html b/src/app/shared/business/conditions-for-use-dialog/conditions-for-use-dialog.component.html deleted file mode 100644 index 850487d79..000000000 --- a/src/app/shared/business/conditions-for-use-dialog/conditions-for-use-dialog.component.html +++ /dev/null @@ -1,28 +0,0 @@ -

-
- - {{ data.icon }} - -
-
- {{ data.title }} -
-
- {{ data.subtitle }} -
-
-
-
- -
-
- -
-
- -
- -
diff --git a/src/app/shared/business/conditions-for-use-dialog/conditions-for-use-dialog.component.ts b/src/app/shared/business/conditions-for-use-dialog/conditions-for-use-dialog.component.ts deleted file mode 100644 index 457f1f618..000000000 --- a/src/app/shared/business/conditions-for-use-dialog/conditions-for-use-dialog.component.ts +++ /dev/null @@ -1,14 +0,0 @@ -import {Component, Inject} from '@angular/core'; -import {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog'; -import {ConditionsForUseDialogData} from './conditions-for-use-dialog.data'; - -@Component({ - selector: 'conditions-for-use-dialog', - templateUrl: './conditions-for-use-dialog.component.html', -}) -export class ConditionsForUseDialogComponent { - constructor( - public dialogRef: MatDialogRef, - @Inject(MAT_DIALOG_DATA) public data: ConditionsForUseDialogData, - ) {} -} diff --git a/src/app/shared/business/conditions-for-use-dialog/conditions-for-use-dialog.data.ts b/src/app/shared/business/conditions-for-use-dialog/conditions-for-use-dialog.data.ts deleted file mode 100644 index 1d10bc026..000000000 --- a/src/app/shared/business/conditions-for-use-dialog/conditions-for-use-dialog.data.ts +++ /dev/null @@ -1,6 +0,0 @@ -export interface ConditionsForUseDialogData { - title: string; - subtitle: string; - icon: string; - description?: string; -} diff --git a/src/app/shared/business/conditions-for-use-dialog/conditions-for-use-dialog.service.ts b/src/app/shared/business/conditions-for-use-dialog/conditions-for-use-dialog.service.ts deleted file mode 100644 index 04cc455ae..000000000 --- a/src/app/shared/business/conditions-for-use-dialog/conditions-for-use-dialog.service.ts +++ /dev/null @@ -1,28 +0,0 @@ -import {Injectable} from '@angular/core'; -import {MatDialog} from '@angular/material/dialog'; -import {NEVER, Observable} from 'rxjs'; -import {showDialogUntil} from '../../../core/utils/mat-dialog-utils'; -import {ConditionsForUseDialogComponent} from './conditions-for-use-dialog.component'; -import {ConditionsForUseDialogData} from './conditions-for-use-dialog.data'; - -@Injectable() -export class ConditionsForUseDialogService { - constructor(private dialog: MatDialog) {} - - /** - * Shows JSON Detail Dialog until until$ emits / completes - * @param data json detail dialog data - * @param until$ observable that controls the lifetime of the dialog - */ - showConditionsForUseDialog( - data: ConditionsForUseDialogData, - until$: Observable = NEVER, - ): Observable { - return showDialogUntil( - this.dialog, - ConditionsForUseDialogComponent, - {data, autoFocus: false}, - until$, - ); - } -} diff --git a/src/app/shared/business/contract-offer-icon/contract-offer-icon.component.ts b/src/app/shared/business/contract-offer-icon/contract-offer-icon.component.ts deleted file mode 100644 index 02e9fb503..000000000 --- a/src/app/shared/business/contract-offer-icon/contract-offer-icon.component.ts +++ /dev/null @@ -1,51 +0,0 @@ -import {Component, Input} from '@angular/core'; -import {ContractNegotiationService} from '../../../core/services/contract-negotiation.service'; -import {DataOffer} from '../../../core/services/models/data-offer'; - -@Component({ - selector: 'contract-offer-icon', - template: ` - -
- - done - -
- - - sim_card - - - contact_page - `, -}) -export class ContractOfferIconComponent { - @Input() - dataOffer!: DataOffer; - - constructor(public contractNegotiationService: ContractNegotiationService) {} - - isNegotiated(): boolean { - return this.dataOffer?.contractOffers?.some((it) => - this.contractNegotiationService.isNegotiated(it), - ); - } - - isOnRequestAsset(): boolean { - return this.dataOffer.asset.dataSourceAvailability === 'ON_REQUEST'; - } -} diff --git a/src/app/shared/business/contract-offer-mini-list/contract-offer-mini-list.component.html b/src/app/shared/business/contract-offer-mini-list/contract-offer-mini-list.component.html deleted file mode 100644 index 33722f0ac..000000000 --- a/src/app/shared/business/contract-offer-mini-list/contract-offer-mini-list.component.html +++ /dev/null @@ -1,69 +0,0 @@ - -
- Contract Offers -
- No contract offers available. -
- - -
- - - {{ 'general.contract_offer' | translate }} - {{ data.contractOffers.length >= 2 ? i + 1 : '' }} - - - - - -
- - - - - -
- - -
-
diff --git a/src/app/shared/business/contract-offer-mini-list/contract-offer-mini-list.component.ts b/src/app/shared/business/contract-offer-mini-list/contract-offer-mini-list.component.ts deleted file mode 100644 index b0b4ea2a8..000000000 --- a/src/app/shared/business/contract-offer-mini-list/contract-offer-mini-list.component.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { - Component, - EventEmitter, - HostBinding, - Input, - Output, -} from '@angular/core'; -import {DataOffer} from 'src/app/core/services/models/data-offer'; -import {ContractNegotiationService} from '../../../core/services/contract-negotiation.service'; -import {ContractOffer} from '../../../core/services/models/contract-offer'; -import {PropertyGridField} from '../../common/property-grid/property-grid-field'; - -@Component({ - selector: 'contract-offer-mini-list', - templateUrl: 'contract-offer-mini-list.component.html', -}) -export class ContractOfferMiniListComponent { - @Input() - data!: DataOffer; - - @HostBinding('class.flex') - @HostBinding('class.flex-col') - cls = true; - - @Output() - negotiateClick = new EventEmitter(); - - constructor(public contractNegotiationService: ContractNegotiationService) {} - - contractOfferIdGroup(id: string): PropertyGridField[] { - return [ - { - icon: 'category', - label: 'Contract Offer Id', - text: this.data.contractOffers.find((it) => it.contractOfferId == id) - ?.contractOfferId, - additionalClasses: 'min-h-fit h-fit break-all', - }, - ]; - } -} diff --git a/src/app/shared/business/data-offer-cards/data-offer-cards.component.html b/src/app/shared/business/data-offer-cards/data-offer-cards.component.html deleted file mode 100644 index d0d49bd2d..000000000 --- a/src/app/shared/business/data-offer-cards/data-offer-cards.component.html +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - {{ asset.title }} - - - {{ asset.creatorOrganizationName }} - - - - - - - - - - - - - diff --git a/src/app/shared/business/data-offer-cards/data-offer-cards.component.ts b/src/app/shared/business/data-offer-cards/data-offer-cards.component.ts deleted file mode 100644 index 2c87c6c87..000000000 --- a/src/app/shared/business/data-offer-cards/data-offer-cards.component.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { - Component, - EventEmitter, - HostBinding, - Input, - Output, -} from '@angular/core'; -import {ContractNegotiationService} from '../../../core/services/contract-negotiation.service'; -import {DataOffer} from '../../../core/services/models/data-offer'; - -@Component({ - selector: 'data-offer-cards', - templateUrl: './data-offer-cards.component.html', -}) -export class DataOfferCardsComponent { - @HostBinding('class.flex') - @HostBinding('class.flex-wrap') - @HostBinding('class.gap-[10px]') - cls = true; - - @Input() - dataOffers: DataOffer[] = []; - - @Output() - dataOfferClick = new EventEmitter(); - - constructor(public contractNegotiationService: ContractNegotiationService) {} - - isBusy(dataOffer: DataOffer): boolean { - return dataOffer.contractOffers.some((it) => - this.contractNegotiationService.isBusy(it), - ); - } -} diff --git a/src/app/shared/business/edit-asset-form/edit-asset-form-required-providers.ts b/src/app/shared/business/edit-asset-form/edit-asset-form-required-providers.ts deleted file mode 100644 index d75efc586..000000000 --- a/src/app/shared/business/edit-asset-form/edit-asset-form-required-providers.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {AssetRequestBuilder} from 'src/app/core/services/asset-request-builder'; -import {policyFormRequiredViewProviders} from '../policy-editor/editor/policy-form-required-providers'; -import {AssetAdvancedFormBuilder} from './form/asset-advanced-form-builder'; -import {AssetDatasourceFormBuilder} from './form/asset-datasource-form-builder'; -import {AssetGeneralFormBuilder} from './form/asset-general-form-builder'; -import {EditAssetForm} from './form/edit-asset-form'; -import {EditAssetFormInitializer} from './form/edit-asset-form-initializer'; - -export const editAssetFormRequiredViewProviders = [ - EditAssetFormInitializer, - AssetRequestBuilder, - EditAssetForm, - AssetGeneralFormBuilder, - AssetDatasourceFormBuilder, - AssetAdvancedFormBuilder, - ...policyFormRequiredViewProviders, -]; diff --git a/src/app/shared/business/edit-asset-form/edit-asset-form.component.html b/src/app/shared/business/edit-asset-form/edit-asset-form.component.html deleted file mode 100644 index c381b58a7..000000000 --- a/src/app/shared/business/edit-asset-form/edit-asset-form.component.html +++ /dev/null @@ -1,996 +0,0 @@ -
-
- - -
- - - - {{ 'create_data_offer_page.unchanged' | translate }} - - - {{ 'create_data_offer_page.readily_available' | translate }} - - - {{ 'create_data_offer_page.on_request' | translate }} - - -
- - - - - - - - - - - - -
- - -
- - - - - - - -
- - - - {{ method }} - - - - {{ - 'create_data_offer_page.custom_http_method_hint' | translate - }} - - - -
- -
-
- - -
- {{ - 'create_data_offer_page.custom_http_subpath_hint' | translate - }} - - - -
- -
-
- -
- -
-
- - - {{ 'general.name' | translate }} - - {{ header.errors }} - {{ validationMessages.invalidQueryParam }} - - - - - {{ 'general.value' | translate }} - - {{ validationMessages.invalidQueryParam }} - - - - -
- - {{ - 'create_data_offer_page.query_param_enabled_hint' | translate - }} - -
- - - - -
-
- -
- - - {{ 'asset_list_page.info_body' | translate }} - - -
- -
-
- -
- - -
- -
- - - {{ 'general.type' | translate }} - - - {{ - 'create_data_offer_page.header_with_vault_secret' - | translate - }} - - {{ - 'create_data_offer_page.header_with_value' | translate - }} - - -
- - - {{ - 'create_data_offer_page.auth_header_name' | translate - }} - - - - - {{ - 'create_data_offer_page.auth_header_value' | translate - }} - - - - - {{ - 'create_data_offer_page.vault_secret_name' | translate - }} - - -
- -
- -
-
- -
- -
-
- - - {{ - 'create_data_offer_page.header_name' | translate - }} - - - - - {{ - 'create_data_offer_page.header_value' | translate - }} - - - - -
- -
- -
-
-
-
-
- - - - - - - - - - -
- {{ 'create_data_offer_page.description_uses' | translate }} - Markdown syntax -
-
- - -
- -
- - - {{ - 'create_data_offer_page.show_advanced_fields' | translate - }} - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
-
- - URL - - - -
-
- -
-
- -
- - -
-
- - URL - - - -
-
- -
-
- - - -
- {{ - 'create_data_offer_page.reference_files_description' | translate - }} - Markdown syntax -
-
-
-
- - - -
- - - - - - - {{ 'create_data_offer_page.temporal_coverage_hint' | translate }} - - - - {{ validationMessages.invalidDateRangeMessage }} - - -
- - - - - - - - - - - -
- - -
-
- - {{ - 'create_data_offer_page.nuts_location' | translate - }} - - - -
-
- -
-
-
- - - - - - - - - - - - - -
- {{ - 'create_data_offer_page.conditions_for_use_description_hint' - | translate - }} - Markdown syntax -
-
-
- - - -
- - - - {{ 'create_data_offer_page.publish_unrestricted' | translate }} - - - - {{ 'create_data_offer_page.publish_restricted' | translate }} - - - - {{ 'create_data_offer_page.publish_asset_only' | translate }} - - - -
- - -
- - -
-
- - -
-
diff --git a/src/app/shared/business/edit-asset-form/edit-asset-form.component.ts b/src/app/shared/business/edit-asset-form/edit-asset-form.component.ts deleted file mode 100644 index d8aa7c3ac..000000000 --- a/src/app/shared/business/edit-asset-form/edit-asset-form.component.ts +++ /dev/null @@ -1,28 +0,0 @@ -import {Component, EventEmitter, Input, Output} from '@angular/core'; -import {ActiveFeatureSet} from 'src/app/core/config/active-feature-set'; -import {ValidationMessages} from 'src/app/core/validators/validation-messages'; -import {ExpressionFormHandler} from '../policy-editor/editor/expression-form-handler'; -import {EditAssetForm} from './form/edit-asset-form'; -import {DATA_SOURCE_HTTP_METHODS} from './form/http-methods'; - -@Component({ - selector: 'edit-asset-form', - templateUrl: './edit-asset-form.component.html', -}) -export class EditAssetFormComponent { - @Input() isLoading!: boolean; - @Output() submitClicked = new EventEmitter(); - - methods = DATA_SOURCE_HTTP_METHODS; - - constructor( - public form: EditAssetForm, - public validationMessages: ValidationMessages, - public expressionFormHandler: ExpressionFormHandler, - public activeFeatureSet: ActiveFeatureSet, - ) {} - - multipleDataSourceOptionsAvailable(): boolean { - return this.form.mode === 'EDIT' || this.activeFeatureSet.hasMdsFields(); - } -} diff --git a/src/app/shared/business/edit-asset-form/form/asset-advanced-form-builder.ts b/src/app/shared/business/edit-asset-form/form/asset-advanced-form-builder.ts deleted file mode 100644 index 9fffeccb7..000000000 --- a/src/app/shared/business/edit-asset-form/form/asset-advanced-form-builder.ts +++ /dev/null @@ -1,55 +0,0 @@ -import {Injectable} from '@angular/core'; -import {FormBuilder, FormControl, FormGroup, Validators} from '@angular/forms'; -import {urlValidator} from 'src/app/core/validators/url-validator'; -import {validOptionalDateRange} from 'src/app/core/validators/valid-optional-date-range'; -import { - AssetAdvancedFormModel, - AssetAdvancedFormValue, -} from './model/asset-advanced-form-model'; - -@Injectable() -export class AssetAdvancedFormBuilder { - constructor(private formBuilder: FormBuilder) {} - - buildFormGroup( - initial: AssetAdvancedFormValue, - ): FormGroup { - return this.formBuilder.nonNullable.group({ - dataModel: initial?.dataModel!, - transportMode: initial?.transportMode || null, - geoReferenceMethod: initial?.geoReferenceMethod!, - sovereignLegalName: initial?.sovereignLegalName!, - geoLocation: initial?.geoLocation!, - nutsLocations: this.formBuilder.nonNullable.array( - initial?.nutsLocations?.map((x) => this.buildRequiredString(x)) ?? [], - ), - dataSampleUrls: this.formBuilder.array( - initial?.dataSampleUrls?.map((x) => this.buildRequiredUrl(x)) ?? [], - ), - referenceFileUrls: this.formBuilder.nonNullable.array( - initial?.referenceFileUrls?.map((x) => this.buildRequiredUrl(x)) ?? [], - ), - referenceFilesDescription: initial?.referenceFilesDescription!, - conditionsForUse: initial?.conditionsForUse!, - dataUpdateFrequency: initial?.dataUpdateFrequency!, - temporalCoverage: this.formBuilder.group( - { - from: initial?.temporalCoverage?.from || null, - toInclusive: initial?.temporalCoverage?.toInclusive || null, - }, - {validators: validOptionalDateRange}, - ), - }); - } - - buildRequiredString(initial: string): FormControl { - return this.formBuilder.nonNullable.control(initial, Validators.required); - } - - buildRequiredUrl(initial: string): FormControl { - return this.formBuilder.nonNullable.control(initial, [ - Validators.required, - urlValidator, - ]); - } -} diff --git a/src/app/shared/business/edit-asset-form/form/asset-datasource-form-builder.ts b/src/app/shared/business/edit-asset-form/form/asset-datasource-form-builder.ts deleted file mode 100644 index e3d871fc7..000000000 --- a/src/app/shared/business/edit-asset-form/form/asset-datasource-form-builder.ts +++ /dev/null @@ -1,107 +0,0 @@ -import {Injectable} from '@angular/core'; -import {FormBuilder, FormGroup, Validators} from '@angular/forms'; -import {switchDisabledControls} from 'src/app/core/utils/form-group-utils'; -import {jsonValidator} from 'src/app/core/validators/json-validator'; -import {urlValidator} from 'src/app/core/validators/url-validator'; -import {validQueryParam} from 'src/app/core/validators/valid-query-param'; -import {assetDatasourceFormEnabledCtrls} from './model/asset-datasource-form-enabled-ctrls'; -import { - AssetDatasourceFormModel, - AssetDatasourceFormValue, -} from './model/asset-datasource-form-model'; -import { - HttpDatasourceHeaderFormModel, - HttpDatasourceHeaderFormValue, -} from './model/http-datasource-header-form-model'; -import { - HttpDatasourceQueryParamFormModel, - HttpDatasourceQueryParamFormValue, -} from './model/http-datasource-query-param-form-model'; - -@Injectable() -export class AssetDatasourceFormBuilder { - constructor(private formBuilder: FormBuilder) {} - - buildFormGroup( - initial: AssetDatasourceFormValue, - ): FormGroup { - const datasource: FormGroup = - this.formBuilder.nonNullable.group({ - dataSourceAvailability: initial?.dataSourceAvailability!, - - dataAddressType: initial?.dataAddressType!, - dataDestination: [ - initial?.dataDestination!, - [Validators.required, jsonValidator], - ], - - // On-Request - contactEmail: [ - initial?.contactEmail!, - [Validators.required, Validators.email], - ], - contactPreferredEmailSubject: [ - initial?.contactPreferredEmailSubject!, - Validators.required, - ], - - // Http Datasource Fields - httpUrl: [initial?.httpUrl!, [Validators.required, urlValidator]], - httpMethod: [initial?.httpMethod!, Validators.required], - - httpAuthHeaderType: [initial?.httpAuthHeaderType!], - httpAuthHeaderName: [initial?.httpAuthHeaderName!, Validators.required], - httpAuthHeaderValue: [ - initial?.httpAuthHeaderValue!, - Validators.required, - ], - httpAuthHeaderSecretName: [ - initial?.httpAuthHeaderSecretName!, - Validators.required, - ], - httpQueryParams: this.formBuilder.array( - initial?.httpQueryParams?.map( - (param: HttpDatasourceQueryParamFormValue) => - this.buildQueryParamFormGroup(param), - ) ?? [], - ), - - httpDefaultPath: [initial?.httpDefaultPath!], - httpProxyMethod: [initial?.httpProxyMethod!], - httpProxyPath: [initial?.httpProxyPath!], - httpProxyQueryParams: [initial?.httpProxyQueryParams!], - httpProxyBody: [initial?.httpProxyBody!], - - httpHeaders: this.formBuilder.array( - initial?.httpHeaders?.map((header: HttpDatasourceHeaderFormValue) => - this.buildHeaderFormGroup(header), - ) ?? [], - ), - }); - - switchDisabledControls( - datasource, - assetDatasourceFormEnabledCtrls, - ); - - return datasource; - } - - buildHeaderFormGroup( - initial: HttpDatasourceHeaderFormValue, - ): FormGroup { - return this.formBuilder.nonNullable.group({ - headerName: [initial.headerName!, Validators.required], - headerValue: [initial.headerValue!, Validators.required], - }); - } - - buildQueryParamFormGroup( - initial: HttpDatasourceQueryParamFormValue, - ): FormGroup { - return this.formBuilder.nonNullable.group({ - paramName: [initial.paramName!, [Validators.required, validQueryParam]], - paramValue: [initial.paramValue!, [validQueryParam]], - }); - } -} diff --git a/src/app/shared/business/edit-asset-form/form/asset-general-form-builder.ts b/src/app/shared/business/edit-asset-form/form/asset-general-form-builder.ts deleted file mode 100644 index 3eaf5c591..000000000 --- a/src/app/shared/business/edit-asset-form/form/asset-general-form-builder.ts +++ /dev/null @@ -1,101 +0,0 @@ -import {Injectable} from '@angular/core'; -import {FormBuilder, FormControl, FormGroup, Validators} from '@angular/forms'; -import {combineLatest, distinctUntilChanged, pairwise} from 'rxjs'; -import {map} from 'rxjs/operators'; -import {ActiveFeatureSet} from 'src/app/core/config/active-feature-set'; -import {value$} from 'src/app/core/utils/form-group-utils'; -import {noWhitespacesOrColonsValidator} from 'src/app/core/validators/no-whitespaces-or-colons-validator'; -import {EditAssetFormValidators} from './edit-asset-form-validators'; -import {AssetEditDialogMode} from './model/asset-edit-dialog-mode'; -import { - AssetGeneralFormModel, - AssetGeneralFormValue, -} from './model/asset-general-form-model'; - -@Injectable() -export class AssetGeneralFormBuilder { - constructor( - private formBuilder: FormBuilder, - private activeFeatureSet: ActiveFeatureSet, - private editAssetFormValidators: EditAssetFormValidators, - ) {} - - buildFormGroup( - initial: AssetGeneralFormValue, - mode: AssetEditDialogMode, - ): FormGroup { - const general: FormGroup = - this.formBuilder.nonNullable.group({ - id: [ - initial.id!, - [Validators.required, noWhitespacesOrColonsValidator], - this.editAssetFormValidators.isValidId(), - ], - name: [initial.name!, Validators.required], - description: [initial.description!], - keywords: [initial.keywords!], - showAdvancedFields: [initial.showAdvancedFields || false], - version: [initial.version!], - contentType: [initial.contentType!], - language: [initial.language || null], - publisher: [initial.publisher!], - standardLicense: [initial.standardLicense!], - endpointDocumentation: [initial.endpointDocumentation!], - }); - - if (this.activeFeatureSet.hasMdsFields()) { - general.addControl( - 'dataCategory', - this.formBuilder.control( - initial.dataCategory || null, - Validators.required, - ), - ); - general.addControl( - 'dataSubcategory', - this.formBuilder.control(initial.dataSubcategory || null), - ); - } - - if (mode === 'CREATE') { - this.initIdGeneration(general.controls.id, general.controls.name); - } else { - general.controls.id.disable(); - } - - return general; - } - - private initIdGeneration( - idCtrl: FormControl, - nameCtrl: FormControl, - ) { - combineLatest([value$(nameCtrl).pipe(distinctUntilChanged())]) - .pipe( - map(([title]) => this.generateId(title)), - pairwise(), - ) - .subscribe(([previousId, currentId]) => { - if (!idCtrl.value || idCtrl.value === previousId) { - idCtrl.setValue(currentId); - idCtrl.markAsTouched(); - idCtrl.updateValueAndValidity(); - } - }); - } - - private generateId(name: string | null) { - if (!name) { - return ''; - } - return this.cleanIdComponent(name); - } - - private cleanIdComponent(s: string | null) { - return (s ?? '') - .trim() - .replace(':', '-') - .replaceAll(' ', '-') - .toLowerCase(); - } -} diff --git a/src/app/shared/business/edit-asset-form/form/edit-asset-form-initializer.ts b/src/app/shared/business/edit-asset-form/form/edit-asset-form-initializer.ts deleted file mode 100644 index 1aafcfa42..000000000 --- a/src/app/shared/business/edit-asset-form/form/edit-asset-form-initializer.ts +++ /dev/null @@ -1,133 +0,0 @@ -import {Injectable} from '@angular/core'; -import {ActiveFeatureSet} from 'src/app/core/config/active-feature-set'; -import {UiAssetMapped} from 'src/app/core/services/models/ui-asset-mapped'; -import {LanguageSelectItemService} from '../../../form-elements/language-select/language-select-item.service'; -import {AssetDatasourceFormValue} from './model/asset-datasource-form-model'; -import {EditAssetFormValue} from './model/edit-asset-form-model'; - -/** - * Handles AngularForms for Edit Asset Form - */ -@Injectable() -export class EditAssetFormInitializer { - constructor( - private languageSelectItemService: LanguageSelectItemService, - private activeFeatureSet: ActiveFeatureSet, - ) {} - - forCreate(): EditAssetFormValue { - return { - mode: 'CREATE', - publishMode: 'PUBLISH_UNRESTRICTED', - general: { - id: '', - name: '', - description: '', - keywords: [], - dataCategory: null, - dataSubcategory: null, - version: '', - contentType: '', - language: this.languageSelectItemService.english(), - publisher: '', - standardLicense: '', - endpointDocumentation: '', - showAdvancedFields: false, - }, - advanced: { - dataModel: '', - transportMode: null, - geoReferenceMethod: '', - conditionsForUse: '', - dataUpdateFrequency: '', - sovereignLegalName: '', - geoLocation: '', - nutsLocations: [], - dataSampleUrls: [], - referenceFileUrls: [], - referenceFilesDescription: '', - temporalCoverage: {from: null, toInclusive: null}, - }, - datasource: this.emptyHttpDatasource(), - }; - } - - forEdit(asset: UiAssetMapped): EditAssetFormValue { - return { - mode: 'EDIT', - publishMode: 'DO_NOT_PUBLISH', - general: { - id: asset.assetId, - name: asset.title, - description: asset.description, - keywords: asset.keywords, - dataCategory: asset.dataCategory, - dataSubcategory: asset.dataSubcategory, - version: asset.version, - contentType: asset.mediaType, - language: asset.language, - publisher: asset.publisherHomepage, - standardLicense: asset.licenseUrl, - endpointDocumentation: asset.landingPageUrl, - showAdvancedFields: true, - }, - advanced: { - dataModel: asset.dataModel, - transportMode: asset.transportMode, - geoReferenceMethod: asset.geoReferenceMethod, - sovereignLegalName: asset.sovereignLegalName, - geoLocation: asset.geoLocation, - nutsLocations: asset.nutsLocations, - dataSampleUrls: asset.dataSampleUrls, - referenceFileUrls: asset.referenceFileUrls, - referenceFilesDescription: asset.referenceFilesDescription, - conditionsForUse: asset.conditionsForUse, - dataUpdateFrequency: asset.dataUpdateFrequency, - temporalCoverage: { - from: asset.temporalCoverageFrom, - toInclusive: asset.temporalCoverageToInclusive, - }, - }, - datasource: this.emptyEditDatasource(asset), - }; - } - - private emptyHttpDatasource(): AssetDatasourceFormValue { - return { - dataSourceAvailability: this.activeFeatureSet.hasMdsFields() - ? 'On-Request' - : 'Datasource', - contactEmail: '', - contactPreferredEmailSubject: '', - - dataAddressType: 'Http', - dataDestination: '', - - httpUrl: '', - httpMethod: 'GET', - httpAuthHeaderType: 'None', - httpAuthHeaderName: '', - httpAuthHeaderValue: '', - httpAuthHeaderSecretName: '', - httpQueryParams: [], - - httpDefaultPath: '', - httpProxyMethod: false, - httpProxyPath: false, - httpProxyQueryParams: false, - httpProxyBody: false, - - httpHeaders: [], - }; - } - - private emptyEditDatasource(asset: UiAssetMapped): AssetDatasourceFormValue { - return { - ...this.emptyHttpDatasource(), - dataSourceAvailability: - asset.dataSourceAvailability === 'LIVE' ? 'Unchanged' : 'On-Request', - contactEmail: asset.onRequestContactEmail ?? '', - contactPreferredEmailSubject: asset.onRequestContactEmailSubject ?? '', - }; - } -} diff --git a/src/app/shared/business/edit-asset-form/form/edit-asset-form-validators.ts b/src/app/shared/business/edit-asset-form/form/edit-asset-form-validators.ts deleted file mode 100644 index 68861daae..000000000 --- a/src/app/shared/business/edit-asset-form/form/edit-asset-form-validators.ts +++ /dev/null @@ -1,86 +0,0 @@ -import {Injectable} from '@angular/core'; -import { - AbstractControl, - AsyncValidatorFn, - ValidationErrors, -} from '@angular/forms'; -import {Observable, combineLatest, of} from 'rxjs'; -import {catchError, map} from 'rxjs/operators'; -import {IdAvailabilityResponse} from '@sovity.de/edc-client'; -import {EdcApiService} from 'src/app/core/services/api/edc-api.service'; -import {EditAssetFormValue} from './model/edit-asset-form-model'; - -/** - * Handles AngularForms for Edit Asset Form - */ -@Injectable({providedIn: 'root'}) -export class EditAssetFormValidators { - constructor(private edcApiService: EdcApiService) {} - - /** - * Use on asset control, reset asset control on publish mode changes, accesses parent form - */ - isValidId(): AsyncValidatorFn { - return (control: AbstractControl): Observable => { - const value = control?.parent?.parent?.value as EditAssetFormValue | null; - if (value?.mode !== 'CREATE') { - return of(null); - } - - const assetId = control.value! as string; - if (value.publishMode !== 'DO_NOT_PUBLISH') { - return combineLatest([ - this.assetIdExistsErrorMessage(assetId), - this.contractDefinitionIdErrorMessage(assetId), - this.policyIdExistsErrorMessage(assetId), - ]).pipe( - map((errorMessages) => this.buildValidationErrors(errorMessages)), - ); - } else { - return this.assetIdExistsErrorMessage(assetId).pipe( - map((result) => this.buildValidationErrors([result])), - ); - } - return of(null); - }; - } - - private assetIdExistsErrorMessage(id: string): Observable { - return this.edcApiService.isAssetIdAvailable(id).pipe( - catchError(() => of({id, available: false})), - map((it) => (it.available ? null : 'Asset already exists.')), - ); - } - - private contractDefinitionIdErrorMessage( - id: string, - ): Observable { - return this.edcApiService.isContractDefinitionIdAvailable(id).pipe( - catchError(() => of({id, available: false})), - map((it) => - it.available ? null : 'Contract Definition already exists.', - ), - ); - } - - private policyIdExistsErrorMessage(id: string): Observable { - return this.edcApiService.isPolicyIdAvailable(id).pipe( - catchError(() => of({id, available: false})), - map((it) => (it.available ? null : 'Policy already exists.')), - ); - } - - private buildValidationErrors( - errorMessages: (string | null)[], - ): ValidationErrors | null { - const errors = errorMessages.filter((it) => it); - if (!errors.length) { - return null; - } - - const message = - errors.length === 3 ? 'Data Offer already exists.' : errors.join(' '); - - return {exists: message}; - } -} diff --git a/src/app/shared/business/edit-asset-form/form/edit-asset-form.ts b/src/app/shared/business/edit-asset-form/form/edit-asset-form.ts deleted file mode 100644 index 8500040b8..000000000 --- a/src/app/shared/business/edit-asset-form/form/edit-asset-form.ts +++ /dev/null @@ -1,186 +0,0 @@ -import {Injectable} from '@angular/core'; -import {FormBuilder, FormGroup} from '@angular/forms'; -import {delay} from 'rxjs/operators'; -import {ActiveFeatureSet} from 'src/app/core/config/active-feature-set'; -import {switchDisabledControls} from 'src/app/core/utils/form-group-utils'; -import {DataCategorySelectItem} from '../../../form-elements/data-category-select/data-category-select-item'; -import {ExpressionFormControls} from '../../policy-editor/editor/expression-form-controls'; -import {AssetAdvancedFormBuilder} from './asset-advanced-form-builder'; -import {AssetDatasourceFormBuilder} from './asset-datasource-form-builder'; -import {AssetGeneralFormBuilder} from './asset-general-form-builder'; -import {AssetAdvancedFormModel} from './model/asset-advanced-form-model'; -import {AssetDatasourceFormModel} from './model/asset-datasource-form-model'; -import {AssetEditDialogMode} from './model/asset-edit-dialog-mode'; -import {AssetGeneralFormModel} from './model/asset-general-form-model'; -import {DataAddress} from './model/data-address'; -import {DataOfferPublishMode} from './model/data-offer-publish-mode'; -import { - EditAssetFormModel, - EditAssetFormValue, -} from './model/edit-asset-form-model'; - -/** - * Handles AngularForms for Edit Asset Form - */ -@Injectable() -export class EditAssetForm { - all!: FormGroup; - - general!: EditAssetFormModel['general']; - - datasource!: EditAssetFormModel['datasource']; - - advanced!: EditAssetFormModel['advanced']; - - get value(): EditAssetFormValue { - return this.all.value; - } - - get mode(): AssetEditDialogMode { - return this.all.controls.mode.value; - } - - get dataAddressType(): DataAddress | null { - return this.datasource!.controls.dataAddressType.value; - } - - get dataCategory(): DataCategorySelectItem | null { - return this.general.controls.dataCategory!.value; - } - - get proxyMethod(): boolean { - return this.datasource!.controls.httpProxyMethod.value; - } - - get proxyPath(): boolean { - return this.datasource!.controls.httpProxyPath.value; - } - - get proxyQueryParams(): boolean { - return this.datasource!.controls.httpProxyQueryParams.value; - } - - constructor( - private formBuilder: FormBuilder, - private assetGeneralFormBuilder: AssetGeneralFormBuilder, - private assetDatasourceFormBuilder: AssetDatasourceFormBuilder, - private assetAdvancedFormBuilder: AssetAdvancedFormBuilder, - private activeFeatureSet: ActiveFeatureSet, - private expressionFormControls: ExpressionFormControls, - ) {} - - reset(initial: EditAssetFormValue) { - this.all = this.buildFormGroup(initial); - this.general = this.all.controls.general; - this.datasource = this.all.controls.datasource; - this.advanced = this.all.controls.advanced; - } - - buildFormGroup(initial: EditAssetFormValue): FormGroup { - const general: FormGroup = - this.assetGeneralFormBuilder.buildFormGroup( - initial.general!, - initial.mode!, - ); - - const datasource: FormGroup = - this.assetDatasourceFormBuilder.buildFormGroup(initial.datasource!); - - const formGroup: FormGroup = - this.formBuilder.nonNullable.group({ - mode: [initial.mode as AssetEditDialogMode], - publishMode: [initial.publishMode as DataOfferPublishMode], - policyControls: this.expressionFormControls.formGroup, - general, - datasource, - }); - - formGroup.controls.publishMode.valueChanges - .pipe(delay(0)) - .subscribe(() => general.controls.id.updateValueAndValidity()); - - if (this.activeFeatureSet.hasMdsFields()) { - const advanced: FormGroup = - this.assetAdvancedFormBuilder.buildFormGroup(initial.advanced!); - formGroup.addControl('advanced', advanced); - } - - switchDisabledControls(formGroup, (value) => ({ - policyControls: value.publishMode === 'PUBLISH_RESTRICTED', - mode: true, - publishMode: true, - advanced: true, - general: true, - datasource: true, - })); - - return formGroup; - } - - onHttpHeadersAddClick(buttonClickedEvent: Event) { - buttonClickedEvent.preventDefault(); - this.datasource!.controls.httpHeaders.push( - this.assetDatasourceFormBuilder.buildHeaderFormGroup({ - headerName: '', - headerValue: '', - }), - ); - } - - onHttpHeadersRemoveClick(buttonClickedEvent: Event, index: number) { - buttonClickedEvent.preventDefault(); - this.datasource!.controls.httpHeaders.removeAt(index); - } - - onHttpQueryParamsAddClick(buttonClickedEvent: Event) { - buttonClickedEvent.preventDefault(); - this.datasource!.controls.httpQueryParams.push( - this.assetDatasourceFormBuilder.buildQueryParamFormGroup({ - paramName: '', - paramValue: '', - }), - ); - } - - // markAllAsTouched added as a workaround to get labels outside of mat-form-field to show invalid state correctly - onHttpQueryParamsRemoveClick(buttonClickedEvent: Event, index: number) { - buttonClickedEvent.preventDefault(); - this.datasource!.controls.httpQueryParams.removeAt(index); - } - - onNutsLocationsAddClick(buttonClickedEvent: Event) { - buttonClickedEvent.preventDefault(); - this.advanced!.controls.nutsLocations.push( - this.assetAdvancedFormBuilder.buildRequiredString(''), - ); - } - - onNutsLocationsRemoveClick(buttonClickedEvent: Event, index: number) { - buttonClickedEvent.preventDefault(); - this.advanced!.controls.nutsLocations.removeAt(index); - } - - onDataSampleUrlsAddClick(buttonClickedEvent: Event) { - buttonClickedEvent.preventDefault(); - this.advanced!.controls.dataSampleUrls.push( - this.assetAdvancedFormBuilder.buildRequiredUrl(''), - ); - } - - onDataSampleUrlsRemoveClick(buttonClickedEvent: Event, index: number) { - buttonClickedEvent.preventDefault(); - this.advanced!.controls.dataSampleUrls.removeAt(index); - } - - onReferenceFileUrlsAddClick(buttonClickedEvent: Event) { - buttonClickedEvent.preventDefault(); - this.advanced!.controls.referenceFileUrls.push( - this.assetAdvancedFormBuilder.buildRequiredUrl(''), - ); - } - - onReferenceFileUrlsRemoveClick(buttonClickedEvent: Event, index: number) { - buttonClickedEvent.preventDefault(); - this.advanced!.controls.referenceFileUrls.removeAt(index); - } -} diff --git a/src/app/shared/business/edit-asset-form/form/http-methods.ts b/src/app/shared/business/edit-asset-form/form/http-methods.ts deleted file mode 100644 index ac48610ce..000000000 --- a/src/app/shared/business/edit-asset-form/form/http-methods.ts +++ /dev/null @@ -1,11 +0,0 @@ -export const DATA_SOURCE_HTTP_METHODS = [ - 'GET', - 'POST', - 'PUT', - 'PATCH', - 'DELETE', - 'OPTIONS', -]; -export const DATA_SINK_HTTP_METHODS = DATA_SOURCE_HTTP_METHODS.filter( - (it) => it !== 'GET', -); diff --git a/src/app/shared/business/edit-asset-form/form/model/always-true-policy-id.ts b/src/app/shared/business/edit-asset-form/form/model/always-true-policy-id.ts deleted file mode 100644 index 8a082e831..000000000 --- a/src/app/shared/business/edit-asset-form/form/model/always-true-policy-id.ts +++ /dev/null @@ -1 +0,0 @@ -export const ALWAYS_TRUE_POLICY_ID = 'always-true'; diff --git a/src/app/shared/business/edit-asset-form/form/model/asset-advanced-form-model.ts b/src/app/shared/business/edit-asset-form/form/model/asset-advanced-form-model.ts deleted file mode 100644 index af1e551fe..000000000 --- a/src/app/shared/business/edit-asset-form/form/model/asset-advanced-form-model.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { - FormArray, - FormControl, - FormGroup, - ɵFormGroupValue, -} from '@angular/forms'; -import {TransportModeSelectItem} from '../../../../form-elements/transport-mode-select/transport-mode-select-item'; -import {TemporalCoverageFormModel} from './temporal-coverage-form-model'; - -/** - * Form Model for Edit Asset Form > Advanced - * (MDS Properties) - */ -export interface AssetAdvancedFormModel { - dataModel: FormControl; - geoReferenceMethod: FormControl; - transportMode: FormControl; - sovereignLegalName: FormControl; - geoLocation: FormControl; - nutsLocations: FormArray>; - dataSampleUrls: FormArray>; - referenceFileUrls: FormArray>; - referenceFilesDescription: FormControl; - conditionsForUse: FormControl; - dataUpdateFrequency: FormControl; - temporalCoverage: FormGroup; -} - -/** - * Form Value for Edit Asset Form > Advanced - */ -export type AssetAdvancedFormValue = ɵFormGroupValue; diff --git a/src/app/shared/business/edit-asset-form/form/model/asset-datasource-form-enabled-ctrls.ts b/src/app/shared/business/edit-asset-form/form/model/asset-datasource-form-enabled-ctrls.ts deleted file mode 100644 index 7f347421f..000000000 --- a/src/app/shared/business/edit-asset-form/form/model/asset-datasource-form-enabled-ctrls.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { - AssetDatasourceFormModel, - AssetDatasourceFormValue, -} from './asset-datasource-form-model'; - -export const assetDatasourceFormEnabledCtrls = ( - value: AssetDatasourceFormValue, -): Record => { - const customDataAddressJson = - value.dataAddressType === 'Custom-Data-Address-Json'; - - const onRequest = value.dataSourceAvailability === 'On-Request'; - const datasource = value.dataSourceAvailability === 'Datasource'; - - const http = value.dataAddressType === 'Http' && datasource; - const httpAuth = value.httpAuthHeaderType !== 'None'; - const httpAuthByValue = value.httpAuthHeaderType === 'Value'; - const httpAuthByVault = value.httpAuthHeaderType === 'Vault-Secret'; - const proxyPath = !!value.httpProxyPath; - - return { - dataSourceAvailability: true, - - // On Request Datasource - contactEmail: onRequest, - contactPreferredEmailSubject: onRequest, - - dataAddressType: datasource, - - // Custom Datasource JSON - dataDestination: datasource && customDataAddressJson, - - // Http Datasource Fields - httpUrl: http, - httpMethod: http && !value.httpProxyMethod, - - httpAuthHeaderType: http, - httpAuthHeaderName: http && httpAuth, - httpAuthHeaderValue: http && httpAuthByValue, - httpAuthHeaderSecretName: http && httpAuthByVault, - httpQueryParams: http, - - httpDefaultPath: http && proxyPath, - httpProxyMethod: http, - httpProxyPath: http, - httpProxyQueryParams: http, - httpProxyBody: http, - - httpHeaders: http, - }; -}; diff --git a/src/app/shared/business/edit-asset-form/form/model/asset-datasource-form-model.ts b/src/app/shared/business/edit-asset-form/form/model/asset-datasource-form-model.ts deleted file mode 100644 index 3da71b80f..000000000 --- a/src/app/shared/business/edit-asset-form/form/model/asset-datasource-form-model.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { - FormArray, - FormControl, - FormGroup, - ɵFormGroupValue, -} from '@angular/forms'; -import {UiDataSourceHttpDataMethod} from '@sovity.de/edc-client'; -import {DataAddress} from './data-address'; -import {DatasourceType} from './datasource-type'; -import {HttpDatasourceAuthHeaderType} from './http-datasource-auth-header-type'; -import {HttpDatasourceHeaderFormModel} from './http-datasource-header-form-model'; -import {HttpDatasourceQueryParamFormModel} from './http-datasource-query-param-form-model'; - -/** - * Form Model for Edit Asset Form > Datasource - */ -export interface AssetDatasourceFormModel { - dataSourceAvailability: FormControl; - - dataAddressType: FormControl; - - // Custom Datasource JSON - dataDestination: FormControl; - - // On-Request Datasource - contactEmail: FormControl; - contactPreferredEmailSubject: FormControl; - - // Http Datasource - httpUrl: FormControl; - httpMethod: FormControl; - - httpAuthHeaderType: FormControl; - httpAuthHeaderName: FormControl; - httpAuthHeaderValue: FormControl; - httpAuthHeaderSecretName: FormControl; - httpHeaders: FormArray>; - httpQueryParams: FormArray>; - httpProxyMethod: FormControl; - httpProxyPath: FormControl; - httpProxyQueryParams: FormControl; - httpProxyBody: FormControl; - httpDefaultPath: FormControl; -} - -/** - * Form Value for Edit Asset Form > Datasource - */ -export type AssetDatasourceFormValue = - ɵFormGroupValue; diff --git a/src/app/shared/business/edit-asset-form/form/model/asset-edit-dialog-mode.ts b/src/app/shared/business/edit-asset-form/form/model/asset-edit-dialog-mode.ts deleted file mode 100644 index 829ea52c7..000000000 --- a/src/app/shared/business/edit-asset-form/form/model/asset-edit-dialog-mode.ts +++ /dev/null @@ -1 +0,0 @@ -export type AssetEditDialogMode = 'CREATE' | 'EDIT'; diff --git a/src/app/shared/business/edit-asset-form/form/model/asset-general-form-model.ts b/src/app/shared/business/edit-asset-form/form/model/asset-general-form-model.ts deleted file mode 100644 index d059c8e09..000000000 --- a/src/app/shared/business/edit-asset-form/form/model/asset-general-form-model.ts +++ /dev/null @@ -1,28 +0,0 @@ -import {FormControl, ɵFormGroupValue} from '@angular/forms'; -import {DataCategorySelectItem} from '../../../../form-elements/data-category-select/data-category-select-item'; -import {DataSubcategorySelectItem} from '../../../../form-elements/data-subcategory-select/data-subcategory-select-item'; -import {LanguageSelectItem} from '../../../../form-elements/language-select/language-select-item'; - -/** - * Form Model for Edit Asset Form > General - */ -export interface AssetGeneralFormModel { - id: FormControl; - name: FormControl; - description: FormControl; - keywords: FormControl; - dataCategory?: FormControl; - dataSubcategory?: FormControl; - showAdvancedFields: FormControl; - version: FormControl; - contentType: FormControl; - language: FormControl; - publisher: FormControl; - standardLicense: FormControl; - endpointDocumentation: FormControl; -} - -/** - * Form Value for Edit Asset Form > General - */ -export type AssetGeneralFormValue = ɵFormGroupValue; diff --git a/src/app/shared/business/edit-asset-form/form/model/data-address.ts b/src/app/shared/business/edit-asset-form/form/model/data-address.ts deleted file mode 100644 index 5186bd121..000000000 --- a/src/app/shared/business/edit-asset-form/form/model/data-address.ts +++ /dev/null @@ -1,4 +0,0 @@ -export type DataAddress = - | 'Custom-Data-Address-Json' - | 'Custom-Transfer-Process-Request' - | 'Http'; diff --git a/src/app/shared/business/edit-asset-form/form/model/data-offer-publish-mode.ts b/src/app/shared/business/edit-asset-form/form/model/data-offer-publish-mode.ts deleted file mode 100644 index 229aa7d2c..000000000 --- a/src/app/shared/business/edit-asset-form/form/model/data-offer-publish-mode.ts +++ /dev/null @@ -1,4 +0,0 @@ -export type DataOfferPublishMode = - | 'DO_NOT_PUBLISH' - | 'PUBLISH_UNRESTRICTED' - | 'PUBLISH_RESTRICTED'; diff --git a/src/app/shared/business/edit-asset-form/form/model/datasource-type.ts b/src/app/shared/business/edit-asset-form/form/model/datasource-type.ts deleted file mode 100644 index c738373ca..000000000 --- a/src/app/shared/business/edit-asset-form/form/model/datasource-type.ts +++ /dev/null @@ -1 +0,0 @@ -export type DatasourceType = 'Datasource' | 'On-Request' | 'Unchanged'; diff --git a/src/app/shared/business/edit-asset-form/form/model/edit-asset-form-model.ts b/src/app/shared/business/edit-asset-form/form/model/edit-asset-form-model.ts deleted file mode 100644 index dff348313..000000000 --- a/src/app/shared/business/edit-asset-form/form/model/edit-asset-form-model.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { - FormControl, - FormGroup, - UntypedFormGroup, - ɵFormGroupValue, -} from '@angular/forms'; -import {AssetAdvancedFormModel} from './asset-advanced-form-model'; -import {AssetDatasourceFormModel} from './asset-datasource-form-model'; -import {AssetEditDialogMode} from './asset-edit-dialog-mode'; -import {AssetGeneralFormModel} from './asset-general-form-model'; -import {DataOfferPublishMode} from './data-offer-publish-mode'; - -/** - * Form Model for Edit Asset Form - */ -export interface EditAssetFormModel { - mode: FormControl; - publishMode: FormControl; - policyControls: UntypedFormGroup; - general: FormGroup; - datasource: FormGroup; - advanced?: FormGroup; -} - -/** - * Form Value for Edit Asset Form - */ -export type EditAssetFormValue = ɵFormGroupValue; diff --git a/src/app/shared/business/edit-asset-form/form/model/http-datasource-auth-header-type.ts b/src/app/shared/business/edit-asset-form/form/model/http-datasource-auth-header-type.ts deleted file mode 100644 index c208d6fd0..000000000 --- a/src/app/shared/business/edit-asset-form/form/model/http-datasource-auth-header-type.ts +++ /dev/null @@ -1 +0,0 @@ -export type HttpDatasourceAuthHeaderType = 'None' | 'Value' | 'Vault-Secret'; diff --git a/src/app/shared/business/edit-asset-form/form/model/http-datasource-header-form-model.ts b/src/app/shared/business/edit-asset-form/form/model/http-datasource-header-form-model.ts deleted file mode 100644 index 17739e929..000000000 --- a/src/app/shared/business/edit-asset-form/form/model/http-datasource-header-form-model.ts +++ /dev/null @@ -1,15 +0,0 @@ -import {FormControl, ɵFormGroupValue} from '@angular/forms'; - -/** - * Form Model for Edit Asset Form > Datasource > HTTP/REST > Header - */ -export interface HttpDatasourceHeaderFormModel { - headerName: FormControl; - headerValue: FormControl; -} - -/** - * Form Value for Edit Asset Form > Datasource > HTTP/REST > Header - */ -export type HttpDatasourceHeaderFormValue = - ɵFormGroupValue; diff --git a/src/app/shared/business/edit-asset-form/form/model/http-datasource-query-param-form-model.ts b/src/app/shared/business/edit-asset-form/form/model/http-datasource-query-param-form-model.ts deleted file mode 100644 index 747723c5a..000000000 --- a/src/app/shared/business/edit-asset-form/form/model/http-datasource-query-param-form-model.ts +++ /dev/null @@ -1,15 +0,0 @@ -import {FormControl, ɵFormGroupValue} from '@angular/forms'; - -/** - * Form Model for Edit Asset Form > Datasource > HTTP/REST > Header - */ -export interface HttpDatasourceQueryParamFormModel { - paramName: FormControl; - paramValue: FormControl; -} - -/** - * Form Value for Edit Asset Form > Datasource > HTTP/REST > QueryParam - */ -export type HttpDatasourceQueryParamFormValue = - ɵFormGroupValue; diff --git a/src/app/shared/business/edit-asset-form/form/model/temporal-coverage-form-model.ts b/src/app/shared/business/edit-asset-form/form/model/temporal-coverage-form-model.ts deleted file mode 100644 index f145f9f5e..000000000 --- a/src/app/shared/business/edit-asset-form/form/model/temporal-coverage-form-model.ts +++ /dev/null @@ -1,15 +0,0 @@ -import {FormControl, ɵFormGroupValue} from '@angular/forms'; - -/** - * Form Model for AssetEditorDialog > Advanced > Temporal Coverage - */ -export interface TemporalCoverageFormModel { - from: FormControl; - toInclusive: FormControl; -} - -/** - * Form Value for AssetEditorDialog > Advanced > Temporal Coverage - */ -export type TemporalCoverageFormValue = - ɵFormGroupValue; diff --git a/src/app/shared/business/initiate-negotiation-confirm-tos-dialog/initiate-negotiation-confirm-tos-dialog.component.html b/src/app/shared/business/initiate-negotiation-confirm-tos-dialog/initiate-negotiation-confirm-tos-dialog.component.html deleted file mode 100644 index 9e97890d6..000000000 --- a/src/app/shared/business/initiate-negotiation-confirm-tos-dialog/initiate-negotiation-confirm-tos-dialog.component.html +++ /dev/null @@ -1,26 +0,0 @@ -

{{ 'component_library.data_offer' | translate }}

- -
-

- {{ 'component_library.accept_licence' | translate }} -

-
- -
- - {{ 'component_library.agree' | translate }} - - -
- - -
-
diff --git a/src/app/shared/business/initiate-negotiation-confirm-tos-dialog/initiate-negotiation-confirm-tos-dialog.component.scss b/src/app/shared/business/initiate-negotiation-confirm-tos-dialog/initiate-negotiation-confirm-tos-dialog.component.scss deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/app/shared/business/initiate-negotiation-confirm-tos-dialog/initiate-negotiation-confirm-tos-dialog.component.ts b/src/app/shared/business/initiate-negotiation-confirm-tos-dialog/initiate-negotiation-confirm-tos-dialog.component.ts deleted file mode 100644 index 2fd0195a3..000000000 --- a/src/app/shared/business/initiate-negotiation-confirm-tos-dialog/initiate-negotiation-confirm-tos-dialog.component.ts +++ /dev/null @@ -1,30 +0,0 @@ -import {Component} from '@angular/core'; -import {MatCheckboxChange} from '@angular/material/checkbox'; -import {MatDialogRef} from '@angular/material/dialog'; - -@Component({ - selector: 'app-initiate-negotiation-confirm-tos-dialog', - templateUrl: './initiate-negotiation-confirm-tos-dialog.component.html', - styleUrls: ['./initiate-negotiation-confirm-tos-dialog.component.scss'], -}) -export class InitiateNegotiationConfirmTosDialogComponent { - checkboxChecked = false; - - constructor( - public dialogRef: MatDialogRef, - ) {} - - public onCheckboxChange($event: MatCheckboxChange) { - this.checkboxChecked = $event.checked; - } - - onCancel() { - this.dialogRef.close(false); - } - - onConfirm() { - if (this.checkboxChecked) { - this.dialogRef.close(true); - } - } -} diff --git a/src/app/shared/business/policy-editor/editor/expression-form-controls.ts b/src/app/shared/business/policy-editor/editor/expression-form-controls.ts deleted file mode 100644 index 99b271199..000000000 --- a/src/app/shared/business/policy-editor/editor/expression-form-controls.ts +++ /dev/null @@ -1,92 +0,0 @@ -import {Injectable} from '@angular/core'; -import { - FormControl, - UntypedFormControl, - UntypedFormGroup, -} from '@angular/forms'; -import {OperatorDto, UiPolicyLiteral} from '@sovity.de/edc-client'; -import {PolicyOperatorConfig} from '../model/policy-operators'; -import {TreeNode} from '../model/tree'; -import {ExpressionFormValue} from './expression-form-value'; - -/** - * Manages the FormGroup across the expression tree - * - * Controls are needed for both constraint operators and values - * - * Must be provided at the component level as viewProvider. - */ -@Injectable() -export class ExpressionFormControls { - formGroup = new UntypedFormGroup({}); - - getValue(node: TreeNode): UiPolicyLiteral { - const formValue = this.getValueFormControl(node).value; - return node.value.verb!.adapter.buildValueFn( - formValue, - this.getOperator(node), - ); - } - - getOperator(node: TreeNode): PolicyOperatorConfig { - return this.getOperatorFormControl(node).value; - } - - registerControls( - nodeId: string, - expr: ExpressionFormValue, - operator: OperatorDto, - value: UiPolicyLiteral, - ) { - if (expr.type !== 'CONSTRAINT') { - return; - } - - const supportedOperators = expr.supportedOperators ?? []; - const operatorConfig = - supportedOperators.find((it) => it.id === operator) ?? - supportedOperators[0]; - - const operatorControl = new UntypedFormControl(operatorConfig); - - const valueControl = expr.verb!.adapter.fromControlFactory(); - valueControl.reset( - expr.verb!.adapter.buildFormValueFn(value, operatorConfig), - ); - - this.formGroup.addControl(`${nodeId}-value`, valueControl); - this.formGroup.addControl(`${nodeId}-op`, operatorControl); - } - - unregisterControls(node: TreeNode) { - this.dfs(node, (node) => this.unregisterNodeControls(node)); - } - - getValueFormControl(treeNode: TreeNode): FormControl { - return this.formGroup.get(`${treeNode.id}-value`) as FormControl; - } - - getOperatorFormControl( - treeNode: TreeNode, - ): UntypedFormControl { - return this.formGroup.get(`${treeNode.id}-op`) as FormControl; - } - - private unregisterNodeControls(node: TreeNode) { - if (node.value.type !== 'CONSTRAINT') { - return; - } - - [`${node.id}-value`, `${node.id}-op`].forEach((it) => - this.formGroup.removeControl(it), - ); - } - - private dfs( - treeNode: TreeNode, - callback: (node: TreeNode) => void, - ) { - callback(treeNode); - treeNode.children.forEach((child) => this.dfs(child, callback)); - } -} diff --git a/src/app/shared/business/policy-editor/editor/expression-form-handler.ts b/src/app/shared/business/policy-editor/editor/expression-form-handler.ts deleted file mode 100644 index cae3495c3..000000000 --- a/src/app/shared/business/policy-editor/editor/expression-form-handler.ts +++ /dev/null @@ -1,146 +0,0 @@ -import {Injectable} from '@angular/core'; -import {UiPolicyExpression} from '@sovity.de/edc-client'; -import {PolicyExpressionMapped} from '../model/policy-expression-mapped'; -import {PolicyMapper} from '../model/policy-mapper'; -import {PolicyMultiExpressionConfig} from '../model/policy-multi-expressions'; -import {PolicyOperatorService} from '../model/policy-operators'; -import {PolicyVerbConfig} from '../model/policy-verbs'; -import {Tree, TreeGeneratorFn, TreeNode} from '../model/tree'; -import {ExpressionFormControls} from './expression-form-controls'; -import {ExpressionFormValue} from './expression-form-value'; - -/** - * Central service for interacting with the policy expression form. - * - * Must be provided at the component level as viewProvider. - */ -@Injectable() -export class ExpressionFormHandler { - tree: Tree = this.buildTree({type: 'EMPTY'}); - - constructor( - public controls: ExpressionFormControls, - public policyMapper: PolicyMapper, - private policyOperatorService: PolicyOperatorService, - ) {} - - private buildTree( - expression: PolicyExpressionMapped, - ): Tree { - return Tree.ofTreeLikeStructure< - PolicyExpressionMapped, - ExpressionFormValue - >({ - root: expression, - generatorFn: this.treeGenerator(), - }); - } - - addConstraint(path: string[], verb: PolicyVerbConfig) { - const expression: UiPolicyExpression = { - type: 'CONSTRAINT', - constraint: { - left: verb.operandLeftId, - ...verb.adapter.emptyConstraintValue(), - }, - }; - - this.addExpression(path, expression); - } - - addMultiExpression( - path: string[], - multiExpression: PolicyMultiExpressionConfig, - ) { - const expression: UiPolicyExpression = { - type: multiExpression.expressionType, - expressions: [], - }; - this.addExpression(path, expression); - } - - addExpression(path: string[], expression: UiPolicyExpression) { - const mapped = this.policyMapper.buildPolicy(expression); - this.addTree(path, mapped); - } - - removeNode(node: TreeNode) { - this.controls.unregisterControls(node); - if (node.path.length === 1) { - this.tree.replaceTree(node.path, {type: 'EMPTY'}, this.treeGenerator()); - } else { - this.tree.remove(node.path); - } - } - - private addTree( - path: string[], - expression: PolicyExpressionMapped, - ): TreeNode { - if (path.length === 1 && this.tree.root.value.type === 'EMPTY') { - this.tree.replaceTree(path, expression, this.treeGenerator()); - return this.tree.root; - } else { - return this.tree.pushTree(path, expression, this.treeGenerator()); - } - } - - private treeGenerator(): TreeGeneratorFn< - PolicyExpressionMapped, - ExpressionFormValue - > { - // Function returning a function for it to be available in the constructor - return (expr, nodeId) => { - const value = this.buildExpressionFormValue(expr); - - // Also create form controls as necessary - this.controls.registerControls( - nodeId, - value, - expr.operator?.id!, - expr.valueRaw!, - ); - - return {value, children: expr.expressions ?? []}; - }; - } - - private buildExpressionFormValue( - original: PolicyExpressionMapped, - ): ExpressionFormValue { - const supportedOperators = this.policyOperatorService - .getSupportedPolicyOperators() - .filter((it) => original.verb?.supportedOperators.includes(it.id)); - return { - type: original.type, - multiExpression: original.multiExpression, - verb: original.verb, - supportedOperators, - }; - } - - toUiPolicyExpression() { - const visit = (node: TreeNode): UiPolicyExpression => { - const value = node.value; - if (value.type === 'EMPTY') { - return {type: 'EMPTY'}; - } else if (value.type === 'MULTI') { - return { - type: value.multiExpression!.expressionType, - expressions: node.children.map((it) => visit(it)), - }; - } else { - return { - type: 'CONSTRAINT', - constraint: { - left: value.verb!.operandLeftId, - operator: this.controls.getOperator(node).id, - right: this.controls.getValue(node), - }, - }; - } - }; - - return visit(this.tree.root); - } -} diff --git a/src/app/shared/business/policy-editor/editor/expression-form-value.ts b/src/app/shared/business/policy-editor/editor/expression-form-value.ts deleted file mode 100644 index 395d9c95b..000000000 --- a/src/app/shared/business/policy-editor/editor/expression-form-value.ts +++ /dev/null @@ -1,11 +0,0 @@ -import {PolicyMultiExpressionConfig} from '../model/policy-multi-expressions'; -import {PolicyOperatorConfig} from '../model/policy-operators'; -import {PolicyVerbConfig} from '../model/policy-verbs'; - -export interface ExpressionFormValue { - type: 'CONSTRAINT' | 'MULTI' | 'EMPTY'; - - multiExpression?: PolicyMultiExpressionConfig; - verb?: PolicyVerbConfig; - supportedOperators?: PolicyOperatorConfig[]; -} diff --git a/src/app/shared/business/policy-editor/editor/policy-form-add-menu/policy-form-add-menu.component.html b/src/app/shared/business/policy-editor/editor/policy-form-add-menu/policy-form-add-menu.component.html deleted file mode 100644 index dbc6158da..000000000 --- a/src/app/shared/business/policy-editor/editor/policy-form-add-menu/policy-form-add-menu.component.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - diff --git a/src/app/shared/business/policy-editor/editor/policy-form-add-menu/policy-form-add-menu.component.ts b/src/app/shared/business/policy-editor/editor/policy-form-add-menu/policy-form-add-menu.component.ts deleted file mode 100644 index ea0a9300a..000000000 --- a/src/app/shared/business/policy-editor/editor/policy-form-add-menu/policy-form-add-menu.component.ts +++ /dev/null @@ -1,65 +0,0 @@ -import {Component, Input, OnDestroy} from '@angular/core'; -import {Subject} from 'rxjs'; -import { - PolicyMultiExpressionConfig, - PolicyMultiExpressionService, -} from '../../model/policy-multi-expressions'; -import {PolicyVerbConfig, PolicyVerbService} from '../../model/policy-verbs'; -import {TreeNode} from '../../model/tree'; -import {ExpressionFormHandler} from '../expression-form-handler'; -import {ExpressionFormValue} from '../expression-form-value'; -import { - PolicyExpressionRecipe, - PolicyExpressionRecipeService, -} from '../recipes/policy-expression-recipe.service'; - -@Component({ - selector: 'policy-form-add-menu', - templateUrl: './policy-form-add-menu.component.html', -}) -export class PolicyFormAddMenuComponent implements OnDestroy { - multiExpressions: PolicyMultiExpressionConfig[] = []; - verbs: PolicyVerbConfig[] = []; - - @Input() - treeNode!: TreeNode; - - constructor( - public expressionFormHandler: ExpressionFormHandler, - public policyExpressionRecipeService: PolicyExpressionRecipeService, - private policyVerbService: PolicyVerbService, - private policyMultiExpressionService: PolicyMultiExpressionService, - ) {} - - onMenuOpened() { - this.verbs = this.policyVerbService.getSupportedPolicyVerbs(); - this.multiExpressions = - this.policyMultiExpressionService.getSupportedMultiExpressions(); - } - - onAddConstraint(constraint: PolicyVerbConfig) { - const path = this.treeNode.path; - this.expressionFormHandler.addConstraint(path, constraint); - } - - onAddMultiExpression(multi: PolicyMultiExpressionConfig) { - const path = this.treeNode.path; - this.expressionFormHandler.addMultiExpression(path, multi); - } - - onAddRecipe(recipe: PolicyExpressionRecipe) { - const path = this.treeNode.path; - recipe - .onclick(this.ngOnDestroy$) - .subscribe((expression) => - this.expressionFormHandler.addExpression(path, expression), - ); - } - - ngOnDestroy$ = new Subject(); - - ngOnDestroy(): void { - this.ngOnDestroy$.next(null); - this.ngOnDestroy$.complete(); - } -} diff --git a/src/app/shared/business/policy-editor/editor/policy-form-expression-constraint/policy-form-expression-constraint.component.html b/src/app/shared/business/policy-editor/editor/policy-form-expression-constraint/policy-form-expression-constraint.component.html deleted file mode 100644 index e31011f90..000000000 --- a/src/app/shared/business/policy-editor/editor/policy-form-expression-constraint/policy-form-expression-constraint.component.html +++ /dev/null @@ -1,48 +0,0 @@ -
- {{ verb.operandLeftTitle }} -
- -
- -
- - - {{ verb.operandLeftTitle }} - - {{ verb.operandRightHint }} - - - - {{ verb.operandLeftTitle }} - - {{ verb.operandRightHint }} - - - - - -
- -
diff --git a/src/app/shared/business/policy-editor/editor/policy-form-expression-constraint/policy-form-expression-constraint.component.ts b/src/app/shared/business/policy-editor/editor/policy-form-expression-constraint/policy-form-expression-constraint.component.ts deleted file mode 100644 index 4dfd97c37..000000000 --- a/src/app/shared/business/policy-editor/editor/policy-form-expression-constraint/policy-form-expression-constraint.component.ts +++ /dev/null @@ -1,28 +0,0 @@ -import {Component, HostBinding, Input} from '@angular/core'; -import {PolicyVerbConfig} from '../../model/policy-verbs'; -import {TreeNode} from '../../model/tree'; -import {ExpressionFormHandler} from '../expression-form-handler'; -import {ExpressionFormValue} from '../expression-form-value'; - -@Component({ - selector: 'policy-form-expression-constraint', - templateUrl: './policy-form-expression-constraint.component.html', -}) -export class PolicyFormExpressionConstraintComponent { - @HostBinding('class.flex') - @HostBinding('class.gap-4') - cls = true; - - @Input() - treeNode!: TreeNode; - - get expr(): ExpressionFormValue { - return this.treeNode.value; - } - - get verb(): PolicyVerbConfig { - return this.expr.verb!; - } - - constructor(public expressionFormHandler: ExpressionFormHandler) {} -} diff --git a/src/app/shared/business/policy-editor/editor/policy-form-expression-empty/policy-form-expression-empty.component.html b/src/app/shared/business/policy-editor/editor/policy-form-expression-empty/policy-form-expression-empty.component.html deleted file mode 100644 index 073d65f36..000000000 --- a/src/app/shared/business/policy-editor/editor/policy-form-expression-empty/policy-form-expression-empty.component.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/app/shared/business/policy-editor/editor/policy-form-expression-empty/policy-form-expression-empty.component.ts b/src/app/shared/business/policy-editor/editor/policy-form-expression-empty/policy-form-expression-empty.component.ts deleted file mode 100644 index 23cdfca95..000000000 --- a/src/app/shared/business/policy-editor/editor/policy-form-expression-empty/policy-form-expression-empty.component.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {Component, HostBinding, Input} from '@angular/core'; -import {TreeNode} from '../../model/tree'; -import {ExpressionFormValue} from '../expression-form-value'; - -@Component({ - selector: 'policy-form-expression-empty', - templateUrl: './policy-form-expression-empty.component.html', -}) -export class PolicyFormExpressionEmptyComponent { - @HostBinding('class.flex') - @HostBinding('class.h-[4rem]') - @HostBinding('class.items-center') - cls = true; - - @Input() - treeNode!: TreeNode; -} diff --git a/src/app/shared/business/policy-editor/editor/policy-form-expression-multi/policy-form-expression-multi.component.html b/src/app/shared/business/policy-editor/editor/policy-form-expression-multi/policy-form-expression-multi.component.html deleted file mode 100644 index dc5543ee1..000000000 --- a/src/app/shared/business/policy-editor/editor/policy-form-expression-multi/policy-form-expression-multi.component.html +++ /dev/null @@ -1,41 +0,0 @@ -
-
- {{ - expr.multiExpression!.title - }} -
- -
-
-
- - -
-
- -
- -
-
-
diff --git a/src/app/shared/business/policy-editor/editor/policy-form-expression-multi/policy-form-expression-multi.component.ts b/src/app/shared/business/policy-editor/editor/policy-form-expression-multi/policy-form-expression-multi.component.ts deleted file mode 100644 index 579859c82..000000000 --- a/src/app/shared/business/policy-editor/editor/policy-form-expression-multi/policy-form-expression-multi.component.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {Component, HostBinding, Input, TrackByFunction} from '@angular/core'; -import {TreeNode} from '../../model/tree'; -import {ExpressionFormValue} from '../expression-form-value'; - -@Component({ - selector: 'policy-form-expression-multi', - templateUrl: './policy-form-expression-multi.component.html', -}) -export class PolicyFormExpressionMultiComponent { - @HostBinding('class.flex') - @HostBinding('class.flex-col') - @HostBinding('class.justify-stretch') - cls = true; - - @Input() - treeNode!: TreeNode; - - trackByFn: TrackByFunction> = (_, it) => it.id; - - get expr(): ExpressionFormValue { - return this.treeNode.value; - } -} diff --git a/src/app/shared/business/policy-editor/editor/policy-form-expression/policy-form-expression.component.html b/src/app/shared/business/policy-editor/editor/policy-form-expression/policy-form-expression.component.html deleted file mode 100644 index d56831a5a..000000000 --- a/src/app/shared/business/policy-editor/editor/policy-form-expression/policy-form-expression.component.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - diff --git a/src/app/shared/business/policy-editor/editor/policy-form-expression/policy-form-expression.component.ts b/src/app/shared/business/policy-editor/editor/policy-form-expression/policy-form-expression.component.ts deleted file mode 100644 index 59d875887..000000000 --- a/src/app/shared/business/policy-editor/editor/policy-form-expression/policy-form-expression.component.ts +++ /dev/null @@ -1,21 +0,0 @@ -import {Component, Input, TrackByFunction} from '@angular/core'; -import {TreeNode} from '../../model/tree'; -import {ExpressionFormHandler} from '../expression-form-handler'; -import {ExpressionFormValue} from '../expression-form-value'; - -@Component({ - selector: 'policy-form-expression', - templateUrl: './policy-form-expression.component.html', -}) -export class PolicyFormExpressionComponent { - @Input() - treeNode!: TreeNode; - - trackByFn: TrackByFunction> = (_, it) => it.id; - - get expr(): ExpressionFormValue { - return this.treeNode.value; - } - - constructor(public expressionFormHandler: ExpressionFormHandler) {} -} diff --git a/src/app/shared/business/policy-editor/editor/policy-form-remove-button/policy-form-remove-button.component.html b/src/app/shared/business/policy-editor/editor/policy-form-remove-button/policy-form-remove-button.component.html deleted file mode 100644 index c3223c12c..000000000 --- a/src/app/shared/business/policy-editor/editor/policy-form-remove-button/policy-form-remove-button.component.html +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/src/app/shared/business/policy-editor/editor/policy-form-remove-button/policy-form-remove-button.component.ts b/src/app/shared/business/policy-editor/editor/policy-form-remove-button/policy-form-remove-button.component.ts deleted file mode 100644 index 33e5a6025..000000000 --- a/src/app/shared/business/policy-editor/editor/policy-form-remove-button/policy-form-remove-button.component.ts +++ /dev/null @@ -1,19 +0,0 @@ -import {Component, Input} from '@angular/core'; -import {TreeNode} from '../../model/tree'; -import {ExpressionFormHandler} from '../expression-form-handler'; -import {ExpressionFormValue} from '../expression-form-value'; - -@Component({ - selector: 'policy-form-remove-button', - templateUrl: './policy-form-remove-button.component.html', -}) -export class PolicyFormRemoveButton { - @Input() - treeNode!: TreeNode; - - constructor(public expressionFormHandler: ExpressionFormHandler) {} - - onRemoveClick() { - this.expressionFormHandler.removeNode(this.treeNode); - } -} diff --git a/src/app/shared/business/policy-editor/editor/policy-form-required-providers.ts b/src/app/shared/business/policy-editor/editor/policy-form-required-providers.ts deleted file mode 100644 index 2047b3756..000000000 --- a/src/app/shared/business/policy-editor/editor/policy-form-required-providers.ts +++ /dev/null @@ -1,7 +0,0 @@ -import {ExpressionFormControls} from './expression-form-controls'; -import {ExpressionFormHandler} from './expression-form-handler'; - -export const policyFormRequiredViewProviders = [ - ExpressionFormHandler, - ExpressionFormControls, -]; diff --git a/src/app/shared/business/policy-editor/editor/recipes/policy-expression-recipe.service.ts b/src/app/shared/business/policy-editor/editor/recipes/policy-expression-recipe.service.ts deleted file mode 100644 index c94ef7891..000000000 --- a/src/app/shared/business/policy-editor/editor/recipes/policy-expression-recipe.service.ts +++ /dev/null @@ -1,41 +0,0 @@ -import {ComponentType} from '@angular/cdk/portal'; -import {Injectable} from '@angular/core'; -import {MatDialog} from '@angular/material/dialog'; -import {Observable} from 'rxjs'; -import {UiPolicyExpression} from '@sovity.de/edc-client'; -import {showDialogUntil} from '../../../../../core/utils/mat-dialog-utils'; -import {filterNotNull} from '../../../../../core/utils/rxjs-utils'; -import {TimespanRestrictionDialogComponent} from './timespan-restriction-dialog/timespan-restriction-dialog.component'; - -export interface PolicyExpressionRecipe { - title: string; - tooltip: string; - onclick: (until$: Observable) => Observable; -} - -@Injectable() -export class PolicyExpressionRecipeService { - recipes: PolicyExpressionRecipe[] = [ - { - title: 'Timespan Restriction', - tooltip: - 'Timespan at which the policy is evaluated. This can be used to restrict the data offer to certain time periods', - onclick: (until$: Observable) => - this.showRecipeDialog(TimespanRestrictionDialogComponent, until$), - }, - ]; - - constructor(private dialog: MatDialog) {} - - private showRecipeDialog( - cmp: ComponentType, - until$: Observable, - ): Observable { - return showDialogUntil( - this.dialog, - cmp, - {}, - until$, - ).pipe(filterNotNull()); - } -} diff --git a/src/app/shared/business/policy-editor/editor/recipes/timespan-restriction-dialog/timespan-restriction-dialog.component.html b/src/app/shared/business/policy-editor/editor/recipes/timespan-restriction-dialog/timespan-restriction-dialog.component.html deleted file mode 100644 index a14abb38b..000000000 --- a/src/app/shared/business/policy-editor/editor/recipes/timespan-restriction-dialog/timespan-restriction-dialog.component.html +++ /dev/null @@ -1,46 +0,0 @@ -

- {{ 'policy_expression.timespan_restriction_title' | translate }} -

- -
- - - {{ - 'policy_definition_page.date_range' | translate - }} - - - - - DD/MM/YYYY – DD/MM/YYYY - - - {{ - validationMessages.invalidDateRangeMessage - }} - -
-
- - - - - - diff --git a/src/app/shared/business/policy-editor/editor/recipes/timespan-restriction-dialog/timespan-restriction-dialog.component.ts b/src/app/shared/business/policy-editor/editor/recipes/timespan-restriction-dialog/timespan-restriction-dialog.component.ts deleted file mode 100644 index 2a163d9e9..000000000 --- a/src/app/shared/business/policy-editor/editor/recipes/timespan-restriction-dialog/timespan-restriction-dialog.component.ts +++ /dev/null @@ -1,52 +0,0 @@ -import {Component, OnDestroy} from '@angular/core'; -import {FormBuilder} from '@angular/forms'; -import {MatDialogRef} from '@angular/material/dialog'; -import {Subject} from 'rxjs'; -import {UiPolicyExpression} from '@sovity.de/edc-client'; -import {validDateRange} from '../../../../../../core/validators/valid-date-range-optional-end'; -import {ValidationMessages} from '../../../../../../core/validators/validation-messages'; -import {buildTimespanRestriction} from './timespan-restriction-expression'; - -@Component({ - selector: 'timespan-restriction-dialog', - templateUrl: './timespan-restriction-dialog.component.html', -}) -export class TimespanRestrictionDialogComponent implements OnDestroy { - group = this.formBuilder.nonNullable.group({ - range: this.formBuilder.group( - { - start: null as Date | null, - end: null as Date | null, - }, - {validators: validDateRange}, - ), - }); - - constructor( - private formBuilder: FormBuilder, - private dialogRef: MatDialogRef, - public validationMessages: ValidationMessages, - ) {} - - onAdd() { - const formValue = this.group.value; - - const expression = buildTimespanRestriction( - formValue.range!.start!, - formValue.range!.end!, - ); - - this.close(expression); - } - - private close(params: UiPolicyExpression) { - this.dialogRef.close(params); - } - - ngOnDestroy$ = new Subject(); - - ngOnDestroy(): void { - this.ngOnDestroy$.next(null); - this.ngOnDestroy$.complete(); - } -} diff --git a/src/app/shared/business/policy-editor/editor/recipes/timespan-restriction-dialog/timespan-restriction-expression.ts b/src/app/shared/business/policy-editor/editor/recipes/timespan-restriction-dialog/timespan-restriction-expression.ts deleted file mode 100644 index ddb2b20e8..000000000 --- a/src/app/shared/business/policy-editor/editor/recipes/timespan-restriction-dialog/timespan-restriction-expression.ts +++ /dev/null @@ -1,22 +0,0 @@ -import {OperatorDto, UiPolicyExpression} from '@sovity.de/edc-client'; -import {addDays} from 'date-fns'; -import {policyLeftExpressions} from '../../../model/policy-left-expressions'; -import {constraint, multi} from '../../../model/ui-policy-expression-utils'; - -export const buildTimespanRestriction = ( - firstDay: Date, - lastDay: Date, -): UiPolicyExpression => { - const evaluationTimeConstraint = (operator: OperatorDto, value: Date) => - constraint( - policyLeftExpressions.policyEvaluationTime, - operator, - value.toISOString(), - ); - - return multi( - 'AND', - evaluationTimeConstraint('GEQ', firstDay), - evaluationTimeConstraint('LEQ', addDays(lastDay, 1)), - ); -}; diff --git a/src/app/shared/business/policy-editor/model/policy-expression-mapped.ts b/src/app/shared/business/policy-editor/model/policy-expression-mapped.ts deleted file mode 100644 index 221bd2abb..000000000 --- a/src/app/shared/business/policy-editor/model/policy-expression-mapped.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {UiPolicyLiteral} from '@sovity.de/edc-client'; -import {PolicyMultiExpressionConfig} from './policy-multi-expressions'; -import {PolicyOperatorConfig} from './policy-operators'; -import {PolicyVerbConfig} from './policy-verbs'; - -export interface PolicyExpressionMapped { - type: 'CONSTRAINT' | 'MULTI' | 'EMPTY'; - - multiExpression?: PolicyMultiExpressionConfig; - expressions?: PolicyExpressionMapped[]; - - verb?: PolicyVerbConfig; - operator?: PolicyOperatorConfig; - valueRaw?: UiPolicyLiteral; - valueJson?: string; - displayValue?: string; -} diff --git a/src/app/shared/business/policy-editor/model/policy-form-adapter.ts b/src/app/shared/business/policy-editor/model/policy-form-adapter.ts deleted file mode 100644 index b1a9d727a..000000000 --- a/src/app/shared/business/policy-editor/model/policy-form-adapter.ts +++ /dev/null @@ -1,148 +0,0 @@ -import {UntypedFormControl, Validators} from '@angular/forms'; -import {UiPolicyConstraint, UiPolicyLiteral} from '@sovity.de/edc-client'; -import { - localTzDayToIsoString, - truncateToLocalTzDay, - truncateToLocalTzDayRaw, -} from '../../../../core/utils/date-utils'; -import {jsonValidator} from '../../../../core/validators/json-validator'; -import { - readArrayLiteral, - readJsonLiteral, - readSingleStringLiteral, - stringLiteral, -} from './policy-jsonld-utils'; -import {PolicyOperatorConfig} from './policy-operators'; - -export interface PolicyFormAdapter { - displayText: ( - value: UiPolicyLiteral, - operator: PolicyOperatorConfig, - ) => string | null; - fromControlFactory: () => UntypedFormControl; - buildFormValueFn: ( - literal: UiPolicyLiteral, - operator: PolicyOperatorConfig, - ) => T; - buildValueFn: ( - formValue: T, - operator: PolicyOperatorConfig, - ) => UiPolicyLiteral; - emptyConstraintValue: () => Pick; -} - -export const localDateAdapter: PolicyFormAdapter = { - displayText: (literal, operator): string | null => { - const stringOrNull = readSingleStringLiteral(literal); - return safeConversion(stringOrNull, (string) => { - const date = new Date(string); - const upperBound = isUpperBound(operator); - - return truncateToLocalTzDay(date, upperBound); - }); - }, - fromControlFactory: () => new UntypedFormControl(null, Validators.required), - buildFormValueFn: (literal, operator): Date | null => { - const stringOrNull = readSingleStringLiteral(literal); - return safeConversion(stringOrNull, (string) => { - const date = new Date(string); - const upperBound = isUpperBound(operator); - - // Editing datetimes from a different TZ as days has no good solution - return truncateToLocalTzDayRaw(date, upperBound); - }); - }, - buildValueFn: (valueOrNull, operator) => { - return stringLiteral( - safeConversion(valueOrNull, (value) => { - const upperBound = isUpperBound(operator); - - return localTzDayToIsoString(value, upperBound); - }), - ); - }, - emptyConstraintValue: () => ({ - operator: 'LT', - right: { - type: 'STRING', - }, - }), -}; - -export const stringArrayOrCommaJoinedAdapter: PolicyFormAdapter = { - displayText: (literal): string | null => readArrayLiteral(literal).join(', '), - fromControlFactory: () => new UntypedFormControl([], Validators.required), - buildFormValueFn: (literal): string[] => { - if (literal.type === 'STRING') { - return literal.value?.split(',') ?? []; - } - - return readArrayLiteral(literal); - }, - buildValueFn: (value, operator) => { - const items = value as string[]; - if (operator.id === 'EQ') { - return { - type: 'STRING', - value: items.join(','), - }; - } - - return { - type: 'STRING_LIST', - valueList: items, - }; - }, - emptyConstraintValue: () => ({ - operator: 'IN', - right: { - type: 'STRING_LIST', - valueList: [], - }, - }), -}; - -export const jsonAdapter: PolicyFormAdapter = { - displayText: (literal) => readJsonLiteral(literal), - buildFormValueFn: (literal) => readJsonLiteral(literal), - buildValueFn: (formValue) => ({ - type: 'JSON', - value: formValue, - }), - fromControlFactory: () => - new UntypedFormControl('', [Validators.required, jsonValidator]), - emptyConstraintValue: () => ({ - operator: 'EQ', - right: { - type: 'JSON', - value: 'null', - }, - }), -}; - -const isUpperBound = (operator: PolicyOperatorConfig) => - operator.id === 'GT' || operator.id === 'LEQ'; - -/** - * Helper function for reducing mental complexity of mapping code: - * - Handles null input - * - Handles undefined output - * - Catches exceptions and returns null - * - * @param valueOrNull value - * @param mapper mapper - */ -const safeConversion = ( - valueOrNull: T | null | undefined, - mapper: (it: T) => R | null | undefined, -): R | null => { - if (valueOrNull == null) { - return null; - } - - try { - return mapper(valueOrNull) ?? null; - } catch (e) { - return null; - } -}; diff --git a/src/app/shared/business/policy-editor/model/policy-jsonld-utils.ts b/src/app/shared/business/policy-editor/model/policy-jsonld-utils.ts deleted file mode 100644 index c4502862b..000000000 --- a/src/app/shared/business/policy-editor/model/policy-jsonld-utils.ts +++ /dev/null @@ -1,38 +0,0 @@ -import {UiPolicyLiteral} from '@sovity.de/edc-client'; -import {filterNonNull} from '../../../../core/utils/array-utils'; - -export const readSingleStringLiteral = ( - literal: UiPolicyLiteral, -): string | null => { - if (literal.type === 'STRING') { - return literal.value ?? null; - } else if (literal.type === 'STRING_LIST') { - return literal.valueList?.length ? literal.valueList[0] : null; - } - return null; -}; - -export const readArrayLiteral = (literal: UiPolicyLiteral): string[] => { - if (literal.type === 'STRING') { - return filterNonNull([literal.value]); - } else if (literal.type === 'STRING_LIST') { - return literal.valueList ?? []; - } - return []; -}; - -export const readJsonLiteral = (literal: UiPolicyLiteral): string => { - if (literal.type === 'STRING') { - return JSON.stringify(literal.value); - } else if (literal.type === 'STRING_LIST') { - return JSON.stringify(literal.valueList); - } - return literal.value ?? 'null'; -}; - -export const stringLiteral = ( - value: string | null | undefined, -): UiPolicyLiteral => ({ - type: 'STRING', - value: value ?? undefined, -}); diff --git a/src/app/shared/business/policy-editor/model/policy-left-expressions.ts b/src/app/shared/business/policy-editor/model/policy-left-expressions.ts deleted file mode 100644 index e09101017..000000000 --- a/src/app/shared/business/policy-editor/model/policy-left-expressions.ts +++ /dev/null @@ -1,4 +0,0 @@ -export const policyLeftExpressions = { - policyEvaluationTime: 'POLICY_EVALUATION_TIME', - referringConnector: 'REFERRING_CONNECTOR', -}; diff --git a/src/app/shared/business/policy-editor/model/policy-mapper.ts b/src/app/shared/business/policy-editor/model/policy-mapper.ts deleted file mode 100644 index 8fa3a63e4..000000000 --- a/src/app/shared/business/policy-editor/model/policy-mapper.ts +++ /dev/null @@ -1,89 +0,0 @@ -import {Injectable} from '@angular/core'; -import {UiPolicyExpression, UiPolicyLiteral} from '@sovity.de/edc-client'; -import {PolicyExpressionMapped} from './policy-expression-mapped'; -import {PolicyMultiExpressionService} from './policy-multi-expressions'; -import {PolicyOperatorConfig, PolicyOperatorService} from './policy-operators'; -import {PolicyVerbConfig, PolicyVerbService} from './policy-verbs'; - -@Injectable() -export class PolicyMapper { - constructor( - private policyOperatorService: PolicyOperatorService, - private policyMultiExpressionService: PolicyMultiExpressionService, - private policyVerbService: PolicyVerbService, - ) {} - - buildPolicy(expression: UiPolicyExpression): PolicyExpressionMapped { - if (expression.type === 'EMPTY') { - return {type: 'EMPTY'}; - } - - if (expression.type === 'CONSTRAINT') { - return this.mapConstraint(expression); - } - - return this.mapMultiExpression(expression); - } - - private mapConstraint( - expression: UiPolicyExpression, - ): PolicyExpressionMapped { - const verb = this.policyVerbService.getVerbConfig( - expression.constraint?.left!, - ); - const operator = this.policyOperatorService.getOperatorConfig( - expression.constraint?.operator!, - ); - const value = expression.constraint?.right; - - return { - type: 'CONSTRAINT', - verb, - operator, - valueRaw: value, - valueJson: this.formatJson(value!), - displayValue: this.formatValue(value, verb, operator) ?? 'null', - }; - } - - private mapMultiExpression( - expression: UiPolicyExpression, - ): PolicyExpressionMapped { - const multiExpression = - this.policyMultiExpressionService.getMultiExpressionConfig( - expression.type, - ); - const expressions = (expression.expressions ?? []).map((it) => - this.buildPolicy(it), - ); - return { - type: 'MULTI', - multiExpression, - expressions, - }; - } - - private formatValue( - value: UiPolicyLiteral | undefined, - verbConfig: PolicyVerbConfig, - operatorConfig: PolicyOperatorConfig, - ) { - if (value == null) { - return ''; - } - - return verbConfig.adapter.displayText(value, operatorConfig); - } - - private formatJson(value: UiPolicyLiteral): string { - if (value.type === 'STRING_LIST') { - return JSON.stringify(value.valueList); - } - - if (value.type === 'JSON') { - return value.value ?? ''; - } - - return JSON.stringify(value.value); - } -} diff --git a/src/app/shared/business/policy-editor/model/policy-multi-expressions.ts b/src/app/shared/business/policy-editor/model/policy-multi-expressions.ts deleted file mode 100644 index afa9aa22b..000000000 --- a/src/app/shared/business/policy-editor/model/policy-multi-expressions.ts +++ /dev/null @@ -1,76 +0,0 @@ -import {Injectable} from '@angular/core'; -import {TranslateService} from '@ngx-translate/core'; -import {UiPolicyExpressionType} from '@sovity.de/edc-client'; -import {LazyTranslation} from '../../../../core/utils/lazy-utils'; -import {associateBy} from '../../../../core/utils/map-utils'; - -export interface PolicyMultiExpressionConfig { - expressionType: UiPolicyExpressionType; - title: string; - description: string; -} - -@Injectable() -export class PolicyMultiExpressionService { - byId: LazyTranslation< - Map - >; - - constructor(private translateService: TranslateService) { - this.byId = new LazyTranslation(this.translateService, () => - this.buildByIdMap(), - ); - } - - getMultiExpressionConfig( - expressionType: UiPolicyExpressionType, - ): PolicyMultiExpressionConfig { - return ( - this.byId.getValue().get(expressionType) ?? - this.getFallbackMultiExpressionConfig(expressionType) - ); - } - - getSupportedMultiExpressions(): PolicyMultiExpressionConfig[] { - return [ - { - expressionType: 'AND', - title: 'AND', - description: - 'Conjunction of several expressions. Evaluates to true if and only if all child expressions are true', - }, - { - expressionType: 'OR', - title: 'OR', - description: - 'Disjunction of several expressions. Evaluates to true if and only if at least one child expression is true', - }, - { - expressionType: 'XONE', - title: 'XONE', - description: - 'XONE operation. Evaluates to true if and only if exactly one child expression is true', - }, - ]; - } - - private buildByIdMap(): Map< - UiPolicyExpressionType, - PolicyMultiExpressionConfig - > { - return associateBy( - this.getSupportedMultiExpressions(), - (it) => it.expressionType, - ); - } - - private getFallbackMultiExpressionConfig( - expressionType: UiPolicyExpressionType, - ) { - return { - expressionType, - title: expressionType, - description: '', - }; - } -} diff --git a/src/app/shared/business/policy-editor/model/policy-operators.ts b/src/app/shared/business/policy-editor/model/policy-operators.ts deleted file mode 100644 index e9722fcc1..000000000 --- a/src/app/shared/business/policy-editor/model/policy-operators.ts +++ /dev/null @@ -1,108 +0,0 @@ -import {Injectable} from '@angular/core'; -import {TranslateService} from '@ngx-translate/core'; -import {OperatorDto} from '@sovity.de/edc-client'; -import {LazyTranslation} from '../../../../core/utils/lazy-utils'; -import {associateBy} from '../../../../core/utils/map-utils'; - -export interface PolicyOperatorConfig { - id: OperatorDto; - title: string; - description: string; -} - -@Injectable() -export class PolicyOperatorService { - byId: LazyTranslation>; - - constructor(private translateService: TranslateService) { - this.byId = new LazyTranslation(this.translateService, () => - this.buildByIdMap(), - ); - } - - getOperatorConfig(operator: OperatorDto): PolicyOperatorConfig { - return ( - this.byId.getValue().get(operator) ?? - this.defaultPolicyOperatorConfig(operator) - ); - } - - getSupportedPolicyOperators(): PolicyOperatorConfig[] { - return [ - { - id: 'EQ', - title: '=', - description: 'Equal to', - }, - { - id: 'NEQ', - title: '≠', - description: 'Not equal to', - }, - { - id: 'GEQ', - title: '≥', - description: 'Greater than or equal to', - }, - { - id: 'GT', - title: '>', - description: 'Greater than', - }, - { - id: 'LEQ', - title: '≤', - description: 'Less than or equal to', - }, - { - id: 'LT', - title: '<', - description: 'Less than', - }, - { - id: 'IN', - title: 'IN', - description: 'In', - }, - { - id: 'HAS_PART', - title: 'HAS PART', - description: 'Has Part', - }, - { - id: 'IS_A', - title: 'IS A', - description: 'Is a', - }, - { - id: 'IS_NONE_OF', - title: 'IS NONE OF', - description: 'Is none of', - }, - { - id: 'IS_ANY_OF', - title: 'IS ANY OF', - description: 'Is any of', - }, - { - id: 'IS_ALL_OF', - title: 'IS ALL OF', - description: 'Is all of', - }, - ]; - } - - private buildByIdMap(): Map { - return associateBy(this.getSupportedPolicyOperators(), (it) => it.id); - } - - private defaultPolicyOperatorConfig( - operator: OperatorDto, - ): PolicyOperatorConfig { - return { - id: operator, - title: operator, - description: '', - }; - } -} diff --git a/src/app/shared/business/policy-editor/model/policy-verbs.ts b/src/app/shared/business/policy-editor/model/policy-verbs.ts deleted file mode 100644 index 013ec73d1..000000000 --- a/src/app/shared/business/policy-editor/model/policy-verbs.ts +++ /dev/null @@ -1,89 +0,0 @@ -import {Injectable} from '@angular/core'; -import {TranslateService} from '@ngx-translate/core'; -import {OperatorDto} from '@sovity.de/edc-client'; -import {LazyTranslation} from '../../../../core/utils/lazy-utils'; -import {associateBy} from '../../../../core/utils/map-utils'; -import { - PolicyFormAdapter, - jsonAdapter, - localDateAdapter, - stringArrayOrCommaJoinedAdapter, -} from './policy-form-adapter'; -import {policyLeftExpressions} from './policy-left-expressions'; -import {PolicyOperatorService} from './policy-operators'; - -export interface PolicyVerbConfig { - operandLeftId: string; - operandLeftTitle: string; - operandLeftDescription: string; - operandRightType: 'DATE' | 'TEXT' | 'PARTICIPANT_ID'; - operandRightHint?: string; - operandRightPlaceholder?: string; - supportedOperators: OperatorDto[]; - adapter: PolicyFormAdapter; -} - -@Injectable() -export class PolicyVerbService { - byId: LazyTranslation>; - - constructor( - private translateService: TranslateService, - private policyOperatorService: PolicyOperatorService, - ) { - this.byId = new LazyTranslation(this.translateService, () => - this.buildByIdMap(), - ); - } - - getVerbConfig(verb: string): PolicyVerbConfig { - return this.byId.getValue().get(verb) ?? this.getFallbackVerbConfig(verb); - } - - getFallbackVerbConfig(verb: string): PolicyVerbConfig { - return { - operandLeftId: verb, - operandLeftTitle: verb, - operandLeftDescription: '', - supportedOperators: this.policyOperatorService - .getSupportedPolicyOperators() - .map((it) => it.id), - operandRightType: 'TEXT', - adapter: jsonAdapter, - }; - } - - getSupportedPolicyVerbs(): PolicyVerbConfig[] { - return [ - { - operandLeftId: policyLeftExpressions.referringConnector, - operandLeftTitle: "Consumer's Participant ID", - operandLeftDescription: - "Consumer's Participant ID, also called Connector ID, of the counter-party connector.", - operandRightType: 'PARTICIPANT_ID', - supportedOperators: ['EQ', 'IN'], - operandRightPlaceholder: 'MDSL1234XX.C1234YY', - operandRightHint: 'Multiple values can be joined by comma', - adapter: stringArrayOrCommaJoinedAdapter, - }, - { - operandLeftId: policyLeftExpressions.policyEvaluationTime, - operandLeftTitle: 'Time Restriction', - operandLeftDescription: - 'Time at which the policy is evaluated. This can be used to restrict the data offer to certain time periods', - supportedOperators: ['GEQ', 'LEQ', 'GT', 'LT'], - operandRightType: 'DATE', - operandRightPlaceholder: 'DD/MM/YYYY', - operandRightHint: 'DD/MM/YYYY', - adapter: localDateAdapter, - }, - ]; - } - - private buildByIdMap(): Map { - return associateBy( - this.getSupportedPolicyVerbs(), - (it) => it.operandLeftId, - ); - } -} diff --git a/src/app/shared/business/policy-editor/model/tree.ts b/src/app/shared/business/policy-editor/model/tree.ts deleted file mode 100644 index e04e27e4c..000000000 --- a/src/app/shared/business/policy-editor/model/tree.ts +++ /dev/null @@ -1,162 +0,0 @@ -/** - * Tree data structure with a generic value type. - * - * The tree is mutable, but the TreeNode structure inside is immutable for better - * change detection. - */ -export class Tree { - constructor(public root: TreeNode, private _nextId: number) {} - - remove(path: string[]): void { - this.transform((node) => { - if (this.isEqualPath(node, path)) { - return null; - } - return node; - }); - } - - replaceTree( - path: string[], - value: I, - generatorFn: TreeGeneratorFn, - ): TreeNode { - const parentPath = path.slice(0, -1); - - const newNode = Tree.recursiveFoldNodes({ - parentPath, - original: value, - generatorFn, - idFactory: () => this.nextId(), - }); - - this.transform((node) => { - if (!this.isEqualPath(node, path)) { - return node; - } - - return newNode; - }); - - return newNode; - } - - push(parentPath: string[], value: T): TreeNode { - const id = this.nextId(); - const newNode: TreeNode = { - id, - path: [...parentPath, id], - value: value, - children: [], - }; - this.pushNode(parentPath, newNode); - return newNode; - } - - pushTree( - parentPath: string[], - value: I, - generatorFn: TreeGeneratorFn, - ): TreeNode { - const newNode = Tree.recursiveFoldNodes({ - parentPath, - original: value, - generatorFn, - idFactory: () => this.nextId(), - }); - this.pushNode(parentPath, newNode); - return newNode; - } - - private pushNode(parentPath: string[], newNode: TreeNode): void { - this.transform((node) => { - if (!this.isEqualPath(node, parentPath)) { - return node; - } - - return { - ...node, - children: [...node.children, newNode], - }; - }); - } - - private isEqualPath(node: TreeNode, path: string[]) { - return node.path.join('.') === path.join('.'); - } - - private transform(fn: (node: TreeNode) => TreeNode | null): void { - const transformNode = (node: TreeNode): TreeNode | null => { - const transformed = fn(node); - if (!transformed) { - return null; - } - return { - ...transformed, - children: transformed.children - .map(transformNode) - .filter((it) => it != null) as TreeNode[], - }; - }; - this.root = transformNode(this.root)!; - } - - private nextId() { - return String(this._nextId++); - } - - static ofTreeLikeStructure(opts: { - root: T; - generatorFn: TreeGeneratorFn; - }): Tree { - let currentId = 0; - const nextId = () => String(currentId++); - const rootNode = Tree.recursiveFoldNodes({ - parentPath: [], - original: opts.root, - generatorFn: opts.generatorFn, - idFactory: nextId, - }); - return new Tree(rootNode, currentId); - } - - private static recursiveFoldNodes(opts: { - parentPath: string[]; - original: T; - generatorFn: TreeGeneratorFn; - idFactory: () => string; - }): TreeNode { - const id = opts.idFactory(); - const {value, children} = opts.generatorFn(opts.original, id); - const path = [...opts.parentPath, id]; - const childrenMapped = children.map((child) => - Tree.recursiveFoldNodes({ - parentPath: path, - original: child, - generatorFn: opts.generatorFn, - idFactory: opts.idFactory, - }), - ); - return { - id, - path, - value, - children: childrenMapped, - }; - } -} - -export interface TreeNode { - path: string[]; - id: string; - value: T; - children: TreeNode[]; -} - -/** - * Mapper between a tree-like structure a dedicated TreeNode value type - */ -export type TreeGeneratorFn = ( - value: T, - id: string, -) => {value: R; children: T[]}; diff --git a/src/app/shared/business/policy-editor/model/ui-policy-expression-utils.ts b/src/app/shared/business/policy-editor/model/ui-policy-expression-utils.ts deleted file mode 100644 index 871537f1e..000000000 --- a/src/app/shared/business/policy-editor/model/ui-policy-expression-utils.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { - OperatorDto, - UiPolicyExpression, - UiPolicyExpressionType, -} from '@sovity.de/edc-client'; - -export const constraint = ( - left: string, - operator: OperatorDto, - value: string, -): UiPolicyExpression => ({ - type: 'CONSTRAINT', - constraint: { - left, - operator, - right: {type: 'STRING', value}, - }, -}); - -export const constraintList = ( - left: string, - operator: OperatorDto, - valueList: string[], -): UiPolicyExpression => ({ - type: 'CONSTRAINT', - constraint: { - left, - operator, - right: {type: 'STRING_LIST', valueList}, - }, -}); - -export const multi = ( - type: Exclude, - ...expressions: UiPolicyExpression[] -): UiPolicyExpression => ({ - type, - expressions, -}); diff --git a/src/app/shared/business/policy-editor/renderer/policy-expression/policy-expression.component.html b/src/app/shared/business/policy-editor/renderer/policy-expression/policy-expression.component.html deleted file mode 100644 index e1572b8d2..000000000 --- a/src/app/shared/business/policy-editor/renderer/policy-expression/policy-expression.component.html +++ /dev/null @@ -1,50 +0,0 @@ - -
Unrestricted
- - -
-
- {{ expression.multiExpression!.title }} -
-
-
- - -
-
-
- - -
- - {{ expression.verb!.operandLeftTitle }} - - - - {{ expression.operator!.title }} - - - {{ - expression.displayValue - }} -
diff --git a/src/app/shared/business/policy-editor/renderer/policy-expression/policy-expression.component.ts b/src/app/shared/business/policy-editor/renderer/policy-expression/policy-expression.component.ts deleted file mode 100644 index c709af69a..000000000 --- a/src/app/shared/business/policy-editor/renderer/policy-expression/policy-expression.component.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {Component, HostBinding, Input} from '@angular/core'; -import {PolicyExpressionMapped} from '../../model/policy-expression-mapped'; - -@Component({ - selector: 'policy-expression', - templateUrl: './policy-expression.component.html', -}) -export class PolicyExpressionComponent { - @HostBinding('class.flex') - @HostBinding('class.flex-col') - @HostBinding('class.justify-stretch') - cls = true; - - @Input() - expression!: PolicyExpressionMapped; -} diff --git a/src/app/shared/business/policy-editor/renderer/policy-renderer/policy-renderer.component.html b/src/app/shared/business/policy-editor/renderer/policy-renderer/policy-renderer.component.html deleted file mode 100644 index 7d3c0a116..000000000 --- a/src/app/shared/business/policy-editor/renderer/policy-renderer/policy-renderer.component.html +++ /dev/null @@ -1,6 +0,0 @@ -
-
- {{ error }} -
-
- diff --git a/src/app/shared/business/policy-editor/renderer/policy-renderer/policy-renderer.component.ts b/src/app/shared/business/policy-editor/renderer/policy-renderer/policy-renderer.component.ts deleted file mode 100644 index 42b0929e5..000000000 --- a/src/app/shared/business/policy-editor/renderer/policy-renderer/policy-renderer.component.ts +++ /dev/null @@ -1,14 +0,0 @@ -import {Component, Input} from '@angular/core'; -import {PolicyExpressionMapped} from '../../model/policy-expression-mapped'; - -@Component({ - selector: 'app-policy-renderer', - templateUrl: './policy-renderer.component.html', -}) -export class PolicyRendererComponent { - @Input() - expression!: PolicyExpressionMapped; - - @Input() - errors: string[] = []; -} diff --git a/src/app/shared/business/transfer-history-mini-list/transfer-history-mini-list.component.html b/src/app/shared/business/transfer-history-mini-list/transfer-history-mini-list.component.html deleted file mode 100644 index c343688fe..000000000 --- a/src/app/shared/business/transfer-history-mini-list/transfer-history-mini-list.component.html +++ /dev/null @@ -1,49 +0,0 @@ - - {{ 'component_library.no_transfer' | translate }} - -
- {{ - contractAgreement!.direction === 'PROVIDING' ? 'upload' : 'download' - }} - -
-
- - - - · - - - {{ transfer.state.name }} - {{ - transfer.state.name === 'CUSTOM' - ? ' (' + transfer.state.code + ')' - : '' - }} - - - - warning - - - - -
- - - {{ transfer.transferProcessId }} -
-
diff --git a/src/app/shared/business/transfer-history-mini-list/transfer-history-mini-list.component.ts b/src/app/shared/business/transfer-history-mini-list/transfer-history-mini-list.component.ts deleted file mode 100644 index cc4c92d49..000000000 --- a/src/app/shared/business/transfer-history-mini-list/transfer-history-mini-list.component.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {Component, HostBinding, Input} from '@angular/core'; -import {ContractAgreementCardMapped} from '../../../routes/connector-ui/contract-agreement-page/contract-agreement-cards/contract-agreement-card-mapped'; - -@Component({ - selector: 'transfer-history-mini-list', - templateUrl: 'transfer-history-mini-list.component.html', -}) -export class TransferHistoryMiniListComponent { - @Input() - contractAgreement!: ContractAgreementCardMapped; - - @HostBinding('class.flex') - @HostBinding('class.flex-col') - @HostBinding('class.space-y-[10px]') - cls = true; -} diff --git a/src/app/shared/common/ago/ago.component.ts b/src/app/shared/common/ago/ago.component.ts deleted file mode 100644 index 879656d9e..000000000 --- a/src/app/shared/common/ago/ago.component.ts +++ /dev/null @@ -1,18 +0,0 @@ -import {Component, Input} from '@angular/core'; - -/** - * Displays a date as estimated relative time (e.g. "3 days ago"). - * - * But also shows the full date as a tooltip. - */ -@Component({ - selector: 'ago', - template: `{{ date | ago | async }}`, -}) -export class AgoComponent { - @Input() - date?: Date | null; -} diff --git a/src/app/shared/common/ago/ago.pipe.ts b/src/app/shared/common/ago/ago.pipe.ts deleted file mode 100644 index 3b332b436..000000000 --- a/src/app/shared/common/ago/ago.pipe.ts +++ /dev/null @@ -1,22 +0,0 @@ -import {Pipe, PipeTransform} from '@angular/core'; -import {Observable, concat, interval, of} from 'rxjs'; -import {distinctUntilChanged, map} from 'rxjs/operators'; -import {TranslateService} from '@ngx-translate/core'; -import {formatDateAgo} from './formatDateAgo'; - -/** - * Displays a date as estimated relative time (e.g. "3 days ago"). - */ -@Pipe({name: 'ago'}) -export class AgoPipe implements PipeTransform { - interval$ = concat(of({}), interval(3000)); - - constructor(private translateService: TranslateService) {} - - transform(date?: Date | null): Observable { - return this.interval$.pipe( - map(() => formatDateAgo(date, this.translateService.currentLang)), - distinctUntilChanged(), - ); - } -} diff --git a/src/app/shared/common/ago/date-input.ts b/src/app/shared/common/ago/date-input.ts deleted file mode 100644 index 2f6676956..000000000 --- a/src/app/shared/common/ago/date-input.ts +++ /dev/null @@ -1 +0,0 @@ -export type DateInput = Date | string; diff --git a/src/app/shared/common/ago/formatDateAgo.ts b/src/app/shared/common/ago/formatDateAgo.ts deleted file mode 100644 index 21f070eb1..000000000 --- a/src/app/shared/common/ago/formatDateAgo.ts +++ /dev/null @@ -1,21 +0,0 @@ -import {formatDistanceToNow} from 'date-fns'; -import {de, enUS} from 'date-fns/locale'; -import {DateInput} from './date-input'; - -/** - * Formats date as "{n} {timeUnit} ago" or "in {n} {timeUnit}s". - * @param date date - */ -export function formatDateAgo( - date?: DateInput | null, - locale?: string, -): string { - if (!date) { - return 'never'; - } - if (typeof date === 'string') { - date = new Date(date); - } - const localeDateNfs = locale === 'de' ? de : enUS; - return formatDistanceToNow(date, {addSuffix: true, locale: localeDateNfs}); -} diff --git a/src/app/shared/common/confirmation-dialog/confirmation-dialog.component.html b/src/app/shared/common/confirmation-dialog/confirmation-dialog.component.html deleted file mode 100644 index 890b080f6..000000000 --- a/src/app/shared/common/confirmation-dialog/confirmation-dialog.component.html +++ /dev/null @@ -1,16 +0,0 @@ -

- {{ data.title }} -

- -
-

{{ data.message }}

-
- -
- - -
diff --git a/src/app/shared/common/confirmation-dialog/confirmation-dialog.component.scss b/src/app/shared/common/confirmation-dialog/confirmation-dialog.component.scss deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/app/shared/common/confirmation-dialog/confirmation-dialog.component.ts b/src/app/shared/common/confirmation-dialog/confirmation-dialog.component.ts deleted file mode 100644 index caaa35d0f..000000000 --- a/src/app/shared/common/confirmation-dialog/confirmation-dialog.component.ts +++ /dev/null @@ -1,87 +0,0 @@ -import {Component, Inject, OnInit} from '@angular/core'; -import {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog'; -import {TranslateService} from '@ngx-translate/core'; - -@Component({ - selector: 'app-confirmation-dialog', - templateUrl: './confirmation-dialog.component.html', - styleUrls: ['./confirmation-dialog.component.scss'], -}) -export class ConfirmationDialogComponent implements OnInit { - constructor( - public dialogRef: MatDialogRef, - @Inject(MAT_DIALOG_DATA) public data: ConfirmDialogModel, - ) {} - - ngOnInit(): void {} - - onCancel() { - this.dialogRef.close(false); - } - - onConfirm() { - this.dialogRef.close(true); - } -} - -export class ConfirmDialogModel { - private _confirmText: string = 'OK'; - private _cancelText: string = 'Cancel'; - private _cancelColor: 'accent' | 'warn' | 'primary' | '' = ''; - private _confirmColor: 'accent' | 'warn' | 'primary' | '' = ''; - - constructor(public title: string, public message: string) {} - - get cancelColor(): 'accent' | 'warn' | 'primary' | '' { - return this._cancelColor; - } - - set cancelColor(value: 'accent' | 'warn' | 'primary' | '') { - this._cancelColor = value; - } - - get confirmColor(): 'accent' | 'warn' | 'primary' | '' { - return this._confirmColor; - } - - set confirmColor(value: 'accent' | 'warn' | 'primary' | '') { - this._confirmColor = value; - } - - get cancelText(): string { - return this._cancelText; - } - - set cancelText(value: string) { - this._cancelText = value; - } - - get confirmText(): string { - return this._confirmText; - } - - set confirmText(value: string) { - this._confirmText = value; - } - - public static forDelete( - typeKey: string, - identifier: string, - translateService: TranslateService, - ): ConfirmDialogModel { - const dialogData = new ConfirmDialogModel( - `${translateService.instant('component_library.delete_title')}`, - `${translateService.instant( - 'component_library.delete_one', - )} ${translateService.instant( - typeKey, - )} ${identifier}. ${translateService.instant( - 'component_library.delete_two', - )}`, - ); - dialogData.confirmColor = 'warn'; - dialogData.confirmText = translateService.instant('general.delete'); - dialogData.cancelText = translateService.instant('general.close'); - return dialogData; - } -} diff --git a/src/app/shared/common/date/date.component.ts b/src/app/shared/common/date/date.component.ts deleted file mode 100644 index ca5791b00..000000000 --- a/src/app/shared/common/date/date.component.ts +++ /dev/null @@ -1,12 +0,0 @@ -import {Component, Input} from '@angular/core'; - -@Component({ - selector: 'date', - template: `{{ - date | date : 'yyyy-MM-dd' - }}`, -}) -export class DateComponent { - @Input() - date?: Date | null; -} diff --git a/src/app/shared/common/empty-state/empty-state.component.html b/src/app/shared/common/empty-state/empty-state.component.html deleted file mode 100644 index a72c3677c..000000000 --- a/src/app/shared/common/empty-state/empty-state.component.html +++ /dev/null @@ -1,3 +0,0 @@ -
- {{ emptyMessage }} -
diff --git a/src/app/shared/common/empty-state/empty-state.component.ts b/src/app/shared/common/empty-state/empty-state.component.ts deleted file mode 100644 index 672c7fe48..000000000 --- a/src/app/shared/common/empty-state/empty-state.component.ts +++ /dev/null @@ -1,18 +0,0 @@ -import {Component, HostBinding, Input} from '@angular/core'; - -@Component({ - selector: 'empty-state', - templateUrl: './empty-state.component.html', -}) -export class EmptyStateComponent { - @HostBinding('class.flex') - @HostBinding('class.flex-col') - @HostBinding('class.justify-center') - @HostBinding('class.items-center') - @HostBinding('class.uppercase') - @HostBinding('class.text-slate') - cls = true; - - @Input() - emptyMessage = ''; -} diff --git a/src/app/shared/common/error-state/error-state.component.html b/src/app/shared/common/error-state/error-state.component.html deleted file mode 100644 index cc1a84c9d..000000000 --- a/src/app/shared/common/error-state/error-state.component.html +++ /dev/null @@ -1,6 +0,0 @@ -{{ - error?.failureIcon -}} -
- {{ error?.failureMessage }} -
diff --git a/src/app/shared/common/error-state/error-state.component.ts b/src/app/shared/common/error-state/error-state.component.ts deleted file mode 100644 index 97f3b48fb..000000000 --- a/src/app/shared/common/error-state/error-state.component.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {Component, HostBinding, Input} from '@angular/core'; -import {FetchError} from '../../../core/services/models/fetched'; - -@Component({ - selector: 'error-state', - templateUrl: './error-state.component.html', -}) -export class ErrorStateComponent { - @HostBinding('class.flex') - @HostBinding('class.flex-col') - @HostBinding('class.justify-center') - @HostBinding('class.items-center') - cls = true; - - @Input() - error: FetchError | undefined; -} diff --git a/src/app/shared/common/horizontal-section-divider/horizontal-section-divider.component.html b/src/app/shared/common/horizontal-section-divider/horizontal-section-divider.component.html deleted file mode 100644 index c26641fef..000000000 --- a/src/app/shared/common/horizontal-section-divider/horizontal-section-divider.component.html +++ /dev/null @@ -1,7 +0,0 @@ -
-
- {{ text }} -
-
diff --git a/src/app/shared/common/horizontal-section-divider/horizontal-section-divider.component.ts b/src/app/shared/common/horizontal-section-divider/horizontal-section-divider.component.ts deleted file mode 100644 index 660458bca..000000000 --- a/src/app/shared/common/horizontal-section-divider/horizontal-section-divider.component.ts +++ /dev/null @@ -1,14 +0,0 @@ -import {Component, HostBinding, Input} from '@angular/core'; - -@Component({ - selector: 'horizontal-section-divider', - templateUrl: './horizontal-section-divider.component.html', -}) -export class HorizontalSectionDividerComponent { - @HostBinding('class.flex') - @HostBinding('class.items-center') - cls = true; - - @Input() - text: string = ''; -} diff --git a/src/app/shared/common/json-dialog/clean-json.ts b/src/app/shared/common/json-dialog/clean-json.ts deleted file mode 100644 index 91f3f6042..000000000 --- a/src/app/shared/common/json-dialog/clean-json.ts +++ /dev/null @@ -1,12 +0,0 @@ -import cleanDeep from 'clean-deep'; -import jsonStableStringify from 'json-stable-stringify'; - -/** - * Sorts keys, sorts array values, removes emtpy keys. - * - * @param json any JSON object - */ -export function cleanJson(json: T): Partial { - const cleaned = cleanDeep(json, {emptyStrings: false}); - return JSON.parse(jsonStableStringify(cleaned)); -} diff --git a/src/app/shared/common/json-dialog/json-dialog.component.html b/src/app/shared/common/json-dialog/json-dialog.component.html deleted file mode 100644 index d951c326d..000000000 --- a/src/app/shared/common/json-dialog/json-dialog.component.html +++ /dev/null @@ -1,58 +0,0 @@ -
-
- - {{ data.icon }} - -
-
- {{ data.title }} -
-
- {{ data.subtitle }} -
-
-
- -
- -
- -
- -
-
- - {{ 'component_library.json' | translate }} - -
-
- -
-
diff --git a/src/app/shared/common/json-dialog/json-dialog.component.ts b/src/app/shared/common/json-dialog/json-dialog.component.ts deleted file mode 100644 index fa37b260c..000000000 --- a/src/app/shared/common/json-dialog/json-dialog.component.ts +++ /dev/null @@ -1,92 +0,0 @@ -import { - AfterViewInit, - Component, - ElementRef, - Inject, - OnDestroy, - OnInit, - ViewChild, -} from '@angular/core'; -import { - MAT_DIALOG_DATA, - MatDialog, - MatDialogRef, -} from '@angular/material/dialog'; -import {Subject} from 'rxjs'; -import {filter, finalize, takeUntil} from 'rxjs/operators'; -import {NgxJsonViewerComponent} from 'ngx-json-viewer'; -import {ConfirmationDialogComponent} from '../confirmation-dialog/confirmation-dialog.component'; -import {cleanJson} from './clean-json'; -import {DialogToolbarButton, JsonDialogData} from './json-dialog.data'; - -@Component({ - selector: 'app-json-dialog', - templateUrl: './json-dialog.component.html', -}) -export class JsonDialogComponent implements OnInit, AfterViewInit, OnDestroy { - busy = false; - - removeNulls = true; - - visibleJson: unknown = {}; - - @ViewChild(NgxJsonViewerComponent, {read: ElementRef}) - jsonViewer!: ElementRef; - - constructor( - public dialogRef: MatDialogRef, - private matDialog: MatDialog, - @Inject(MAT_DIALOG_DATA) public data: JsonDialogData, - ) {} - - ngOnInit() { - this.updateVisibleJson(); - } - - ngAfterViewInit() { - this.jsonViewer.nativeElement.scrollIntoView(); - } - - updateVisibleJson() { - this.visibleJson = this.removeNulls - ? cleanJson(this.data.objectForJson) - : this.data.objectForJson; - } - - onAction(button: DialogToolbarButton) { - if (button.confirmation) { - const ref = this.matDialog.open(ConfirmationDialogComponent, { - maxWidth: '20%', - data: button.confirmation, - }); - - ref - .afterClosed() - .pipe(filter((it) => it)) - .subscribe(() => this.doAction(button)); - } else { - this.doAction(button); - } - } - - doAction(button: DialogToolbarButton) { - if (this.busy) { - return; - } - this.busy = true; - button - .action() - .pipe( - finalize(() => (this.busy = false)), - takeUntil(this.ngOnDestroy$), - ) - .subscribe(); - } - - ngOnDestroy$ = new Subject(); - - ngOnDestroy(): void { - this.ngOnDestroy$.next(null); - this.ngOnDestroy$.complete(); - } -} diff --git a/src/app/shared/common/json-dialog/json-dialog.data.ts b/src/app/shared/common/json-dialog/json-dialog.data.ts deleted file mode 100644 index 00f5abe87..000000000 --- a/src/app/shared/common/json-dialog/json-dialog.data.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {Observable} from 'rxjs'; -import {ConfirmDialogModel} from '../confirmation-dialog/confirmation-dialog.component'; - -export interface JsonDialogData { - title: string; - subtitle: string; - icon: string; - objectForJson: unknown; - toolbarButton?: DialogToolbarButton; -} - -export interface DialogToolbarButton { - text: string; - icon: string; - action: () => Observable | any; - confirmation?: ConfirmDialogModel; -} diff --git a/src/app/shared/common/json-dialog/json-dialog.service.ts b/src/app/shared/common/json-dialog/json-dialog.service.ts deleted file mode 100644 index 65b54a61e..000000000 --- a/src/app/shared/common/json-dialog/json-dialog.service.ts +++ /dev/null @@ -1,28 +0,0 @@ -import {Injectable} from '@angular/core'; -import {MatDialog} from '@angular/material/dialog'; -import {NEVER, Observable} from 'rxjs'; -import {showDialogUntil} from '../../../core/utils/mat-dialog-utils'; -import {JsonDialogComponent} from './json-dialog.component'; -import {JsonDialogData} from './json-dialog.data'; - -@Injectable() -export class JsonDialogService { - constructor(private dialog: MatDialog) {} - - /** - * Shows JSON Detail Dialog until until$ emits / completes - * @param data json detail dialog data - * @param until$ observable that controls the lifetime of the dialog - */ - showJsonDetailDialog( - data: JsonDialogData, - until$: Observable = NEVER, - ): Observable { - return showDialogUntil( - this.dialog, - JsonDialogComponent, - {data, autoFocus: 'first-tabbable'}, - until$, - ); - } -} diff --git a/src/app/shared/common/language-selector/language-selector.component.html b/src/app/shared/common/language-selector/language-selector.component.html deleted file mode 100644 index 9137fcba1..000000000 --- a/src/app/shared/common/language-selector/language-selector.component.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - diff --git a/src/app/shared/common/language-selector/language-selector.component.ts b/src/app/shared/common/language-selector/language-selector.component.ts deleted file mode 100644 index eb2da2ad9..000000000 --- a/src/app/shared/common/language-selector/language-selector.component.ts +++ /dev/null @@ -1,37 +0,0 @@ -import {Component, OnInit} from '@angular/core'; -import {TranslateService} from '@ngx-translate/core'; -import { - AvailableLanguage, - isLanguageSupported, - supportedLanguages, -} from 'src/app/core/utils/i18n-utils'; -import {LocalStoredValue} from '../../../core/utils/local-stored-value'; - -@Component({ - selector: 'app-language-selector', - templateUrl: './language-selector.component.html', -}) -export class LanguageSelectorComponent implements OnInit { - selectedLanguage = new LocalStoredValue( - 'en', - 'selectedLanguage', - isLanguageSupported, - ); - - supportedLanguages = supportedLanguages; - - constructor(private translateService: TranslateService) {} - - ngOnInit(): void { - this.updateSelectedLanguage(); - } - - setSelectedLanguage(language: AvailableLanguage) { - this.selectedLanguage.value = language.code; - this.updateSelectedLanguage(); - } - - updateSelectedLanguage() { - this.translateService.use(this.selectedLanguage.value); - } -} diff --git a/src/app/shared/common/loading-state/loading-state.component.html b/src/app/shared/common/loading-state/loading-state.component.html deleted file mode 100644 index fc8f828b5..000000000 --- a/src/app/shared/common/loading-state/loading-state.component.html +++ /dev/null @@ -1,6 +0,0 @@ - - diff --git a/src/app/shared/common/loading-state/loading-state.component.ts b/src/app/shared/common/loading-state/loading-state.component.ts deleted file mode 100644 index 3f3bc162d..000000000 --- a/src/app/shared/common/loading-state/loading-state.component.ts +++ /dev/null @@ -1,13 +0,0 @@ -import {Component, HostBinding} from '@angular/core'; - -@Component({ - selector: 'loading-state', - templateUrl: './loading-state.component.html', -}) -export class LoadingStateComponent { - @HostBinding('class.flex') - @HostBinding('class.flex-col') - @HostBinding('class.justify-center') - @HostBinding('class.items-center') - cls = true; -} diff --git a/src/app/shared/common/markdown-description/markdown-description.component.html b/src/app/shared/common/markdown-description/markdown-description.component.html deleted file mode 100644 index a97a6d460..000000000 --- a/src/app/shared/common/markdown-description/markdown-description.component.html +++ /dev/null @@ -1,46 +0,0 @@ -
-
- - {{ - 'component_library.no_description' | translate - }} - -
-
- - diff --git a/src/app/shared/common/markdown-description/markdown-description.component.ts b/src/app/shared/common/markdown-description/markdown-description.component.ts deleted file mode 100644 index 052f1f962..000000000 --- a/src/app/shared/common/markdown-description/markdown-description.component.ts +++ /dev/null @@ -1,70 +0,0 @@ -import { - AfterViewInit, - ChangeDetectorRef, - Component, - ElementRef, - HostBinding, - Input, - OnChanges, - OnInit, - ViewChild, -} from '@angular/core'; -import {HtmlSanitizer} from 'src/app/core/services/html-sanitizer'; -import {MarkdownConverter} from 'src/app/core/services/markdown-converter'; -import {SimpleChangesTyped} from '../../../core/utils/angular-utils'; - -const COLLAPSED_DESCRIPTION_HEIGHT = 280; - -@Component({ - selector: 'markdown-description', - templateUrl: './markdown-description.component.html', -}) -export class MarkdownDescriptionComponent - implements OnInit, OnChanges, AfterViewInit -{ - @HostBinding('class.block') cls = true; - @Input() description: string | undefined; - @ViewChild('content') elementView!: ElementRef; - isLargeDescription = false; - collapsedDescriptionHeight!: number; - - get isCollapsed(): boolean { - return this.isLargeDescription && this.collapsed; - } - - private collapsed = true; - private isAfterViewInit = false; - - constructor( - private cd: ChangeDetectorRef, - public markdownConverter: MarkdownConverter, - public htmlSanitizer: HtmlSanitizer, - ) {} - - ngOnInit(): void { - this.collapsedDescriptionHeight = COLLAPSED_DESCRIPTION_HEIGHT; - } - - ngOnChanges(changes: SimpleChangesTyped) { - if (changes.description && this.isAfterViewInit) { - // We need to wait for the changes to apply first. - // setTimeout(..., 0) appends the task to the end of the microtask queue - setTimeout(() => this.recalculateShowMore(), 0); - } - } - - ngAfterViewInit() { - this.isAfterViewInit = true; - this.recalculateShowMore(); - this.cd.detectChanges(); - } - - onToggleShowMore() { - this.collapsed = !this.collapsed; - } - - private recalculateShowMore() { - const contentHeight = this.elementView.nativeElement.offsetHeight; - this.isLargeDescription = contentHeight > this.collapsedDescriptionHeight; - } -} diff --git a/src/app/shared/common/property-grid-group/property-grid-group.component.html b/src/app/shared/common/property-grid-group/property-grid-group.component.html deleted file mode 100644 index 7d2ee5de2..000000000 --- a/src/app/shared/common/property-grid-group/property-grid-group.component.html +++ /dev/null @@ -1,15 +0,0 @@ - - -
- {{ propGroup.groupLabel }} -
- -
diff --git a/src/app/shared/common/property-grid-group/property-grid-group.component.ts b/src/app/shared/common/property-grid-group/property-grid-group.component.ts deleted file mode 100644 index 21fde5b1d..000000000 --- a/src/app/shared/common/property-grid-group/property-grid-group.component.ts +++ /dev/null @@ -1,19 +0,0 @@ -import {Component, HostBinding, Input} from '@angular/core'; -import {PropertyGridGroup} from './property-grid-group'; - -@Component({ - selector: 'property-grid-group', - templateUrl: './property-grid-group.component.html', -}) -export class PropertyGridGroupComponent { - @Input() - propGroups: PropertyGridGroup[] = []; - - @Input() - columns: number = 3; - - @HostBinding('class.flex') - @HostBinding('class.flex-col') - @HostBinding('class.justify-start') - cls = true; -} diff --git a/src/app/shared/common/property-grid-group/property-grid-group.ts b/src/app/shared/common/property-grid-group/property-grid-group.ts deleted file mode 100644 index 0588b938a..000000000 --- a/src/app/shared/common/property-grid-group/property-grid-group.ts +++ /dev/null @@ -1,6 +0,0 @@ -import {PropertyGridField} from '../property-grid/property-grid-field'; - -export interface PropertyGridGroup { - groupLabel: string | null; - properties: PropertyGridField[]; -} diff --git a/src/app/shared/common/property-grid/property-grid-field.service.ts b/src/app/shared/common/property-grid/property-grid-field.service.ts deleted file mode 100644 index c14dd4bb3..000000000 --- a/src/app/shared/common/property-grid/property-grid-field.service.ts +++ /dev/null @@ -1,35 +0,0 @@ -import {formatDate} from '@angular/common'; -import {Inject, Injectable, LOCALE_ID} from '@angular/core'; -import {validUrlPattern} from '../../../core/validators/url-validator'; -import {PropertyGridField} from './property-grid-field'; - -@Injectable({providedIn: 'root'}) -export class PropertyGridFieldService { - constructor(@Inject(LOCALE_ID) private locale: string) {} - - guessValue( - value: string | null | undefined, - ): Pick { - return { - text: value || '-', - url: value?.match(validUrlPattern) ? value : undefined, - additionalClasses: value?.includes(' ') ? undefined : 'break-all', - }; - } - - formatDateWithTime(date: Date | null | undefined): string { - if (!date) { - return ''; - } - - return formatDate(date, 'dd/MM/yyyy HH:mm:ss', this.locale); - } - - formatDate(date: Date | null | undefined): string { - if (!date) { - return ''; - } - - return formatDate(date, 'dd/MM/yyyy', this.locale); - } -} diff --git a/src/app/shared/common/property-grid/property-grid-field.ts b/src/app/shared/common/property-grid/property-grid-field.ts deleted file mode 100644 index 703024439..000000000 --- a/src/app/shared/common/property-grid/property-grid-field.ts +++ /dev/null @@ -1,50 +0,0 @@ -import {PolicyExpressionMapped} from '../../business/policy-editor/model/policy-expression-mapped'; - -export interface PropertyGridField { - icon: string; - - /** - * Title of Property - */ - label: string; - - /** - * Adds "title"-Attribute to Label HTML Element - */ - labelTitle?: string; - - /** - * Property Value - */ - text?: string; - - url?: string; - onclick?: () => void; - - /** - * Additional classes for the value text. - */ - additionalClasses?: string; - - /** - * Additional classes for the container - */ - additionalContainerClasses?: string; - - /** - * Additional classes for the icon. - */ - additionalIconClasses?: string; - - copyButton?: boolean; - tooltip?: string | null; - textIconAfter?: string | null; - - policy?: PolicyExpressionMapped; - policyErrors?: string[]; - - /** - * Hide text - */ - hideFieldValue?: boolean; -} diff --git a/src/app/shared/common/property-grid/property-grid.component.html b/src/app/shared/common/property-grid/property-grid.component.html deleted file mode 100644 index 9d89d46b2..000000000 --- a/src/app/shared/common/property-grid/property-grid.component.html +++ /dev/null @@ -1,77 +0,0 @@ - -
- - - {{ prop.icon }} - -
- -
- {{ prop.label }} -
- - Show {{ prop.label }} - - - - - - {{ prop.text }} - - {{ prop.text }} - - - {{ prop.text }} - - {{ prop.textIconAfter }} - - - -
- -
diff --git a/src/app/shared/common/property-grid/property-grid.component.ts b/src/app/shared/common/property-grid/property-grid.component.ts deleted file mode 100644 index bed8a0e6e..000000000 --- a/src/app/shared/common/property-grid/property-grid.component.ts +++ /dev/null @@ -1,20 +0,0 @@ -import {Component, HostBinding, Input, TrackByFunction} from '@angular/core'; -import {PropertyGridField} from './property-grid-field'; - -@Component({ - selector: 'property-grid', - templateUrl: './property-grid.component.html', -}) -export class PropertyGridComponent { - @Input() - props: PropertyGridField[] = []; - - @Input() - columns: number = 3; - @HostBinding('class.grid') - @HostBinding('class.grid-cols-3') - @HostBinding('class.gap-[10px]') - cls = true; - - trackByIndex: TrackByFunction = (index: number) => index; -} diff --git a/src/app/shared/common/translate-with-slot/translate-with-slot.component.html b/src/app/shared/common/translate-with-slot/translate-with-slot.component.html deleted file mode 100644 index e016fac12..000000000 --- a/src/app/shared/common/translate-with-slot/translate-with-slot.component.html +++ /dev/null @@ -1,7 +0,0 @@ -{{ textBefore }} - - - - -{{ textAfter }} - diff --git a/src/app/shared/common/translate-with-slot/translate-with-slot.component.ts b/src/app/shared/common/translate-with-slot/translate-with-slot.component.ts deleted file mode 100644 index f84f543df..000000000 --- a/src/app/shared/common/translate-with-slot/translate-with-slot.component.ts +++ /dev/null @@ -1,54 +0,0 @@ -import {Component, Input, OnChanges, OnDestroy} from '@angular/core'; -import {Subject, switchMap} from 'rxjs'; -import {takeUntil} from 'rxjs/operators'; -import {TranslateService} from '@ngx-translate/core'; -import {SimpleChangesTyped} from '../../../core/utils/angular-utils'; - -@Component({ - selector: 'translate-with-slot', - templateUrl: './translate-with-slot.component.html', -}) -export class TranslateWithSlotComponent implements OnChanges, OnDestroy { - @Input() - key!: string; - - @Input() - html = false; - - key$ = new Subject(); - - textBefore = ''; - hasMiddle = false; - textAfter = ''; - - constructor(private translationService: TranslateService) { - this.splitText(); - } - - splitText() { - this.key$ - .pipe( - switchMap(() => this.translationService.stream(this.key)), - takeUntil(this.ngOnDestroy$), - ) - .subscribe((text) => { - const parts = text.split('{}'); - this.textBefore = parts[0]; - this.hasMiddle = parts.length > 1; - this.textAfter = parts[1] || ''; - }); - } - - ngOnChanges(changes: SimpleChangesTyped) { - if (changes.key) { - this.key$.next(changes.key); - } - } - - ngOnDestroy$ = new Subject(); - - ngOnDestroy() { - this.ngOnDestroy$.next(null); - this.ngOnDestroy$.complete(); - } -} diff --git a/src/app/shared/common/truncated-short-description/truncated-short-description.component.html b/src/app/shared/common/truncated-short-description/truncated-short-description.component.html deleted file mode 100644 index ad639bb03..000000000 --- a/src/app/shared/common/truncated-short-description/truncated-short-description.component.html +++ /dev/null @@ -1 +0,0 @@ -{{ text || ('component_library.no_description' | translate) }} diff --git a/src/app/shared/common/truncated-short-description/truncated-short-description.component.ts b/src/app/shared/common/truncated-short-description/truncated-short-description.component.ts deleted file mode 100644 index c9f055643..000000000 --- a/src/app/shared/common/truncated-short-description/truncated-short-description.component.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {Component, HostBinding, Input} from '@angular/core'; - -@Component({ - selector: 'truncated-short-description', - templateUrl: './truncated-short-description.component.html', -}) -export class TruncatedShortDescription { - @Input() text!: string | undefined; - @HostBinding('class.whitespace-pre-line') - @HostBinding('class.line-clamp-5') - cls = true; - @HostBinding('class.italic') - get italic(): boolean { - return !this.text; - } -} diff --git a/src/app/shared/common/url-list-dialog/url-list-dialog.component.html b/src/app/shared/common/url-list-dialog/url-list-dialog.component.html deleted file mode 100644 index 9b29e28cc..000000000 --- a/src/app/shared/common/url-list-dialog/url-list-dialog.component.html +++ /dev/null @@ -1,42 +0,0 @@ -
-
- - {{ data.icon }} - -
-
- {{ data.title }} -
-
- {{ data.subtitle }} -
-
-
-
- -
-
-
{{ 'general.description' | translate }}
- -
- -
-
URLs
-
    -
  1. - {{ url }} -
  2. -
-
-
- -
- -
diff --git a/src/app/shared/common/url-list-dialog/url-list-dialog.component.ts b/src/app/shared/common/url-list-dialog/url-list-dialog.component.ts deleted file mode 100644 index 1934dc154..000000000 --- a/src/app/shared/common/url-list-dialog/url-list-dialog.component.ts +++ /dev/null @@ -1,14 +0,0 @@ -import {Component, Inject} from '@angular/core'; -import {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog'; -import {UrlListDialogData} from './url-list-dialog.data'; - -@Component({ - selector: 'app-json-dialog', - templateUrl: './url-list-dialog.component.html', -}) -export class UrlListDialogComponent { - constructor( - public dialogRef: MatDialogRef, - @Inject(MAT_DIALOG_DATA) public data: UrlListDialogData, - ) {} -} diff --git a/src/app/shared/common/url-list-dialog/url-list-dialog.data.ts b/src/app/shared/common/url-list-dialog/url-list-dialog.data.ts deleted file mode 100644 index d4b5c4076..000000000 --- a/src/app/shared/common/url-list-dialog/url-list-dialog.data.ts +++ /dev/null @@ -1,7 +0,0 @@ -export interface UrlListDialogData { - title: string; - subtitle: string; - icon: string; - urls: string[]; - description?: string; -} diff --git a/src/app/shared/common/url-list-dialog/url-list-dialog.service.ts b/src/app/shared/common/url-list-dialog/url-list-dialog.service.ts deleted file mode 100644 index 091bd9c5f..000000000 --- a/src/app/shared/common/url-list-dialog/url-list-dialog.service.ts +++ /dev/null @@ -1,28 +0,0 @@ -import {Injectable} from '@angular/core'; -import {MatDialog} from '@angular/material/dialog'; -import {NEVER, Observable} from 'rxjs'; -import {showDialogUntil} from '../../../core/utils/mat-dialog-utils'; -import {UrlListDialogComponent} from './url-list-dialog.component'; -import {UrlListDialogData} from './url-list-dialog.data'; - -@Injectable() -export class UrlListDialogService { - constructor(private dialog: MatDialog) {} - - /** - * Shows JSON Detail Dialog until until$ emits / completes - * @param data json detail dialog data - * @param until$ observable that controls the lifetime of the dialog - */ - showUrlListDialog( - data: UrlListDialogData, - until$: Observable = NEVER, - ): Observable { - return showDialogUntil( - this.dialog, - UrlListDialogComponent, - {data, autoFocus: false}, - until$, - ); - } -} diff --git a/src/app/shared/form-elements/data-address-type-select/data-address-type-select-item.ts b/src/app/shared/form-elements/data-address-type-select/data-address-type-select-item.ts deleted file mode 100644 index 98d4b3dfd..000000000 --- a/src/app/shared/form-elements/data-address-type-select/data-address-type-select-item.ts +++ /dev/null @@ -1,6 +0,0 @@ -import {DataAddressType} from './data-address-type'; - -export interface DataAddressTypeSelectItem { - id: DataAddressType; - label: string; -} diff --git a/src/app/shared/form-elements/data-address-type-select/data-address-type-select-items.ts b/src/app/shared/form-elements/data-address-type-select/data-address-type-select-items.ts deleted file mode 100644 index 94191e27c..000000000 --- a/src/app/shared/form-elements/data-address-type-select/data-address-type-select-items.ts +++ /dev/null @@ -1,37 +0,0 @@ -import {ActiveFeatureSet} from 'src/app/core/config/active-feature-set'; -import {DataAddressTypeSelectItem} from './data-address-type-select-item'; -import {DataAddressTypeSelectMode} from './data-address-type-select-mode'; - -export const dataAddressTypeSelectItems = ( - type: DataAddressTypeSelectMode, - activeFeatureSet: ActiveFeatureSet, -): DataAddressTypeSelectItem[] => { - const items: DataAddressTypeSelectItem[] = []; - - if (type.startsWith('Datasource') && activeFeatureSet.hasMdsFields()) { - items.push({ - id: 'On-Request', - label: '"On Request" Data Offer', - }); - } - - items.push( - { - id: 'Http', - label: 'REST-API Endpoint', - }, - { - id: 'Custom-Data-Address-Json', - label: `Custom ${type} Config (JSON)`, - }, - ); - - if (type === 'Datasink') { - items.push({ - id: 'Custom-Transfer-Process-Request', - label: 'Custom Transfer Process Request (JSON)', - }); - } - - return items; -}; diff --git a/src/app/shared/form-elements/data-address-type-select/data-address-type-select-mode.ts b/src/app/shared/form-elements/data-address-type-select/data-address-type-select-mode.ts deleted file mode 100644 index 2a9413fc7..000000000 --- a/src/app/shared/form-elements/data-address-type-select/data-address-type-select-mode.ts +++ /dev/null @@ -1 +0,0 @@ -export type DataAddressTypeSelectMode = 'Datasource-Create' | 'Datasink'; diff --git a/src/app/shared/form-elements/data-address-type-select/data-address-type-select.component.html b/src/app/shared/form-elements/data-address-type-select/data-address-type-select.component.html deleted file mode 100644 index 4785f7e1f..000000000 --- a/src/app/shared/form-elements/data-address-type-select/data-address-type-select.component.html +++ /dev/null @@ -1,9 +0,0 @@ - - {{ label }} - - - - {{ item.label }} - - - diff --git a/src/app/shared/form-elements/data-address-type-select/data-address-type-select.component.ts b/src/app/shared/form-elements/data-address-type-select/data-address-type-select.component.ts deleted file mode 100644 index 816c93863..000000000 --- a/src/app/shared/form-elements/data-address-type-select/data-address-type-select.component.ts +++ /dev/null @@ -1,35 +0,0 @@ -import {Component, HostBinding, Input, OnChanges} from '@angular/core'; -import {FormControl} from '@angular/forms'; -import {ActiveFeatureSet} from 'src/app/core/config/active-feature-set'; -import {SimpleChangesTyped} from '../../../core/utils/angular-utils'; -import {DataAddressType} from './data-address-type'; -import {dataAddressTypeSelectItems} from './data-address-type-select-items'; -import {DataAddressTypeSelectMode} from './data-address-type-select-mode'; - -@Component({ - selector: 'data-address-type-select', - templateUrl: 'data-address-type-select.component.html', -}) -export class DataAddressTypeSelectComponent implements OnChanges { - @Input() - label!: string; - - @Input() - control!: FormControl; - - @HostBinding('class.flex') - @HostBinding('class.flex-row') - cls = true; - - @Input() - mode: DataAddressTypeSelectMode = 'Datasource-Create'; - - constructor(private activeFeatureSet: ActiveFeatureSet) {} - - items = dataAddressTypeSelectItems(this.mode, this.activeFeatureSet); - ngOnChanges(changes: SimpleChangesTyped) { - if (changes.mode) { - this.items = dataAddressTypeSelectItems(this.mode, this.activeFeatureSet); - } - } -} diff --git a/src/app/shared/form-elements/data-address-type-select/data-address-type.ts b/src/app/shared/form-elements/data-address-type-select/data-address-type.ts deleted file mode 100644 index 3699d0f80..000000000 --- a/src/app/shared/form-elements/data-address-type-select/data-address-type.ts +++ /dev/null @@ -1,6 +0,0 @@ -export type DataAddressType = - | 'Unchanged' - | 'Custom-Data-Address-Json' - | 'Custom-Transfer-Process-Request' - | 'On-Request' - | 'Http'; diff --git a/src/app/shared/form-elements/data-category-select/data-category-select-data.ts b/src/app/shared/form-elements/data-category-select/data-category-select-data.ts deleted file mode 100644 index 611e3f020..000000000 --- a/src/app/shared/form-elements/data-category-select/data-category-select-data.ts +++ /dev/null @@ -1,48 +0,0 @@ -import {DataCategorySelectItem} from './data-category-select-item'; - -export const DATA_CATEGORY_SELECT_DATA: DataCategorySelectItem[] = [ - { - id: 'Traffic Information', - label: 'Traffic Information', - }, - { - id: 'Roadworks and Road Conditions', - label: 'Roadworks and Road Conditions', - }, - { - id: 'Traffic Flow Information', - label: 'Traffic Flow Information', - }, - { - id: 'Parking Information', - label: 'Parking Information', - }, - { - id: 'Electromobility', - label: 'Electromobility', - }, - { - id: 'Traffic Signs and Speed Information', - label: 'Traffic Signs and Speed Information', - }, - { - id: 'Weather Information', - label: 'Weather Information', - }, - { - id: 'Public Transport Information', - label: 'Public Transport Information', - }, - { - id: 'Shared and On-Demand Mobility', - label: 'Shared and On-Demand Mobility', - }, - { - id: 'Infrastructure and Logistics', - label: 'Infrastructure and Logistics', - }, - { - id: 'Various', - label: 'Various', - }, -]; diff --git a/src/app/shared/form-elements/data-category-select/data-category-select-item.service.ts b/src/app/shared/form-elements/data-category-select/data-category-select-item.service.ts deleted file mode 100644 index 2a4d27614..000000000 --- a/src/app/shared/form-elements/data-category-select/data-category-select-item.service.ts +++ /dev/null @@ -1,34 +0,0 @@ -import {Injectable} from '@angular/core'; -import {DATA_CATEGORY_SELECT_DATA} from './data-category-select-data'; -import {DataCategorySelectItem} from './data-category-select-item'; - -/** - * Access list of available DataCategorySelectItems - */ -@Injectable({providedIn: 'root'}) -export class DataCategorySelectItemService { - itemsById: Map; - - constructor() { - this.itemsById = this.buildItemsMap(); - } - - /** - * Find DataCategorySelectItem by id - * @param id language select item id - */ - findById(id: string): DataCategorySelectItem { - const item = this.itemsById.get(id); - if (item != null) { - return item; - } - return { - id, - label: id, - }; - } - - private buildItemsMap(): Map { - return new Map(DATA_CATEGORY_SELECT_DATA.map((it) => [it.id, it])); - } -} diff --git a/src/app/shared/form-elements/data-category-select/data-category-select-item.ts b/src/app/shared/form-elements/data-category-select/data-category-select-item.ts deleted file mode 100644 index dbf30de59..000000000 --- a/src/app/shared/form-elements/data-category-select/data-category-select-item.ts +++ /dev/null @@ -1,4 +0,0 @@ -export interface DataCategorySelectItem { - id: string; - label: string; -} diff --git a/src/app/shared/form-elements/data-category-select/data-category-select.component.html b/src/app/shared/form-elements/data-category-select/data-category-select.component.html deleted file mode 100644 index 9bce0ab73..000000000 --- a/src/app/shared/form-elements/data-category-select/data-category-select.component.html +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - {{ item.label }} - - - diff --git a/src/app/shared/form-elements/data-category-select/data-category-select.component.ts b/src/app/shared/form-elements/data-category-select/data-category-select.component.ts deleted file mode 100644 index b19189147..000000000 --- a/src/app/shared/form-elements/data-category-select/data-category-select.component.ts +++ /dev/null @@ -1,18 +0,0 @@ -import {Component, Input} from '@angular/core'; -import {FormControl} from '@angular/forms'; -import {DATA_CATEGORY_SELECT_DATA} from './data-category-select-data'; -import {DataCategorySelectItem} from './data-category-select-item'; - -@Component({ - selector: 'data-category-select', - templateUrl: 'data-category-select.component.html', -}) -export class DataCategorySelectComponent { - @Input() - label!: string; - - @Input() - control!: FormControl; - - items = DATA_CATEGORY_SELECT_DATA; -} diff --git a/src/app/shared/form-elements/data-subcategory-select/data-subcategory-items.pipe.ts b/src/app/shared/form-elements/data-subcategory-select/data-subcategory-items.pipe.ts deleted file mode 100644 index 00c8b8c18..000000000 --- a/src/app/shared/form-elements/data-subcategory-select/data-subcategory-items.pipe.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {Pipe, PipeTransform} from '@angular/core'; -import {DataCategorySelectItem} from '../data-category-select/data-category-select-item'; -import {DataSubcategorySelectItem} from './data-subcategory-select-item'; -import {DataSubcategorySelectItemService} from './data-subcategory-select-item.service'; - -@Pipe({ - name: 'dataSubcategoryItems', -}) -export class DataSubcategoryItemsPipe implements PipeTransform { - constructor(private items: DataSubcategorySelectItemService) {} - - transform( - dataCategory: DataCategorySelectItem | null, - ): DataSubcategorySelectItem[] { - return this.items.findByDataCategory(dataCategory); - } -} diff --git a/src/app/shared/form-elements/data-subcategory-select/data-subcategory-select-data.ts b/src/app/shared/form-elements/data-subcategory-select/data-subcategory-select-data.ts deleted file mode 100644 index ebe31cdc8..000000000 --- a/src/app/shared/form-elements/data-subcategory-select/data-subcategory-select-data.ts +++ /dev/null @@ -1,189 +0,0 @@ -import {DataSubcategorySelectItem} from './data-subcategory-select-item'; - -export const DATA_SUBCATEGORY_SELECT_DATA: DataSubcategorySelectItem[] = [ - { - id: 'Accidents', - dataCategoryId: 'Traffic Information', - label: 'Accidents', - }, - - { - id: 'Hazard Warnings', - dataCategoryId: 'Traffic Information', - label: 'Hazard Warnings', - }, - - { - id: 'Roadworks', - dataCategoryId: 'Roadworks and Road Conditions', - label: 'Roadworks', - }, - - { - id: 'Road Conditions', - dataCategoryId: 'Roadworks and Road Conditions', - label: 'Road Conditions', - }, - - { - id: 'Realtime Traffic Flow Data', - dataCategoryId: 'Traffic Flow Information', - label: 'Realtime Traffic Flow Data', - }, - - { - id: 'Forecast Traffic Flow Data', - dataCategoryId: 'Traffic Flow Information', - label: 'Forecast Traffic Flow Data', - }, - - { - id: 'Availability and Forecast', - dataCategoryId: 'Parking Information', - label: 'Availability and Forecast', - }, - - { - id: 'Prices', - dataCategoryId: 'Parking Information', - label: 'Prices', - }, - - { - id: 'Location of Charging Station', - dataCategoryId: 'Electromobility', - label: 'Location of Charging Station', - }, - - { - id: 'Prices at Charging Station', - dataCategoryId: 'Electromobility', - label: 'Prices at Charging Station', - }, - - { - id: 'Availability of Charging Station', - dataCategoryId: 'Electromobility', - label: 'Availability of Charging Station', - }, - - { - id: 'Dynamic Speed Information', - dataCategoryId: 'Traffic Signs and Speed Information', - label: 'Dynamic Speed Information', - }, - - { - id: 'Dynamic Traffic Signs', - dataCategoryId: 'Traffic Signs and Speed Information', - label: 'Dynamic Traffic Signs', - }, - - { - id: 'Static Traffic Signs', - dataCategoryId: 'Traffic Signs and Speed Information', - label: 'Static Traffic Signs', - }, - - { - id: 'Current Weather Conditions', - dataCategoryId: 'Weather Information', - label: 'Current weather conditions', - }, - - { - id: 'Weather Forecast ', - dataCategoryId: 'Weather Information', - label: 'Weather Forecast ', - }, - - { - id: 'Special Events or Disruptions', - dataCategoryId: 'Weather Information', - label: 'Special Events or Disruptions', - }, - - { - id: 'Timetables', - dataCategoryId: 'Public Transport Information', - label: 'Timetables', - }, - - { - id: 'Fare', - dataCategoryId: 'Public Transport Information', - label: 'Fare', - }, - - { - id: 'Location Information', - dataCategoryId: 'Public Transport Information', - label: 'Location Information', - }, - - { - id: 'Vehicle Information ', - dataCategoryId: 'Shared and On-Demand Mobility', - label: 'Vehicle information', - }, - - { - id: 'Availability ', - dataCategoryId: 'Shared and On-Demand Mobility', - label: 'Availability', - }, - - { - id: 'Location ', - dataCategoryId: 'Shared and On-Demand Mobility', - label: 'Location', - }, - - { - id: 'Range ', - dataCategoryId: 'Shared and On-Demand Mobility', - label: 'Range', - }, - - { - id: 'General Information About Planning Of Routes', - dataCategoryId: 'Infrastructure and Logistics', - label: 'General Information About Planning Of Routes', - }, - - { - id: 'Pedestrian Networks', - dataCategoryId: 'Infrastructure and Logistics', - label: 'Pedestrian Networks', - }, - - { - id: 'Cycling Networks', - dataCategoryId: 'Infrastructure and Logistics', - label: 'Cycling Networks', - }, - - { - id: 'Road Network', - dataCategoryId: 'Infrastructure and Logistics', - label: 'Road Network', - }, - - { - id: 'Water Routes', - dataCategoryId: 'Infrastructure and Logistics', - label: 'Water Routes', - }, - - { - id: 'Cargo Logistics', - dataCategoryId: 'Infrastructure and Logistics', - label: 'Cargo and Logistics', - }, - - { - id: 'Toll Information', - dataCategoryId: 'Infrastructure and Logistics', - label: 'Toll Information', - }, -]; diff --git a/src/app/shared/form-elements/data-subcategory-select/data-subcategory-select-item.service.ts b/src/app/shared/form-elements/data-subcategory-select/data-subcategory-select-item.service.ts deleted file mode 100644 index 89f39282d..000000000 --- a/src/app/shared/form-elements/data-subcategory-select/data-subcategory-select-item.service.ts +++ /dev/null @@ -1,44 +0,0 @@ -import {Injectable} from '@angular/core'; -import {associateBy, groupedBy} from 'src/app/core/utils/map-utils'; -import {DataCategorySelectItem} from '../data-category-select/data-category-select-item'; -import {DATA_SUBCATEGORY_SELECT_DATA} from './data-subcategory-select-data'; -import {DataSubcategorySelectItem} from './data-subcategory-select-item'; - -/** - * Access list of available DataSubcategorySelectItems - */ -@Injectable({providedIn: 'root'}) -export class DataSubcategorySelectItemService { - itemsById = associateBy(DATA_SUBCATEGORY_SELECT_DATA, (it) => it.id); - itemsByDataCategory = groupedBy( - DATA_SUBCATEGORY_SELECT_DATA, - (it) => it.dataCategoryId, - ); - - /** - * Find DataSubcategorySelectItem by id - * @param id language select item id - */ - findById(id: string): DataSubcategorySelectItem { - const item = this.itemsById.get(id); - if (item != null) { - return item; - } - return { - id, - dataCategoryId: '', - label: id, - }; - } - - /** - * Find DataCategorySelectItems by (parent) data category - */ - findByDataCategory( - dataCategory: DataCategorySelectItem | null, - ): DataSubcategorySelectItem[] { - return dataCategory - ? this.itemsByDataCategory.get(dataCategory?.id) ?? [] - : []; - } -} diff --git a/src/app/shared/form-elements/data-subcategory-select/data-subcategory-select-item.ts b/src/app/shared/form-elements/data-subcategory-select/data-subcategory-select-item.ts deleted file mode 100644 index cef088969..000000000 --- a/src/app/shared/form-elements/data-subcategory-select/data-subcategory-select-item.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface DataSubcategorySelectItem { - id: string; - dataCategoryId: string; - label: string; -} diff --git a/src/app/shared/form-elements/data-subcategory-select/data-subcategory-select.component.html b/src/app/shared/form-elements/data-subcategory-select/data-subcategory-select.component.html deleted file mode 100644 index 2207dec16..000000000 --- a/src/app/shared/form-elements/data-subcategory-select/data-subcategory-select.component.html +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - {{ item.label }} - - - diff --git a/src/app/shared/form-elements/data-subcategory-select/data-subcategory-select.component.ts b/src/app/shared/form-elements/data-subcategory-select/data-subcategory-select.component.ts deleted file mode 100644 index c6ea3fc87..000000000 --- a/src/app/shared/form-elements/data-subcategory-select/data-subcategory-select.component.ts +++ /dev/null @@ -1,19 +0,0 @@ -import {Component, Input} from '@angular/core'; -import {FormControl} from '@angular/forms'; -import {DataCategorySelectItem} from '../data-category-select/data-category-select-item'; -import {DataSubcategorySelectItem} from './data-subcategory-select-item'; - -@Component({ - selector: 'data-subcategory-select', - templateUrl: 'data-subcategory-select.component.html', -}) -export class DataSubcategorySelectComponent { - @Input() - label!: string; - - @Input() - dataCategory: DataCategorySelectItem | null = null; - - @Input() - control!: FormControl; -} diff --git a/src/app/shared/form-elements/edit-asset-form-data-address-type-select/edit-asset-form-data-address-type-select.component.html b/src/app/shared/form-elements/edit-asset-form-data-address-type-select/edit-asset-form-data-address-type-select.component.html deleted file mode 100644 index 24d023919..000000000 --- a/src/app/shared/form-elements/edit-asset-form-data-address-type-select/edit-asset-form-data-address-type-select.component.html +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - {{ item.label }} - - - diff --git a/src/app/shared/form-elements/edit-asset-form-data-address-type-select/edit-asset-form-data-address-type-select.component.ts b/src/app/shared/form-elements/edit-asset-form-data-address-type-select/edit-asset-form-data-address-type-select.component.ts deleted file mode 100644 index 68081dfcd..000000000 --- a/src/app/shared/form-elements/edit-asset-form-data-address-type-select/edit-asset-form-data-address-type-select.component.ts +++ /dev/null @@ -1,26 +0,0 @@ -import {Component, Input} from '@angular/core'; -import {FormControl} from '@angular/forms'; -import {DataAddressType} from '../data-address-type-select/data-address-type'; - -@Component({ - selector: 'edit-asset-form-data-address-type-select', - templateUrl: 'edit-asset-form-data-address-type-select.component.html', -}) -export class EditAssetFormDataAddressTypeSelectComponent { - @Input() - label!: string; - - @Input() - control!: FormControl; - - items = [ - { - id: 'Http', - label: 'REST-API Endpoint', - }, - { - id: 'Custom-Data-Address-Json', - label: `Custom Datasource-Create Config (JSON)`, - }, - ]; -} diff --git a/src/app/shared/form-elements/edit-asset-form-group/edit-asset-form-group.component.html b/src/app/shared/form-elements/edit-asset-form-group/edit-asset-form-group.component.html deleted file mode 100644 index 3ec1f6c84..000000000 --- a/src/app/shared/form-elements/edit-asset-form-group/edit-asset-form-group.component.html +++ /dev/null @@ -1,15 +0,0 @@ -
-
-

- {{ myTitle }} -

-

- {{ description }} -

-
- -
- -
-
diff --git a/src/app/shared/form-elements/edit-asset-form-group/edit-asset-form-group.component.ts b/src/app/shared/form-elements/edit-asset-form-group/edit-asset-form-group.component.ts deleted file mode 100644 index ebc142103..000000000 --- a/src/app/shared/form-elements/edit-asset-form-group/edit-asset-form-group.component.ts +++ /dev/null @@ -1,10 +0,0 @@ -import {Component, Input} from '@angular/core'; - -@Component({ - selector: 'edit-asset-form-group', - templateUrl: './edit-asset-form-group.component.html', -}) -export class EditAssetFormGroupComponent { - @Input() myTitle!: string; - @Input() description!: string; -} diff --git a/src/app/shared/form-elements/edit-asset-form-input/edit-asset-form-input.component.html b/src/app/shared/form-elements/edit-asset-form-input/edit-asset-form-input.component.html deleted file mode 100644 index 66cd9945c..000000000 --- a/src/app/shared/form-elements/edit-asset-form-input/edit-asset-form-input.component.html +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - {{ validationMessages.invalidUrlMessage }} - - - {{ validationMessages.invalidEmailMessage }} - - - {{ validationMessages.invalidWhitespacesOrColonsMessage }} - - - {{ validationMessages.invalidPrefix('ID', 'urn:artifact') }} - - - {{ ctrl.errors?.exists }} - - - {{ hint }} - - - - - - Describes the content type of the data as a MIME type, see - common types - - diff --git a/src/app/shared/form-elements/edit-asset-form-input/edit-asset-form-input.component.ts b/src/app/shared/form-elements/edit-asset-form-input/edit-asset-form-input.component.ts deleted file mode 100644 index ec28a4f62..000000000 --- a/src/app/shared/form-elements/edit-asset-form-input/edit-asset-form-input.component.ts +++ /dev/null @@ -1,20 +0,0 @@ -import {Component, Input} from '@angular/core'; -import {FormControl} from '@angular/forms'; -import {ValidationMessages} from 'src/app/core/validators/validation-messages'; - -@Component({ - selector: 'edit-asset-form-input', - templateUrl: './edit-asset-form-input.component.html', -}) -export class EditAssetFormInputComponent { - @Input() ctrl!: FormControl; - @Input() fieldId = 'missing-id-' + Math.random().toString(36).substring(7); - @Input() label!: string; - @Input() placeholder: string = '...'; - @Input() tooltip: string = ''; - @Input() hint: string = ''; - @Input() hideHint: boolean = false; - @Input() contentTypeHint: boolean = false; - - constructor(public validationMessages: ValidationMessages) {} -} diff --git a/src/app/shared/form-elements/edit-asset-form-label/edit-asset-form-label.component.html b/src/app/shared/form-elements/edit-asset-form-label/edit-asset-form-label.component.html deleted file mode 100644 index 8c4339a97..000000000 --- a/src/app/shared/form-elements/edit-asset-form-label/edit-asset-form-label.component.html +++ /dev/null @@ -1,9 +0,0 @@ - diff --git a/src/app/shared/form-elements/edit-asset-form-label/edit-asset-form-label.component.ts b/src/app/shared/form-elements/edit-asset-form-label/edit-asset-form-label.component.ts deleted file mode 100644 index c469a05f1..000000000 --- a/src/app/shared/form-elements/edit-asset-form-label/edit-asset-form-label.component.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {Component, Input} from '@angular/core'; -import {AbstractControl, Validators} from '@angular/forms'; - -@Component({ - selector: 'edit-asset-form-label', - templateUrl: './edit-asset-form-label.component.html', -}) -export class EditAssetFormLabelComponent { - @Input() label!: string; - @Input() htmlFor?: string; - @Input() ctrl?: AbstractControl; - - isRequired(): boolean { - return this.ctrl?.hasValidator(Validators.required) || false; - } -} diff --git a/src/app/shared/form-elements/edit-asset-form-textarea/edit-asset-form-textarea.component.html b/src/app/shared/form-elements/edit-asset-form-textarea/edit-asset-form-textarea.component.html deleted file mode 100644 index 01917df80..000000000 --- a/src/app/shared/form-elements/edit-asset-form-textarea/edit-asset-form-textarea.component.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - {{ validationMessages.invalidJsonMessage }} - - - - - diff --git a/src/app/shared/form-elements/edit-asset-form-textarea/edit-asset-form-textarea.component.ts b/src/app/shared/form-elements/edit-asset-form-textarea/edit-asset-form-textarea.component.ts deleted file mode 100644 index 93d1ee63e..000000000 --- a/src/app/shared/form-elements/edit-asset-form-textarea/edit-asset-form-textarea.component.ts +++ /dev/null @@ -1,18 +0,0 @@ -import {Component, Input} from '@angular/core'; -import {FormControl} from '@angular/forms'; -import {ValidationMessages} from 'src/app/core/validators/validation-messages'; - -@Component({ - selector: 'edit-asset-form-textarea', - templateUrl: './edit-asset-form-textarea.component.html', -}) -export class EditAssetFormTextareaComponent { - @Input() ctrl!: FormControl; - @Input() fieldId = 'missing-id-' + Math.random().toString(36).substring(7); - @Input() label!: string; - @Input() placeholder: string = '...'; - @Input() hideHint: boolean = false; - @Input() textareaClasses: string = 'h-36'; - - constructor(public validationMessages: ValidationMessages) {} -} diff --git a/src/app/shared/form-elements/keyword-select/keyword-select.component.html b/src/app/shared/form-elements/keyword-select/keyword-select.component.html deleted file mode 100644 index e7bf8d321..000000000 --- a/src/app/shared/form-elements/keyword-select/keyword-select.component.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - {{ keyword }} - - - - - - diff --git a/src/app/shared/form-elements/keyword-select/keyword-select.component.ts b/src/app/shared/form-elements/keyword-select/keyword-select.component.ts deleted file mode 100644 index 81e602161..000000000 --- a/src/app/shared/form-elements/keyword-select/keyword-select.component.ts +++ /dev/null @@ -1,34 +0,0 @@ -import {COMMA, ENTER, SEMICOLON} from '@angular/cdk/keycodes'; -import {Component, Input} from '@angular/core'; -import {FormControl} from '@angular/forms'; -import {MatChipInputEvent} from '@angular/material/chips'; -import {removeOnce} from 'src/app/core/utils/array-utils'; - -@Component({ - selector: 'keyword-select', - templateUrl: 'keyword-select.component.html', -}) -export class KeywordSelectComponent { - separatorKeysCodes: number[] = [ENTER, COMMA, SEMICOLON]; - - @Input() - label!: string; - - @Input() - control!: FormControl; - - remove(keyword: string) { - this.control.setValue(removeOnce(this.control.value, keyword)); - } - - add(event: MatChipInputEvent): void { - const keywords = (event.value || '') - .split(/[,;]/) - .map((it) => it.trim()) - .filter((it) => it); - if (keywords.length) { - this.control.setValue([...this.control.value, ...keywords]); - } - event.chipInput.clear(); - } -} diff --git a/src/app/shared/form-elements/language-select/language-select-data.ts b/src/app/shared/form-elements/language-select/language-select-data.ts deleted file mode 100644 index 79740613f..000000000 --- a/src/app/shared/form-elements/language-select/language-select-data.ts +++ /dev/null @@ -1,1299 +0,0 @@ -import {LanguageSelectItem} from './language-select-item'; - -export const LANGUAGE_SELECT_DATA: LanguageSelectItem[] = [ - { - id: 'https://w3id.org/idsa/code/MULTI_LINGUAL', - idShort: 'MULTI_LINGUAL', - label: 'Multilingual', - comment: - 'Code indicates that several languages are used or no concrete language can be determined.', - }, - - { - id: 'https://w3id.org/idsa/code/AB', - idShort: 'AB', - label: 'Abkhaz', - sameAs: 'https://dbpedia.org/resource/ISO_639:ab', - }, - - { - id: 'https://w3id.org/idsa/code/AA', - idShort: 'AA', - label: 'Afar', - sameAs: 'https://dbpedia.org/resource/ISO_639:aa', - }, - - { - id: 'https://w3id.org/idsa/code/AF', - idShort: 'AF', - label: 'Afrikaans', - sameAs: 'https://dbpedia.org/resource/ISO_639:af', - }, - - { - id: 'https://w3id.org/idsa/code/AK', - idShort: 'AK', - label: 'Akan', - sameAs: 'https://dbpedia.org/resource/ISO_639:ak', - }, - - { - id: 'https://w3id.org/idsa/code/SQ', - idShort: 'SQ', - label: 'Albanian', - sameAs: 'https://dbpedia.org/resource/ISO_639:sq', - }, - - { - id: 'https://w3id.org/idsa/code/AM', - idShort: 'AM', - label: 'Amharic', - sameAs: 'https://dbpedia.org/resource/ISO_639:am', - }, - - { - id: 'https://w3id.org/idsa/code/AR', - idShort: 'AR', - label: 'Arabic', - sameAs: 'https://dbpedia.org/resource/ISO_639:ar', - }, - - { - id: 'https://w3id.org/idsa/code/AN', - idShort: 'AN', - label: 'Aragonese', - sameAs: 'https://dbpedia.org/resource/ISO_639:an', - }, - - { - id: 'https://w3id.org/idsa/code/HY', - idShort: 'HY', - label: 'Armenian', - sameAs: 'https://dbpedia.org/resource/ISO_639:hy', - }, - - { - id: 'https://w3id.org/idsa/code/AS', - idShort: 'AS', - label: 'Assamese', - sameAs: 'https://dbpedia.org/resource/ISO_639:as', - }, - - { - id: 'https://w3id.org/idsa/code/AV', - idShort: 'AV', - label: 'Avaric', - sameAs: 'https://dbpedia.org/resource/ISO_639:av', - }, - - { - id: 'https://w3id.org/idsa/code/AE', - idShort: 'AE', - label: 'Avestan', - sameAs: 'https://dbpedia.org/resource/ISO_639:ae', - }, - - { - id: 'https://w3id.org/idsa/code/AY', - idShort: 'AY', - label: 'Aymara', - sameAs: 'https://dbpedia.org/resource/ISO_639:ay', - }, - - { - id: 'https://w3id.org/idsa/code/AZ', - idShort: 'AZ', - label: 'Azerbaijani', - sameAs: 'https://dbpedia.org/resource/ISO_639:az', - }, - - { - id: 'https://w3id.org/idsa/code/BM', - idShort: 'BM', - label: 'Bambara', - sameAs: 'https://dbpedia.org/resource/ISO_639:bm', - }, - - { - id: 'https://w3id.org/idsa/code/BA', - idShort: 'BA', - label: 'Bashkir', - sameAs: 'https://dbpedia.org/resource/ISO_639:ba', - }, - - { - id: 'https://w3id.org/idsa/code/EU', - idShort: 'EU', - label: 'Basque', - sameAs: 'https://dbpedia.org/resource/ISO_639:eu', - }, - - { - id: 'https://w3id.org/idsa/code/BE', - idShort: 'BE', - label: 'Belarusian', - sameAs: 'https://dbpedia.org/resource/ISO_639:be', - }, - - { - id: 'https://w3id.org/idsa/code/BN', - idShort: 'BN', - label: 'Bengali, Bangla', - sameAs: 'https://dbpedia.org/resource/ISO_639:bn', - }, - - { - id: 'https://w3id.org/idsa/code/BH', - idShort: 'BH', - label: 'Bihari', - sameAs: 'https://dbpedia.org/resource/ISO_639:bh', - }, - - { - id: 'https://w3id.org/idsa/code/BI', - idShort: 'BI', - label: 'Bislama', - sameAs: 'https://dbpedia.org/resource/ISO_639:bi', - }, - - { - id: 'https://w3id.org/idsa/code/BS', - idShort: 'BS', - label: 'Bosnian', - sameAs: 'https://dbpedia.org/resource/ISO_639:bs', - }, - - { - id: 'https://w3id.org/idsa/code/BR', - idShort: 'BR', - label: 'Breton', - sameAs: 'https://dbpedia.org/resource/ISO_639:br', - }, - - { - id: 'https://w3id.org/idsa/code/BG', - idShort: 'BG', - label: 'Bulgarian', - sameAs: 'https://dbpedia.org/resource/ISO_639:bg', - }, - - { - id: 'https://w3id.org/idsa/code/MY', - idShort: 'MY', - label: 'Burmese', - sameAs: 'https://dbpedia.org/resource/ISO_639:my', - }, - - { - id: 'https://w3id.org/idsa/code/CA', - idShort: 'CA', - label: 'Catalan', - sameAs: 'https://dbpedia.org/resource/ISO_639:ca', - }, - - { - id: 'https://w3id.org/idsa/code/CH', - idShort: 'CH', - label: 'Chamorro', - sameAs: 'https://dbpedia.org/resource/ISO_639:ch', - }, - - { - id: 'https://w3id.org/idsa/code/CE', - idShort: 'CE', - label: 'Chechen', - sameAs: 'https://dbpedia.org/resource/ISO_639:ce', - }, - - { - id: 'https://w3id.org/idsa/code/NY', - idShort: 'NY', - label: 'Chichewa, Chewa, Nyanja', - sameAs: 'https://dbpedia.org/resource/ISO_639:ny', - }, - - { - id: 'https://w3id.org/idsa/code/ZH', - idShort: 'ZH', - label: 'Chinese', - sameAs: 'https://dbpedia.org/resource/ISO_639:zh', - }, - - { - id: 'https://w3id.org/idsa/code/CV', - idShort: 'CV', - label: 'Chuvash', - sameAs: 'https://dbpedia.org/resource/ISO_639:cv', - }, - - { - id: 'https://w3id.org/idsa/code/KW', - idShort: 'KW', - label: 'Cornish', - sameAs: 'https://dbpedia.org/resource/ISO_639:kw', - }, - - { - id: 'https://w3id.org/idsa/code/CO', - idShort: 'CO', - label: 'Corsican', - sameAs: 'https://dbpedia.org/resource/ISO_639:co', - }, - - { - id: 'https://w3id.org/idsa/code/CR', - idShort: 'CR', - label: 'Cree', - sameAs: 'https://dbpedia.org/resource/ISO_639:cr', - }, - - { - id: 'https://w3id.org/idsa/code/HR', - idShort: 'HR', - label: 'Croatian', - sameAs: 'https://dbpedia.org/resource/ISO_639:hr', - }, - - { - id: 'https://w3id.org/idsa/code/CS', - idShort: 'CS', - label: 'Czech', - sameAs: 'https://dbpedia.org/resource/ISO_639:cs', - }, - - { - id: 'https://w3id.org/idsa/code/DA', - idShort: 'DA', - label: 'Danish', - sameAs: 'https://dbpedia.org/resource/ISO_639:da', - }, - - { - id: 'https://w3id.org/idsa/code/DV', - idShort: 'DV', - label: 'Divehi, Dhivehi, Maldivian', - sameAs: 'https://dbpedia.org/resource/ISO_639:dv', - }, - - { - id: 'https://w3id.org/idsa/code/NL', - idShort: 'NL', - label: 'Dutch', - sameAs: 'https://dbpedia.org/resource/ISO_639:nl', - }, - - { - id: 'https://w3id.org/idsa/code/DZ', - idShort: 'DZ', - label: 'Dzongkha', - sameAs: 'https://dbpedia.org/resource/ISO_639:dz', - }, - - { - id: 'https://w3id.org/idsa/code/EN', - idShort: 'EN', - label: 'English', - sameAs: 'https://dbpedia.org/resource/ISO_639:en', - }, - - { - id: 'https://w3id.org/idsa/code/EO', - idShort: 'EO', - label: 'Esperanto', - sameAs: 'https://dbpedia.org/resource/ISO_639:eo', - }, - - { - id: 'https://w3id.org/idsa/code/ET', - idShort: 'ET', - label: 'Estonian', - sameAs: 'https://dbpedia.org/resource/ISO_639:et', - }, - - { - id: 'https://w3id.org/idsa/code/EE', - idShort: 'EE', - label: 'Ewe', - sameAs: 'https://dbpedia.org/resource/ISO_639:ee', - }, - - { - id: 'https://w3id.org/idsa/code/FO', - idShort: 'FO', - label: 'Faroese', - sameAs: 'https://dbpedia.org/resource/ISO_639:fo', - }, - - { - id: 'https://w3id.org/idsa/code/FJ', - idShort: 'FJ', - label: 'Fijian', - sameAs: 'https://dbpedia.org/resource/ISO_639:fj', - }, - - { - id: 'https://w3id.org/idsa/code/FI', - idShort: 'FI', - label: 'Finnish', - sameAs: 'https://dbpedia.org/resource/ISO_639:fi', - }, - - { - id: 'https://w3id.org/idsa/code/FR', - idShort: 'FR', - label: 'French', - sameAs: 'https://dbpedia.org/resource/ISO_639:fr', - }, - - { - id: 'https://w3id.org/idsa/code/FF', - idShort: 'FF', - label: 'Fula, Fulah, Pulaar, Pular', - sameAs: 'https://dbpedia.org/resource/ISO_639:ff', - }, - - { - id: 'https://w3id.org/idsa/code/GL', - idShort: 'GL', - label: 'Galician', - sameAs: 'https://dbpedia.org/resource/ISO_639:gl', - }, - - { - id: 'https://w3id.org/idsa/code/KA', - idShort: 'KA', - label: 'Georgian', - sameAs: 'https://dbpedia.org/resource/ISO_639:ka', - }, - - { - id: 'https://w3id.org/idsa/code/DE', - idShort: 'DE', - label: 'German', - sameAs: 'https://dbpedia.org/resource/ISO_639:de', - }, - - { - id: 'https://w3id.org/idsa/code/EL', - idShort: 'EL', - label: 'Greek (modern)', - sameAs: 'https://dbpedia.org/resource/ISO_639:el', - }, - - { - id: 'https://w3id.org/idsa/code/GN', - idShort: 'GN', - label: 'Guaraní', - sameAs: 'https://dbpedia.org/resource/ISO_639:gn', - }, - - { - id: 'https://w3id.org/idsa/code/GU', - idShort: 'GU', - label: 'Gujarati', - sameAs: 'https://dbpedia.org/resource/ISO_639:gu', - }, - - { - id: 'https://w3id.org/idsa/code/HT', - idShort: 'HT', - label: 'Haitian, Haitian Creole', - sameAs: 'https://dbpedia.org/resource/ISO_639:ht', - }, - - { - id: 'https://w3id.org/idsa/code/HA', - idShort: 'HA', - label: 'Hausa', - sameAs: 'https://dbpedia.org/resource/ISO_639:ha', - }, - - { - id: 'https://w3id.org/idsa/code/HE', - idShort: 'HE', - label: 'Hebrew (modern)', - sameAs: 'https://dbpedia.org/resource/ISO_639:he', - }, - - { - id: 'https://w3id.org/idsa/code/HZ', - idShort: 'HZ', - label: 'Herero', - sameAs: 'https://dbpedia.org/resource/ISO_639:hz', - }, - - { - id: 'https://w3id.org/idsa/code/HI', - idShort: 'HI', - label: 'Hindi', - sameAs: 'https://dbpedia.org/resource/ISO_639:hi', - }, - - { - id: 'https://w3id.org/idsa/code/HO', - idShort: 'HO', - label: 'Hiri Motu', - sameAs: 'https://dbpedia.org/resource/ISO_639:ho', - }, - - { - id: 'https://w3id.org/idsa/code/HU', - idShort: 'HU', - label: 'Hungarian', - sameAs: 'https://dbpedia.org/resource/ISO_639:hu', - }, - - { - id: 'https://w3id.org/idsa/code/IA', - idShort: 'IA', - label: 'Interlingua', - sameAs: 'https://dbpedia.org/resource/ISO_639:ia', - }, - - { - id: 'https://w3id.org/idsa/code/ID', - idShort: 'ID', - label: 'Indonesian', - sameAs: 'https://dbpedia.org/resource/ISO_639:id', - }, - - { - id: 'https://w3id.org/idsa/code/IE', - idShort: 'IE', - label: 'Interlingue', - sameAs: 'https://dbpedia.org/resource/ISO_639:ie', - }, - - { - id: 'https://w3id.org/idsa/code/GA', - idShort: 'GA', - label: 'Irish', - sameAs: 'https://dbpedia.org/resource/ISO_639:ga', - }, - - { - id: 'https://w3id.org/idsa/code/IG', - idShort: 'IG', - label: 'Igbo', - sameAs: 'https://dbpedia.org/resource/ISO_639:ig', - }, - - { - id: 'https://w3id.org/idsa/code/IK', - idShort: 'IK', - label: 'Inupiaq', - sameAs: 'https://dbpedia.org/resource/ISO_639:ik', - }, - - { - id: 'https://w3id.org/idsa/code/IO', - idShort: 'IO', - label: 'Ido', - sameAs: 'https://dbpedia.org/resource/ISO_639:io', - }, - - { - id: 'https://w3id.org/idsa/code/IS', - idShort: 'IS', - label: 'Icelandic', - sameAs: 'https://dbpedia.org/resource/ISO_639:is', - }, - - { - id: 'https://w3id.org/idsa/code/IT', - idShort: 'IT', - label: 'Italian', - sameAs: 'https://dbpedia.org/resource/ISO_639:it', - }, - - { - id: 'https://w3id.org/idsa/code/IU', - idShort: 'IU', - label: 'Inuktitut', - sameAs: 'https://dbpedia.org/resource/ISO_639:iu', - }, - - { - id: 'https://w3id.org/idsa/code/JA', - idShort: 'JA', - label: 'Japanese', - sameAs: 'https://dbpedia.org/resource/ISO_639:ja', - }, - - { - id: 'https://w3id.org/idsa/code/JV', - idShort: 'JV', - label: 'Javanese', - sameAs: 'https://dbpedia.org/resource/ISO_639:jv', - }, - - { - id: 'https://w3id.org/idsa/code/KL', - idShort: 'KL', - label: 'Kalaallisut, Greenlandic', - sameAs: 'https://dbpedia.org/resource/ISO_639:kl', - }, - - { - id: 'https://w3id.org/idsa/code/KN', - idShort: 'KN', - label: 'Kannada', - sameAs: 'https://dbpedia.org/resource/ISO_639:kn', - }, - - { - id: 'https://w3id.org/idsa/code/KR', - idShort: 'KR', - label: 'Kanuri', - sameAs: 'https://dbpedia.org/resource/ISO_639:kr', - }, - - { - id: 'https://w3id.org/idsa/code/KS', - idShort: 'KS', - label: 'Kashmiri', - sameAs: 'https://dbpedia.org/resource/ISO_639:ks', - }, - - { - id: 'https://w3id.org/idsa/code/KK', - idShort: 'KK', - label: 'Kazakh', - sameAs: 'https://dbpedia.org/resource/ISO_639:kk', - }, - - { - id: 'https://w3id.org/idsa/code/KM', - idShort: 'KM', - label: 'Khmer', - sameAs: 'https://dbpedia.org/resource/ISO_639:km', - }, - - { - id: 'https://w3id.org/idsa/code/KI', - idShort: 'KI', - label: 'Kikuyu, Gikuyu', - sameAs: 'https://dbpedia.org/resource/ISO_639:ki', - }, - - { - id: 'https://w3id.org/idsa/code/RW', - idShort: 'RW', - label: 'Kinyarwanda', - sameAs: 'https://dbpedia.org/resource/ISO_639:rw', - }, - - { - id: 'https://w3id.org/idsa/code/KY', - idShort: 'KY', - label: 'Kyrgyz', - sameAs: 'https://dbpedia.org/resource/ISO_639:ky', - }, - - { - id: 'https://w3id.org/idsa/code/KV', - idShort: 'KV', - label: 'Komi', - sameAs: 'https://dbpedia.org/resource/ISO_639:kv', - }, - - { - id: 'https://w3id.org/idsa/code/KG', - idShort: 'KG', - label: 'Kongo', - sameAs: 'https://dbpedia.org/resource/ISO_639:kg', - }, - - { - id: 'https://w3id.org/idsa/code/KO', - idShort: 'KO', - label: 'Korean', - sameAs: 'https://dbpedia.org/resource/ISO_639:ko', - }, - - { - id: 'https://w3id.org/idsa/code/KU', - idShort: 'KU', - label: 'Kurdish', - sameAs: 'https://dbpedia.org/resource/ISO_639:ku', - }, - - { - id: 'https://w3id.org/idsa/code/KJ', - idShort: 'KJ', - label: 'Kwanyama, Kuanyama', - sameAs: 'https://dbpedia.org/resource/ISO_639:kj', - }, - - { - id: 'https://w3id.org/idsa/code/LA', - idShort: 'LA', - label: 'Latin', - sameAs: 'https://dbpedia.org/resource/ISO_639:la', - }, - - { - id: 'https://w3id.org/idsa/code/LB', - idShort: 'LB', - label: 'Luxembourgish, Letzeburgesch', - sameAs: 'https://dbpedia.org/resource/ISO_639:lb', - }, - - { - id: 'https://w3id.org/idsa/code/LG', - idShort: 'LG', - label: 'Ganda', - sameAs: 'https://dbpedia.org/resource/ISO_639:lg', - }, - - { - id: 'https://w3id.org/idsa/code/LI', - idShort: 'LI', - label: 'Limburgish, Limburgan, Limburger', - sameAs: 'https://dbpedia.org/resource/ISO_639:li', - }, - - { - id: 'https://w3id.org/idsa/code/LN', - idShort: 'LN', - label: 'Lingala', - sameAs: 'https://dbpedia.org/resource/ISO_639:ln', - }, - - { - id: 'https://w3id.org/idsa/code/LO', - idShort: 'LO', - label: 'Lao', - sameAs: 'https://dbpedia.org/resource/ISO_639:lo', - }, - - { - id: 'https://w3id.org/idsa/code/LT', - idShort: 'LT', - label: 'Lithuanian', - sameAs: 'https://dbpedia.org/resource/ISO_639:lt', - }, - - { - id: 'https://w3id.org/idsa/code/LU', - idShort: 'LU', - label: 'Luba-Katanga', - sameAs: 'https://dbpedia.org/resource/ISO_639:lu', - }, - - { - id: 'https://w3id.org/idsa/code/LV', - idShort: 'LV', - label: 'Latvian', - sameAs: 'https://dbpedia.org/resource/ISO_639:lv', - }, - - { - id: 'https://w3id.org/idsa/code/GV', - idShort: 'GV', - label: 'Manx', - sameAs: 'https://dbpedia.org/resource/ISO_639:gv', - }, - - { - id: 'https://w3id.org/idsa/code/MK', - idShort: 'MK', - label: 'Macedonian', - sameAs: 'https://dbpedia.org/resource/ISO_639:mk', - }, - - { - id: 'https://w3id.org/idsa/code/MG', - idShort: 'MG', - label: 'Malagasy', - sameAs: 'https://dbpedia.org/resource/ISO_639:mg', - }, - - { - id: 'https://w3id.org/idsa/code/MS', - idShort: 'MS', - label: 'Malay', - sameAs: 'https://dbpedia.org/resource/ISO_639:ms', - }, - - { - id: 'https://w3id.org/idsa/code/ML', - idShort: 'ML', - label: 'Malayalam', - sameAs: 'https://dbpedia.org/resource/ISO_639:ml', - }, - - { - id: 'https://w3id.org/idsa/code/MT', - idShort: 'MT', - label: 'Maltese', - sameAs: 'https://dbpedia.org/resource/ISO_639:mt', - }, - - { - id: 'https://w3id.org/idsa/code/MI', - idShort: 'MI', - label: 'Māori', - sameAs: 'https://dbpedia.org/resource/ISO_639:mi', - }, - - { - id: 'https://w3id.org/idsa/code/MR', - idShort: 'MR', - label: 'Marathi (Marāṭhī)', - sameAs: 'https://dbpedia.org/resource/ISO_639:mr', - }, - - { - id: 'https://w3id.org/idsa/code/MH', - idShort: 'MH', - label: 'Marshallese', - sameAs: 'https://dbpedia.org/resource/ISO_639:mh', - }, - - { - id: 'https://w3id.org/idsa/code/MN', - idShort: 'MN', - label: 'Mongolian', - sameAs: 'https://dbpedia.org/resource/ISO_639:mn', - }, - - { - id: 'https://w3id.org/idsa/code/NA', - idShort: 'NA', - label: 'Nauruan', - sameAs: 'https://dbpedia.org/resource/ISO_639:na', - }, - - { - id: 'https://w3id.org/idsa/code/NV', - idShort: 'NV', - label: 'Navajo, Navaho', - sameAs: 'https://dbpedia.org/resource/ISO_639:nv', - }, - - { - id: 'https://w3id.org/idsa/code/ND', - idShort: 'ND', - label: 'Northern Ndebele', - sameAs: 'https://dbpedia.org/resource/ISO_639:nd', - }, - - { - id: 'https://w3id.org/idsa/code/NE', - idShort: 'NE', - label: 'Nepali', - sameAs: 'https://dbpedia.org/resource/ISO_639:ne', - }, - - { - id: 'https://w3id.org/idsa/code/NG', - idShort: 'NG', - label: 'Ndonga', - sameAs: 'https://dbpedia.org/resource/ISO_639:ng', - }, - - { - id: 'https://w3id.org/idsa/code/NB', - idShort: 'NB', - label: 'Norwegian Bokmål', - sameAs: 'https://dbpedia.org/resource/ISO_639:nb', - }, - - { - id: 'https://w3id.org/idsa/code/NN', - idShort: 'NN', - label: 'Norwegian Nynorsk', - sameAs: 'https://dbpedia.org/resource/ISO_639:nn', - }, - - { - id: 'https://w3id.org/idsa/code/NO', - idShort: 'NO', - label: 'Norwegian', - sameAs: 'https://dbpedia.org/resource/ISO_639:no', - }, - - { - id: 'https://w3id.org/idsa/code/II', - idShort: 'II', - label: 'Nuosu', - sameAs: 'https://dbpedia.org/resource/ISO_639:ii', - }, - - { - id: 'https://w3id.org/idsa/code/NR', - idShort: 'NR', - label: 'Southern Ndebele', - sameAs: 'https://dbpedia.org/resource/ISO_639:nr', - }, - - { - id: 'https://w3id.org/idsa/code/OC', - idShort: 'OC', - label: 'Occitan', - sameAs: 'https://dbpedia.org/resource/ISO_639:oc', - }, - - { - id: 'https://w3id.org/idsa/code/OJ', - idShort: 'OJ', - label: 'Ojibwe, Ojibwa', - sameAs: 'https://dbpedia.org/resource/ISO_639:oj', - }, - - { - id: 'https://w3id.org/idsa/code/CU', - idShort: 'CU', - label: 'Old Church Slavonic, Church Slavonic, Old Bulgarian', - sameAs: 'https://dbpedia.org/resource/ISO_639:cu', - }, - - { - id: 'https://w3id.org/idsa/code/OM', - idShort: 'OM', - label: 'Oromo', - sameAs: 'https://dbpedia.org/resource/ISO_639:om', - }, - - { - id: 'https://w3id.org/idsa/code/OR', - idShort: 'OR', - label: 'Oriya', - sameAs: 'https://dbpedia.org/resource/ISO_639:or', - }, - - { - id: 'https://w3id.org/idsa/code/OS', - idShort: 'OS', - label: 'Ossetian, Ossetic', - sameAs: 'https://dbpedia.org/resource/ISO_639:os', - }, - - { - id: 'https://w3id.org/idsa/code/PA', - idShort: 'PA', - label: '(Eastern) Punjabi', - sameAs: 'https://dbpedia.org/resource/ISO_639:pa', - }, - - { - id: 'https://w3id.org/idsa/code/PI', - idShort: 'PI', - label: 'Pāli', - sameAs: 'https://dbpedia.org/resource/ISO_639:pi', - }, - - { - id: 'https://w3id.org/idsa/code/FA', - idShort: 'FA', - label: 'Persian (Farsi)', - sameAs: 'https://dbpedia.org/resource/ISO_639:fa', - }, - - { - id: 'https://w3id.org/idsa/code/PL', - idShort: 'PL', - label: 'Polish', - sameAs: 'https://dbpedia.org/resource/ISO_639:pl', - }, - - { - id: 'https://w3id.org/idsa/code/PS', - idShort: 'PS', - label: 'Pashto, Pushto', - sameAs: 'https://dbpedia.org/resource/ISO_639:ps', - }, - - { - id: 'https://w3id.org/idsa/code/PT', - idShort: 'PT', - label: 'Portuguese', - sameAs: 'https://dbpedia.org/resource/ISO_639:pt', - }, - - { - id: 'https://w3id.org/idsa/code/QU', - idShort: 'QU', - label: 'Quechua', - sameAs: 'https://dbpedia.org/resource/ISO_639:qu', - }, - - { - id: 'https://w3id.org/idsa/code/RM', - idShort: 'RM', - label: 'Romansh', - sameAs: 'https://dbpedia.org/resource/ISO_639:rm', - }, - - { - id: 'https://w3id.org/idsa/code/RN', - idShort: 'RN', - label: 'Kirundi', - sameAs: 'https://dbpedia.org/resource/ISO_639:rn', - }, - - { - id: 'https://w3id.org/idsa/code/RO', - idShort: 'RO', - label: 'Romanian', - sameAs: 'https://dbpedia.org/resource/ISO_639:ro', - }, - - { - id: 'https://w3id.org/idsa/code/RU', - idShort: 'RU', - label: 'Russian', - sameAs: 'https://dbpedia.org/resource/ISO_639:ru', - }, - - { - id: 'https://w3id.org/idsa/code/SA', - idShort: 'SA', - label: 'Sanskrit (Saṁskṛta)', - sameAs: 'https://dbpedia.org/resource/ISO_639:sa', - }, - - { - id: 'https://w3id.org/idsa/code/SC', - idShort: 'SC', - label: 'Sardinian', - sameAs: 'https://dbpedia.org/resource/ISO_639:sc', - }, - - { - id: 'https://w3id.org/idsa/code/SD', - idShort: 'SD', - label: 'Sindhi', - sameAs: 'https://dbpedia.org/resource/ISO_639:sd', - }, - - { - id: 'https://w3id.org/idsa/code/SE', - idShort: 'SE', - label: 'Northern Sami', - sameAs: 'https://dbpedia.org/resource/ISO_639:se', - }, - - { - id: 'https://w3id.org/idsa/code/SM', - idShort: 'SM', - label: 'Samoan', - sameAs: 'https://dbpedia.org/resource/ISO_639:sm', - }, - - { - id: 'https://w3id.org/idsa/code/SG', - idShort: 'SG', - label: 'Sango', - sameAs: 'https://dbpedia.org/resource/ISO_639:sg', - }, - - { - id: 'https://w3id.org/idsa/code/SR', - idShort: 'SR', - label: 'Serbian', - sameAs: 'https://dbpedia.org/resource/ISO_639:sr', - }, - - { - id: 'https://w3id.org/idsa/code/GD', - idShort: 'GD', - label: 'Scottish Gaelic, Gaelic', - sameAs: 'https://dbpedia.org/resource/ISO_639:gd', - }, - - { - id: 'https://w3id.org/idsa/code/SN', - idShort: 'SN', - label: 'Shona', - sameAs: 'https://dbpedia.org/resource/ISO_639:sn', - }, - - { - id: 'https://w3id.org/idsa/code/SI', - idShort: 'SI', - label: 'Sinhalese, Sinhala', - sameAs: 'https://dbpedia.org/resource/ISO_639:si', - }, - - { - id: 'https://w3id.org/idsa/code/SK', - idShort: 'SK', - label: 'Slovak', - sameAs: 'https://dbpedia.org/resource/ISO_639:sk', - }, - - { - id: 'https://w3id.org/idsa/code/SL', - idShort: 'SL', - label: 'Slovene', - sameAs: 'https://dbpedia.org/resource/ISO_639:sl', - }, - - { - id: 'https://w3id.org/idsa/code/SO', - idShort: 'SO', - label: 'Somali', - sameAs: 'https://dbpedia.org/resource/ISO_639:so', - }, - - { - id: 'https://w3id.org/idsa/code/ST', - idShort: 'ST', - label: 'outhern Sotho', - sameAs: 'https://dbpedia.org/resource/ISO_639:st', - }, - - { - id: 'https://w3id.org/idsa/code/ES', - idShort: 'ES', - label: 'Spanish', - sameAs: 'https://dbpedia.org/resource/ISO_639:es', - }, - - { - id: 'https://w3id.org/idsa/code/SU', - idShort: 'SU', - label: 'Sundanese', - sameAs: 'https://dbpedia.org/resource/ISO_639:su', - }, - - { - id: 'https://w3id.org/idsa/code/SW', - idShort: 'SW', - label: 'Swahili', - sameAs: 'https://dbpedia.org/resource/ISO_639:sw', - }, - - { - id: 'https://w3id.org/idsa/code/SS', - idShort: 'SS', - label: 'Swati', - sameAs: 'https://dbpedia.org/resource/ISO_639:ss', - }, - - { - id: 'https://w3id.org/idsa/code/SV', - idShort: 'SV', - label: 'Swedish', - sameAs: 'https://dbpedia.org/resource/ISO_639:sv', - }, - - { - id: 'https://w3id.org/idsa/code/TA', - idShort: 'TA', - label: 'Tamil', - sameAs: 'https://dbpedia.org/resource/ISO_639:ta', - }, - - { - id: 'https://w3id.org/idsa/code/TE', - idShort: 'TE', - label: 'Telugu', - sameAs: 'https://dbpedia.org/resource/ISO_639:te', - }, - - { - id: 'https://w3id.org/idsa/code/TG', - idShort: 'TG', - label: 'Tajik', - sameAs: 'https://dbpedia.org/resource/ISO_639:tg', - }, - - { - id: 'https://w3id.org/idsa/code/TH', - idShort: 'TH', - label: 'Thai', - sameAs: 'https://dbpedia.org/resource/ISO_639:th', - }, - - { - id: 'https://w3id.org/idsa/code/TI', - idShort: 'TI', - label: 'Tigrinya', - sameAs: 'https://dbpedia.org/resource/ISO_639:ti', - }, - - { - id: 'https://w3id.org/idsa/code/BO', - idShort: 'BO', - label: 'Tibetan Standard, Tibetan, Central', - sameAs: 'https://dbpedia.org/resource/ISO_639:bo', - }, - - { - id: 'https://w3id.org/idsa/code/TK', - idShort: 'TK', - label: 'Turkmen', - sameAs: 'https://dbpedia.org/resource/ISO_639:tk', - }, - - { - id: 'https://w3id.org/idsa/code/TL', - idShort: 'TL', - label: 'Tagalog', - sameAs: 'https://dbpedia.org/resource/ISO_639:tl', - }, - - { - id: 'https://w3id.org/idsa/code/TN', - idShort: 'TN', - label: 'Tswana', - sameAs: 'https://dbpedia.org/resource/ISO_639:tn', - }, - - { - id: 'https://w3id.org/idsa/code/TO', - idShort: 'TO', - label: 'Tonga (Tonga Islands)', - sameAs: 'https://dbpedia.org/resource/ISO_639:to', - }, - - { - id: 'https://w3id.org/idsa/code/TR', - idShort: 'TR', - label: 'Turkish', - sameAs: 'https://dbpedia.org/resource/ISO_639:tr', - }, - - { - id: 'https://w3id.org/idsa/code/TS', - idShort: 'TS', - label: 'Tsonga', - sameAs: 'https://dbpedia.org/resource/ISO_639:ts', - }, - - { - id: 'https://w3id.org/idsa/code/TT', - idShort: 'TT', - label: 'Tatar', - sameAs: 'https://dbpedia.org/resource/ISO_639:tt', - }, - - { - id: 'https://w3id.org/idsa/code/TW', - idShort: 'TW', - label: 'Twi', - sameAs: 'https://dbpedia.org/resource/ISO_639:tw', - }, - - { - id: 'https://w3id.org/idsa/code/TY', - idShort: 'TY', - label: 'Tahitian', - sameAs: 'https://dbpedia.org/resource/ISO_639:ty', - }, - - { - id: 'https://w3id.org/idsa/code/UG', - idShort: 'UG', - label: 'Uyghur', - sameAs: 'https://dbpedia.org/resource/ISO_639:ug', - }, - - { - id: 'https://w3id.org/idsa/code/UK', - idShort: 'UK', - label: 'Ukrainian', - sameAs: 'https://dbpedia.org/resource/ISO_639:uk', - }, - - { - id: 'https://w3id.org/idsa/code/UR', - idShort: 'UR', - label: 'Urdu', - sameAs: 'https://dbpedia.org/resource/ISO_639:ur', - }, - - { - id: 'https://w3id.org/idsa/code/UZ', - idShort: 'UZ', - label: 'Uzbek', - sameAs: 'https://dbpedia.org/resource/ISO_639:uz', - }, - - { - id: 'https://w3id.org/idsa/code/VE', - idShort: 'VE', - label: 'Venda', - sameAs: 'https://dbpedia.org/resource/ISO_639:ve', - }, - - { - id: 'https://w3id.org/idsa/code/VI', - idShort: 'VI', - label: 'Vietnamese', - sameAs: 'https://dbpedia.org/resource/ISO_639:vi', - }, - - { - id: 'https://w3id.org/idsa/code/VO', - idShort: 'VO', - label: 'Volapük', - sameAs: 'https://dbpedia.org/resource/ISO_639:vo', - }, - - { - id: 'https://w3id.org/idsa/code/WA', - idShort: 'WA', - label: 'Walloon', - sameAs: 'https://dbpedia.org/resource/ISO_639:wa', - }, - - { - id: 'https://w3id.org/idsa/code/CY', - idShort: 'CY', - label: 'Welsh', - sameAs: 'https://dbpedia.org/resource/ISO_639:cy', - }, - - { - id: 'https://w3id.org/idsa/code/WO', - idShort: 'WO', - label: 'Wolof', - sameAs: 'https://dbpedia.org/resource/ISO_639:wo', - }, - - { - id: 'https://w3id.org/idsa/code/FY', - idShort: 'FY', - label: 'Western Frisian', - sameAs: 'https://dbpedia.org/resource/ISO_639:fy', - }, - - { - id: 'https://w3id.org/idsa/code/XH', - idShort: 'XH', - label: 'Xhosa', - sameAs: 'https://dbpedia.org/resource/ISO_639:xh', - }, - - { - id: 'https://w3id.org/idsa/code/YI', - idShort: 'YI', - label: 'Yiddish', - sameAs: 'https://dbpedia.org/resource/ISO_639:yi', - }, - - { - id: 'https://w3id.org/idsa/code/YO', - idShort: 'YO', - label: 'Yoruba', - sameAs: 'https://dbpedia.org/resource/ISO_639:yo', - }, - - { - id: 'https://w3id.org/idsa/code/ZA', - idShort: 'ZA', - label: 'Zhuang, Chuang', - sameAs: 'https://dbpedia.org/resource/ISO_639:za', - }, - - { - id: 'https://w3id.org/idsa/code/ZU', - idShort: 'ZU', - label: 'Zulu', - sameAs: 'https://dbpedia.org/resource/ISO_639:zu', - }, -]; diff --git a/src/app/shared/form-elements/language-select/language-select-item.service.ts b/src/app/shared/form-elements/language-select/language-select-item.service.ts deleted file mode 100644 index 4c1f8da9a..000000000 --- a/src/app/shared/form-elements/language-select/language-select-item.service.ts +++ /dev/null @@ -1,70 +0,0 @@ -import {Injectable} from '@angular/core'; -import {LANGUAGE_SELECT_DATA} from './language-select-data'; -import {LanguageSelectItem} from './language-select-item'; - -/** - * Access list of available LanguageSelectItems - */ -@Injectable({providedIn: 'root'}) -export class LanguageSelectItemService { - /** - * Partition LanguageSelectItems into highlighted and other. - * Usability: See important options first and close to each other. - */ - highlightItemIds = [ - 'https://w3id.org/idsa/code/MULTI_LINGUAL', - 'https://w3id.org/idsa/code/DE', - 'https://w3id.org/idsa/code/EN', - ]; - highlightItems: LanguageSelectItem[]; - otherItems: LanguageSelectItem[]; - itemsByKeyword: Map; - - constructor() { - this.highlightItems = this.buildHighlightItems(); - this.otherItems = this.buildOtherItems(); - this.itemsByKeyword = this.buildItemLookupMap(); - } - - /** - * Find LanguageSelectItem by id - * @param id language select item id - */ - findById(id: string): LanguageSelectItem { - let item = this.itemsByKeyword.get(id); - if (!item) { - item = {id, label: id}; - } - return item; - } - - english(): LanguageSelectItem { - return this.findById('https://w3id.org/idsa/code/EN'); - } - - private buildHighlightItems(): LanguageSelectItem[] { - return LANGUAGE_SELECT_DATA.filter((it) => - this.highlightItemIds.includes(it.id), - ); - } - - private buildOtherItems(): LanguageSelectItem[] { - return LANGUAGE_SELECT_DATA.filter( - (it) => !this.highlightItemIds.includes(it.id), - ); - } - - private buildItemLookupMap(): Map { - const map = new Map(); - LANGUAGE_SELECT_DATA.forEach((it) => { - map.set(it.id, it); - if (it.idShort) { - map.set(it.idShort, it); - } - if (it.sameAs) { - map.set(it.sameAs, it); - } - }); - return map; - } -} diff --git a/src/app/shared/form-elements/language-select/language-select-item.ts b/src/app/shared/form-elements/language-select/language-select-item.ts deleted file mode 100644 index 175da8983..000000000 --- a/src/app/shared/form-elements/language-select/language-select-item.ts +++ /dev/null @@ -1,7 +0,0 @@ -export interface LanguageSelectItem { - id: string; - label: string; - comment?: string; - idShort?: string; - sameAs?: string; -} diff --git a/src/app/shared/form-elements/language-select/language-select.component.html b/src/app/shared/form-elements/language-select/language-select.component.html deleted file mode 100644 index fee39aa15..000000000 --- a/src/app/shared/form-elements/language-select/language-select.component.html +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - {{ item.label }} - - - - {{ item.label }} - - - diff --git a/src/app/shared/form-elements/language-select/language-select.component.ts b/src/app/shared/form-elements/language-select/language-select.component.ts deleted file mode 100644 index 8d244a96d..000000000 --- a/src/app/shared/form-elements/language-select/language-select.component.ts +++ /dev/null @@ -1,18 +0,0 @@ -import {Component, Input} from '@angular/core'; -import {FormControl} from '@angular/forms'; -import {LanguageSelectItem} from './language-select-item'; -import {LanguageSelectItemService} from './language-select-item.service'; - -@Component({ - selector: 'language-select', - templateUrl: 'language-select.component.html', -}) -export class LanguageSelectComponent { - @Input() - label: string | null = null; - - @Input() - control!: FormControl; - - constructor(public items: LanguageSelectItemService) {} -} diff --git a/src/app/shared/form-elements/participant-id-select/participant-id-select.component.html b/src/app/shared/form-elements/participant-id-select/participant-id-select.component.html deleted file mode 100644 index d7804ad1a..000000000 --- a/src/app/shared/form-elements/participant-id-select/participant-id-select.component.html +++ /dev/null @@ -1,29 +0,0 @@ - - Consumer's Participant IDs - - - {{ participantId }} - - - - - - You can find the connector’s Participant ID under “Connector Properties” on - its dashboard. Ask for it from the data consumers you want to share your - data offer with. - - diff --git a/src/app/shared/form-elements/participant-id-select/participant-id-select.component.ts b/src/app/shared/form-elements/participant-id-select/participant-id-select.component.ts deleted file mode 100644 index 931c06645..000000000 --- a/src/app/shared/form-elements/participant-id-select/participant-id-select.component.ts +++ /dev/null @@ -1,38 +0,0 @@ -import {COMMA, ENTER, SEMICOLON} from '@angular/cdk/keycodes'; -import {Component, HostBinding, Input} from '@angular/core'; -import {FormControl} from '@angular/forms'; -import {MatChipInputEvent} from '@angular/material/chips'; -import {ParticipantIdLocalization} from '../../../core/services/participant-id-localization'; -import {removeOnce} from '../../../core/utils/array-utils'; - -@Component({ - selector: 'participant-id-select', - templateUrl: 'participant-id-select.component.html', -}) -export class ParticipantIdSelectComponent { - separatorKeysCodes: number[] = [ENTER, COMMA, SEMICOLON]; - - @Input() - control!: FormControl; - - @HostBinding('class.flex') - @HostBinding('class.flex-row') - cls = true; - - constructor(public participantIdLocalization: ParticipantIdLocalization) {} - - remove(participantId: string) { - this.control.setValue(removeOnce(this.control.value, participantId)); - } - - add(event: MatChipInputEvent): void { - const participantIds = (event.value || '') - .split(/[,;]/) - .map((it) => it.trim()) - .filter((it) => it); - if (participantIds.length) { - this.control.setValue([...this.control.value, ...participantIds]); - } - event.chipInput.clear(); - } -} diff --git a/src/app/shared/form-elements/policy-operator-select/policy-operator-select.component.html b/src/app/shared/form-elements/policy-operator-select/policy-operator-select.component.html deleted file mode 100644 index 039f427a2..000000000 --- a/src/app/shared/form-elements/policy-operator-select/policy-operator-select.component.html +++ /dev/null @@ -1,11 +0,0 @@ - - {{ label }} - - - {{ operator.title }} - - - diff --git a/src/app/shared/form-elements/policy-operator-select/policy-operator-select.component.ts b/src/app/shared/form-elements/policy-operator-select/policy-operator-select.component.ts deleted file mode 100644 index 3ae0c22c2..000000000 --- a/src/app/shared/form-elements/policy-operator-select/policy-operator-select.component.ts +++ /dev/null @@ -1,24 +0,0 @@ -import {Component, HostBinding, Input} from '@angular/core'; -import {UntypedFormControl} from '@angular/forms'; -import {TranslateService} from '@ngx-translate/core'; -import {PolicyOperatorConfig} from '../../business/policy-editor/model/policy-operators'; - -@Component({ - selector: 'policy-operator-select', - templateUrl: 'policy-operator-select.component.html', -}) -export class PolicyOperatorSelectComponent { - @Input() - operators: PolicyOperatorConfig[] = []; - - @Input() - control!: UntypedFormControl; - - @HostBinding('class.flex') - @HostBinding('class.flex-row') - cls = true; - - constructor(public translationService: TranslateService) {} - - label = this.translationService.instant('general.operator'); -} diff --git a/src/app/shared/form-elements/transport-mode-select/transport-mode-select-data.ts b/src/app/shared/form-elements/transport-mode-select/transport-mode-select-data.ts deleted file mode 100644 index 9444eb723..000000000 --- a/src/app/shared/form-elements/transport-mode-select/transport-mode-select-data.ts +++ /dev/null @@ -1,23 +0,0 @@ -import {TransportModeSelectItem} from './transport-mode-select-item'; - -export const TRANSPORT_MODE_SELECT_DATA: TransportModeSelectItem[] = [ - { - id: 'Rail', - label: 'Rail', - }, - - { - id: 'Road', - label: 'Road', - }, - - { - id: 'Water', - label: 'Water', - }, - - { - id: 'Air', - label: 'Air', - }, -]; diff --git a/src/app/shared/form-elements/transport-mode-select/transport-mode-select-item.service.ts b/src/app/shared/form-elements/transport-mode-select/transport-mode-select-item.service.ts deleted file mode 100644 index 241865c62..000000000 --- a/src/app/shared/form-elements/transport-mode-select/transport-mode-select-item.service.ts +++ /dev/null @@ -1,27 +0,0 @@ -import {Injectable} from '@angular/core'; -import {associateBy} from 'src/app/core/utils/map-utils'; -import {TRANSPORT_MODE_SELECT_DATA} from './transport-mode-select-data'; -import {TransportModeSelectItem} from './transport-mode-select-item'; - -/** - * Access list of available TransportModeSelectItems - */ -@Injectable({providedIn: 'root'}) -export class TransportModeSelectItemService { - itemsById = associateBy(TRANSPORT_MODE_SELECT_DATA, (it) => it.id); - - /** - * Find TransportModeSelectItem by id - * @param id language select item id - */ - findById(id: string): TransportModeSelectItem { - const item = this.itemsById.get(id); - if (item != null) { - return item; - } - return { - id, - label: id, - }; - } -} diff --git a/src/app/shared/form-elements/transport-mode-select/transport-mode-select-item.ts b/src/app/shared/form-elements/transport-mode-select/transport-mode-select-item.ts deleted file mode 100644 index f516b6cfa..000000000 --- a/src/app/shared/form-elements/transport-mode-select/transport-mode-select-item.ts +++ /dev/null @@ -1,4 +0,0 @@ -export interface TransportModeSelectItem { - id: string; - label: string; -} diff --git a/src/app/shared/form-elements/transport-mode-select/transport-mode-select.component.html b/src/app/shared/form-elements/transport-mode-select/transport-mode-select.component.html deleted file mode 100644 index fd8e9a3c3..000000000 --- a/src/app/shared/form-elements/transport-mode-select/transport-mode-select.component.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - {{ item.label }} - - - diff --git a/src/app/shared/form-elements/transport-mode-select/transport-mode-select.component.ts b/src/app/shared/form-elements/transport-mode-select/transport-mode-select.component.ts deleted file mode 100644 index 4a5edd6e8..000000000 --- a/src/app/shared/form-elements/transport-mode-select/transport-mode-select.component.ts +++ /dev/null @@ -1,18 +0,0 @@ -import {Component, Input} from '@angular/core'; -import {FormControl} from '@angular/forms'; -import {TRANSPORT_MODE_SELECT_DATA} from './transport-mode-select-data'; -import {TransportModeSelectItem} from './transport-mode-select-item'; - -@Component({ - selector: 'transport-mode-select', - templateUrl: 'transport-mode-select.component.html', -}) -export class TransportModeSelectComponent { - @Input() - label!: string; - - @Input() - control!: FormControl; - - items = TRANSPORT_MODE_SELECT_DATA; -} diff --git a/src/app/shared/pipes-and-directives/autofocus.direcitive.ts b/src/app/shared/pipes-and-directives/autofocus.direcitive.ts deleted file mode 100644 index 20f0377ac..000000000 --- a/src/app/shared/pipes-and-directives/autofocus.direcitive.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {AfterViewInit, Directive, ElementRef} from '@angular/core'; - -@Directive({ - selector: '[autofocus]', -}) -export class AutofocusDirective implements AfterViewInit { - constructor(private elementRef: ElementRef) {} - - ngAfterViewInit() { - const ele = this.elementRef.nativeElement as HTMLInputElement; - setTimeout(() => { - ele.focus(); - ele.select(); - }, 100); - } -} diff --git a/src/app/shared/pipes-and-directives/compare-by-field.pipe.ts b/src/app/shared/pipes-and-directives/compare-by-field.pipe.ts deleted file mode 100644 index 59b6f4b34..000000000 --- a/src/app/shared/pipes-and-directives/compare-by-field.pipe.ts +++ /dev/null @@ -1,11 +0,0 @@ -import {Pipe, PipeTransform} from '@angular/core'; - -/** - * Creates Compare By Function for Angular Material compareWith parameters - */ -@Pipe({name: 'compareByField'}) -export class CompareByFieldPipe implements PipeTransform { - transform(key: string): (a: any, b: any) => boolean { - return (a, b) => a === b || (a != null && b != null && a[key] === b[key]); - } -} diff --git a/src/app/shared/pipes-and-directives/external-link.directive.ts b/src/app/shared/pipes-and-directives/external-link.directive.ts deleted file mode 100644 index c47bcbbc2..000000000 --- a/src/app/shared/pipes-and-directives/external-link.directive.ts +++ /dev/null @@ -1,14 +0,0 @@ -import {AfterViewInit, Directive, ElementRef} from '@angular/core'; - -@Directive({ - selector: '[externalLink]', -}) -export class ExternalLinkDirective implements AfterViewInit { - constructor(private elementRef: ElementRef) {} - - ngAfterViewInit() { - const element = this.elementRef.nativeElement as HTMLAnchorElement; - element.setAttribute('target', '_blank'); - element.setAttribute('rel', 'noopener noreferrer'); - } -} diff --git a/src/app/shared/pipes-and-directives/is-active-feature.pipe.ts b/src/app/shared/pipes-and-directives/is-active-feature.pipe.ts deleted file mode 100644 index f39cf3ad8..000000000 --- a/src/app/shared/pipes-and-directives/is-active-feature.pipe.ts +++ /dev/null @@ -1,15 +0,0 @@ -import {Pipe, PipeTransform} from '@angular/core'; -import {ActiveFeatureSet} from '../../core/config/active-feature-set'; -import {EdcUiFeature} from '../../core/config/profiles/edc-ui-feature'; - -/** - * Easily check for active features in angular templates. - */ -@Pipe({name: 'isActiveFeature'}) -export class IsActiveFeaturePipe implements PipeTransform { - constructor(private activeFeatureSet: ActiveFeatureSet) {} - - transform(feature: EdcUiFeature): boolean { - return this.activeFeatureSet.has(feature); - } -} diff --git a/src/app/shared/pipes-and-directives/remove-class.directive.ts b/src/app/shared/pipes-and-directives/remove-class.directive.ts deleted file mode 100644 index c782b8e37..000000000 --- a/src/app/shared/pipes-and-directives/remove-class.directive.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { - AfterViewChecked, - AfterViewInit, - Directive, - ElementRef, - Input, -} from '@angular/core'; - -/** - * Angular Material automatically adds CSS classes when you use their directives. - * - * But if you don't use their directives, the scrollbars in dialogs break, for example. - */ -@Directive({ - selector: '[removeClass]', -}) -export class RemoveClassDirective implements AfterViewChecked, AfterViewInit { - @Input() - removeClass!: string; - - constructor(private elementRef: ElementRef) {} - - ngAfterViewInit() { - this.removeClassIfNecessary(); - } - - ngAfterViewChecked() { - this.removeClassIfNecessary(); - } - - private removeClassIfNecessary() { - const classList = (this.elementRef.nativeElement as HTMLElement).classList; - if (classList.contains(this.removeClass)) { - classList.remove(this.removeClass); - } - } -} diff --git a/src/app/shared/pipes-and-directives/track-by-field.directive.ts b/src/app/shared/pipes-and-directives/track-by-field.directive.ts deleted file mode 100644 index 3e39e5e79..000000000 --- a/src/app/shared/pipes-and-directives/track-by-field.directive.ts +++ /dev/null @@ -1,24 +0,0 @@ -import {NgForOf} from '@angular/common'; -import {Attribute, Directive, Host, TrackByFunction} from '@angular/core'; - -export const newTrackByFn = - (key: keyof T): TrackByFunction => - (_, item: T) => - item == null ? null : item[key] ?? item; - -/** - * Creates Track By Function for ngFor loops - */ -@Directive({ - selector: '[trackByField]', -}) -export class TrackByFieldDirective { - constructor( - @Host() ngForOf: NgForOf, - @Attribute('trackByField') private readonly trackByField: string, - ) { - if (!ngForOf.ngForTrackBy) { - ngForOf.ngForTrackBy = newTrackByFn(this.trackByField); - } - } -} diff --git a/src/app/shared/pipes-and-directives/values.pipe.ts b/src/app/shared/pipes-and-directives/values.pipe.ts deleted file mode 100644 index 13165b904..000000000 --- a/src/app/shared/pipes-and-directives/values.pipe.ts +++ /dev/null @@ -1,11 +0,0 @@ -import {Pipe, PipeTransform} from '@angular/core'; - -/** - * `Object.values(...)` can't be used from angular templates. - */ -@Pipe({name: 'values'}) -export class ValuesPipe implements PipeTransform { - transform(obj: T): T[keyof T][] { - return Object.values(obj || {}); - } -} diff --git a/src/app/shared/shared.module.ts b/src/app/shared/shared.module.ts deleted file mode 100644 index 25b656730..000000000 --- a/src/app/shared/shared.module.ts +++ /dev/null @@ -1,287 +0,0 @@ -import {ClipboardModule} from '@angular/cdk/clipboard'; -import {CommonModule} from '@angular/common'; -import {NgModule} from '@angular/core'; -import {FormsModule, ReactiveFormsModule} from '@angular/forms'; -import {MatBadgeModule} from '@angular/material/badge'; -import {MatButtonModule} from '@angular/material/button'; -import {MatButtonToggleModule} from '@angular/material/button-toggle'; -import {MatCardModule} from '@angular/material/card'; -import {MatCheckboxModule} from '@angular/material/checkbox'; -import {MatChipsModule} from '@angular/material/chips'; -import { - DateAdapter, - MAT_DATE_LOCALE, - MatNativeDateModule, -} from '@angular/material/core'; -import {MatDatepickerModule} from '@angular/material/datepicker'; -import {MatDialogModule} from '@angular/material/dialog'; -import {MatDividerModule} from '@angular/material/divider'; -import {MatExpansionModule} from '@angular/material/expansion'; -import { - MAT_FORM_FIELD_DEFAULT_OPTIONS, - MatFormFieldDefaultOptions, - MatFormFieldModule, -} from '@angular/material/form-field'; -import {MatGridListModule} from '@angular/material/grid-list'; -import {MatIconModule} from '@angular/material/icon'; -import {MatInputModule} from '@angular/material/input'; -import {MatListModule} from '@angular/material/list'; -import {MatMenuModule} from '@angular/material/menu'; -import {MatPaginatorModule} from '@angular/material/paginator'; -import {MatProgressBarModule} from '@angular/material/progress-bar'; -import {MatProgressSpinnerModule} from '@angular/material/progress-spinner'; -import {MatRadioModule} from '@angular/material/radio'; -import {MatSelectModule} from '@angular/material/select'; -import {MatSidenavModule} from '@angular/material/sidenav'; -import {MatSlideToggleModule} from '@angular/material/slide-toggle'; -import {MatSnackBarModule} from '@angular/material/snack-bar'; -import {MatStepperModule} from '@angular/material/stepper'; -import {MatTableModule} from '@angular/material/table'; -import {MatTabsModule} from '@angular/material/tabs'; -import {MatToolbarModule} from '@angular/material/toolbar'; -import { - MAT_TOOLTIP_DEFAULT_OPTIONS, - MAT_TOOLTIP_DEFAULT_OPTIONS_FACTORY, - MatTooltipDefaultOptions, - MatTooltipModule, -} from '@angular/material/tooltip'; -import {TranslateModule} from '@ngx-translate/core'; -import {NgChartsModule} from 'ng2-charts'; -import {NgxJsonViewerModule} from 'ngx-json-viewer'; -import {CustomDateAdapter} from '../core/adapters/custom-date-adapter'; -import {AssetCardTagListComponent} from './business/asset-card-tag-list/asset-card-tag-list.component'; -import {AssetDetailDialogDataService} from './business/asset-detail-dialog/asset-detail-dialog-data.service'; -import {AssetDetailDialogComponent} from './business/asset-detail-dialog/asset-detail-dialog.component'; -import {AssetDetailDialogService} from './business/asset-detail-dialog/asset-detail-dialog.service'; -import {AssetPropertyGridGroupBuilder} from './business/asset-detail-dialog/asset-property-grid-group-builder'; -import {PolicyPropertyFieldBuilder} from './business/asset-detail-dialog/policy-property-field-builder'; -import {ConditionsForUseDialogComponent} from './business/conditions-for-use-dialog/conditions-for-use-dialog.component'; -import {ConditionsForUseDialogService} from './business/conditions-for-use-dialog/conditions-for-use-dialog.service'; -import {ContractOfferIconComponent} from './business/contract-offer-icon/contract-offer-icon.component'; -import {ContractOfferMiniListComponent} from './business/contract-offer-mini-list/contract-offer-mini-list.component'; -import {DataOfferCardsComponent} from './business/data-offer-cards/data-offer-cards.component'; -import {EditAssetFormComponent} from './business/edit-asset-form/edit-asset-form.component'; -import {InitiateNegotiationConfirmTosDialogComponent} from './business/initiate-negotiation-confirm-tos-dialog/initiate-negotiation-confirm-tos-dialog.component'; -import {PolicyFormAddMenuComponent} from './business/policy-editor/editor/policy-form-add-menu/policy-form-add-menu.component'; -import {PolicyFormExpressionConstraintComponent} from './business/policy-editor/editor/policy-form-expression-constraint/policy-form-expression-constraint.component'; -import {PolicyFormExpressionEmptyComponent} from './business/policy-editor/editor/policy-form-expression-empty/policy-form-expression-empty.component'; -import {PolicyFormExpressionMultiComponent} from './business/policy-editor/editor/policy-form-expression-multi/policy-form-expression-multi.component'; -import {PolicyFormExpressionComponent} from './business/policy-editor/editor/policy-form-expression/policy-form-expression.component'; -import {PolicyFormRemoveButton} from './business/policy-editor/editor/policy-form-remove-button/policy-form-remove-button.component'; -import {PolicyExpressionRecipeService} from './business/policy-editor/editor/recipes/policy-expression-recipe.service'; -import {TimespanRestrictionDialogComponent} from './business/policy-editor/editor/recipes/timespan-restriction-dialog/timespan-restriction-dialog.component'; -import {PolicyMapper} from './business/policy-editor/model/policy-mapper'; -import {PolicyMultiExpressionService} from './business/policy-editor/model/policy-multi-expressions'; -import {PolicyOperatorService} from './business/policy-editor/model/policy-operators'; -import {PolicyVerbService} from './business/policy-editor/model/policy-verbs'; -import {PolicyExpressionComponent} from './business/policy-editor/renderer/policy-expression/policy-expression.component'; -import {PolicyRendererComponent} from './business/policy-editor/renderer/policy-renderer/policy-renderer.component'; -import {TransferHistoryMiniListComponent} from './business/transfer-history-mini-list/transfer-history-mini-list.component'; -import {AgoComponent} from './common/ago/ago.component'; -import {AgoPipe} from './common/ago/ago.pipe'; -import {ConfirmationDialogComponent} from './common/confirmation-dialog/confirmation-dialog.component'; -import {DateComponent} from './common/date/date.component'; -import {EmptyStateComponent} from './common/empty-state/empty-state.component'; -import {ErrorStateComponent} from './common/error-state/error-state.component'; -import {HorizontalSectionDividerComponent} from './common/horizontal-section-divider/horizontal-section-divider.component'; -import {JsonDialogComponent} from './common/json-dialog/json-dialog.component'; -import {JsonDialogService} from './common/json-dialog/json-dialog.service'; -import {LanguageSelectorComponent} from './common/language-selector/language-selector.component'; -import {LoadingStateComponent} from './common/loading-state/loading-state.component'; -import {MarkdownDescriptionComponent} from './common/markdown-description/markdown-description.component'; -import {PropertyGridGroupComponent} from './common/property-grid-group/property-grid-group.component'; -import {PropertyGridComponent} from './common/property-grid/property-grid.component'; -import {TranslateWithSlotComponent} from './common/translate-with-slot/translate-with-slot.component'; -import {TruncatedShortDescription} from './common/truncated-short-description/truncated-short-description.component'; -import {UrlListDialogComponent} from './common/url-list-dialog/url-list-dialog.component'; -import {UrlListDialogService} from './common/url-list-dialog/url-list-dialog.service'; -import {DataAddressTypeSelectComponent} from './form-elements/data-address-type-select/data-address-type-select.component'; -import {DataCategorySelectComponent} from './form-elements/data-category-select/data-category-select.component'; -import {DataSubcategoryItemsPipe} from './form-elements/data-subcategory-select/data-subcategory-items.pipe'; -import {DataSubcategorySelectComponent} from './form-elements/data-subcategory-select/data-subcategory-select.component'; -import {EditAssetFormDataAddressTypeSelectComponent} from './form-elements/edit-asset-form-data-address-type-select/edit-asset-form-data-address-type-select.component'; -import {EditAssetFormGroupComponent} from './form-elements/edit-asset-form-group/edit-asset-form-group.component'; -import {EditAssetFormInputComponent} from './form-elements/edit-asset-form-input/edit-asset-form-input.component'; -import {EditAssetFormLabelComponent} from './form-elements/edit-asset-form-label/edit-asset-form-label.component'; -import {EditAssetFormTextareaComponent} from './form-elements/edit-asset-form-textarea/edit-asset-form-textarea.component'; -import {KeywordSelectComponent} from './form-elements/keyword-select/keyword-select.component'; -import {LanguageSelectComponent} from './form-elements/language-select/language-select.component'; -import {ParticipantIdSelectComponent} from './form-elements/participant-id-select/participant-id-select.component'; -import {PolicyOperatorSelectComponent} from './form-elements/policy-operator-select/policy-operator-select.component'; -import {TransportModeSelectComponent} from './form-elements/transport-mode-select/transport-mode-select.component'; -import {AutofocusDirective} from './pipes-and-directives/autofocus.direcitive'; -import {CompareByFieldPipe} from './pipes-and-directives/compare-by-field.pipe'; -import {ExternalLinkDirective} from './pipes-and-directives/external-link.directive'; -import {IsActiveFeaturePipe} from './pipes-and-directives/is-active-feature.pipe'; -import {RemoveClassDirective} from './pipes-and-directives/remove-class.directive'; -import {TrackByFieldDirective} from './pipes-and-directives/track-by-field.directive'; -import {ValuesPipe} from './pipes-and-directives/values.pipe'; - -const COMPONENTS: NgModule['declarations'] = [ - // ./common - AgoComponent, - AgoPipe, - ConfirmationDialogComponent, - DateComponent, - EmptyStateComponent, - ErrorStateComponent, - HorizontalSectionDividerComponent, - JsonDialogComponent, - LanguageSelectorComponent, - LoadingStateComponent, - MarkdownDescriptionComponent, - PropertyGridComponent, - PropertyGridGroupComponent, - TruncatedShortDescription, - UrlListDialogComponent, - TranslateWithSlotComponent, - - // ./business - AssetCardTagListComponent, - AssetDetailDialogComponent, - ConditionsForUseDialogComponent, - ContractOfferIconComponent, - ContractOfferMiniListComponent, - DataOfferCardsComponent, - InitiateNegotiationConfirmTosDialogComponent, - TransferHistoryMiniListComponent, - - // ./business/asset-edit-form - EditAssetFormComponent, - EditAssetFormGroupComponent, - EditAssetFormLabelComponent, - EditAssetFormInputComponent, - EditAssetFormTextareaComponent, - DataSubcategorySelectComponent, - DataSubcategoryItemsPipe, - - // ./business/policy-editor - PolicyFormAddMenuComponent, - PolicyFormExpressionComponent, - PolicyFormExpressionEmptyComponent, - PolicyFormExpressionConstraintComponent, - PolicyFormExpressionMultiComponent, - PolicyFormRemoveButton, - TimespanRestrictionDialogComponent, - PolicyRendererComponent, - PolicyExpressionComponent, - - // ./form-elements - DataAddressTypeSelectComponent, - DataCategorySelectComponent, - DataSubcategorySelectComponent, - DataSubcategoryItemsPipe, - EditAssetFormDataAddressTypeSelectComponent, - EditAssetFormGroupComponent, - EditAssetFormInputComponent, - EditAssetFormLabelComponent, - EditAssetFormTextareaComponent, - KeywordSelectComponent, - LanguageSelectorComponent, - LanguageSelectComponent, - ParticipantIdSelectComponent, - PolicyOperatorSelectComponent, - TransportModeSelectComponent, - - // ./pipes-and-directives - AutofocusDirective, - CompareByFieldPipe, - ExternalLinkDirective, - IsActiveFeaturePipe, - RemoveClassDirective, - TrackByFieldDirective, - ValuesPipe, -]; - -const MODULES = [ - // Angular - TranslateModule, - - // Angular CDK - ClipboardModule, - - // Angular Material - MatBadgeModule, - MatButtonModule, - MatButtonToggleModule, - MatCardModule, - MatCheckboxModule, - MatChipsModule, - MatDatepickerModule, - MatDialogModule, - MatDividerModule, - MatExpansionModule, - MatFormFieldModule, - MatGridListModule, - MatIconModule, - MatInputModule, - MatListModule, - MatMenuModule, - MatNativeDateModule, - MatPaginatorModule, - MatProgressBarModule, - MatProgressSpinnerModule, - MatRadioModule, - MatSelectModule, - MatSidenavModule, - MatSlideToggleModule, - MatSnackBarModule, - MatStepperModule, - MatTableModule, - MatTabsModule, - MatToolbarModule, - MatTooltipModule, - - // NGX Json Viewer - NgxJsonViewerModule, - - // NgCharts - NgChartsModule, -]; - -@NgModule({ - imports: [ - // Angular - CommonModule, - FormsModule, - ReactiveFormsModule, - - // Angular Material - ...MODULES, - ], - exports: [...MODULES, ...COMPONENTS], - declarations: COMPONENTS, - providers: [ - AssetDetailDialogDataService, - AssetDetailDialogService, - AssetPropertyGridGroupBuilder, - ConditionsForUseDialogService, - PolicyPropertyFieldBuilder, - JsonDialogService, - PolicyExpressionRecipeService, - UrlListDialogService, - PolicyMultiExpressionService, - PolicyOperatorService, - PolicyVerbService, - PolicyMapper, - - {provide: DateAdapter, useClass: CustomDateAdapter}, - - {provide: MAT_DATE_LOCALE, useValue: 'en-GB'}, - { - provide: MAT_FORM_FIELD_DEFAULT_OPTIONS, - useValue: { - appearance: 'outline', - color: 'accent', - } as MatFormFieldDefaultOptions, - }, - { - provide: MAT_TOOLTIP_DEFAULT_OPTIONS, - useValue: { - ...MAT_TOOLTIP_DEFAULT_OPTIONS_FACTORY(), - disableTooltipInteractivity: true, - }, - }, - ], -}) -export class SharedModule {} diff --git a/src/assets/config/.gitignore b/src/assets/config/.gitignore deleted file mode 100644 index f6bcf9c06..000000000 --- a/src/assets/config/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# This file will be generated -# - in local dev before running ng serve -# - in docker container before starting nginx -app-config.json -app-configuration.json - -# Any backup files / old files -app.config*.json diff --git a/src/assets/config/ui-build-date.txt b/src/assets/config/ui-build-date.txt deleted file mode 100644 index 162dad10f..000000000 --- a/src/assets/config/ui-build-date.txt +++ /dev/null @@ -1 +0,0 @@ -2023-05-25T14:30:00Z diff --git a/src/assets/config/version.txt b/src/assets/config/version.txt deleted file mode 100644 index 25ac521fa..000000000 --- a/src/assets/config/version.txt +++ /dev/null @@ -1,3 +0,0 @@ -The GitHub Pipeline .github/workflows/build-and-release-image.yaml will replace this file during build time with -the commit information (SHA, author and commit message) of the built image. -This file will be served to allow checking for the exact source code version of a deployed edc-ui. diff --git a/src/assets/fonts/Inter-Bold.woff2 b/src/assets/fonts/Inter-Bold.woff2 deleted file mode 100644 index 0f1b157633c5f8485fe9e79585daa89666cc07f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 111040 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 }ID2 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 z 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 diff --git a/src/assets/fonts/Inter-Light.woff2 b/src/assets/fonts/Inter-Light.woff2 deleted file mode 100644 index dbe61437a17faaaccc11a626f3655c3e497b61a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109992 zcmV)NK)1hlPew8T0RR910j;P24FCWD1n}el0j)~_1ONa400000000000000000000 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

Z5~8)F8~!)7G7rG9Eh(90U_ajf z-`;Tl)ei{-xL*Uv5Qyl%&VGt`pxr|sTLeSc|1^yMP?A6a0rj3ZHoF@x;jl1+!s0?= zBIX6epW)h>K5U7WNy}-O)VQv085YTNeB0n`8%Tz)AdxQ9F~IGUh(&<_qti=NbKRlz z_Y)Hp{g{H>l0w;H_xz5$@@d_3qHcVFh>&31#ax0^t%%VKb z+V(dCP&GBZExsPVFQ_P~2`W&CA=rpRP_dGw3q;b0KCcGb)R$mZIdfgu{VnW8TOF2H zgMRtfbqtpDLJHpgf!ToTCP! zQBn$XxkzkgMvS7BM;TgRBDl>7lO^uX2S+d6;E;|}LCf2wonYNG+>2{dxE6AUOa zn3#csTQHJHxdITj&L1m`1e}yA43#WYrieA2jw5_(OHR%>R($eqJU@R`-J|`#_ZnHa ztCM!?QvwKhJTO_6CQdj&NPZxDAqs`25yC-a6=}5fX#}lQ&MZV&nG5Xs|DDQ9yXzUmZuy#vfnU@T}?k9pU2~5^~XIoj*Fdc!(#k-VaIV zgQ;lWQN!}9H#%qPXD#FK;X=y%Z1~5m2B_j)kjbXrOPi({XEYc&b(-A26K=>rVifmI8vrtJJYOulO!xckzkKG7JKfvH}9MavM35N+}T5 zAJZCOvMqV+xBnd4cuomH&QE|l95E7gnB2q<#rtwe?j+BrX!^1-4v81Z=TfkX<`@xI~)24&f z`2I0;JsowieC{5ATQGksB8mmmqY5f<+KFs@Uy$8X#+&i`1p>glUSB=;K+!yBvv z#i6|>UMEmL3G?2VXnqmKQ%@K7$hH>$o)|LRXO@@^K8agU|L`NjbH1Vb8y}0s2Iy!+ z#DLGlh(l+uFN6zNr+EhC&xg&w`*j}AOHMfNx0OaP3%ZKV>a4#{LuZ2p#NN z_NTQv13CrrPqj$=+F9Cm;DhxLrqx4|2KYr`#0e;|B3&w`mcQ&z^0v5h(Ro`6VJr8R zM|~1ls_gnBTQA<1heQzc*36-G^TDEr}2oWDaz&oi7{KKs=&XdgBXaAh9x3WX7P~hjGhS( z38`5L5OR#51DMKpv{ZGG4x*qqhui4~;?d%MdC-i>g74DYDVHp}#gy2#No&GoO1YB) z5ztadG%zK`)Nx@Aj5rWH!vjfnJ;Y8N*H6P(d+yAS^?J@OHXB{|TQU7uiV0wc6mnU} zL{7fXQHm1%$19uV$55xrbpS~%LRUIcW(7UmIBaS_sr@o<2%D-ejl|1IPR6;PU;0zD z|4g3#bd0R4?Vr-q@YE-suACdh%?)IQ-Ugr3{gm!p#ueNF;|XJ@(`a4LR)tuaMq(6NEk#0p zWQ5930!6u-uEx(vmn}3sQsM4a3?cxWfWvX>%T<;|NK(>&Wy?|1)@;yv!IY#KWC?VE zDh-p$q9vD~MsIw~z(Bjm(veDdyjUJ2zr%5<#`S02Vm(AyFfjYMfQoyX?{rx36*2$b z_AzZQ7?RD#X)5*Z!TQ9aW$0GNg6@gjY5MZ#E+`#?-bfE(dd85A9D93KNjdRd3V4wrYcFZJvf~tTLj$N6->XW~<`>SX3?0>Y$F23Y& z>$CYmFjp}Vvra~Tt4m*UIUbHEDp8}|rovBXXj-PMtZG{4{2*E7(oQa%X63QxBpW|(j{ZQshO%qX=ZAEQ@A{Dc3)d&u{tRAJ7=o&wb*|@jk+!bqZk6}O z_jZ9Y&-ZSH^N;C7DkupG3rupkQc)m52Kri zjD&))w79&e?3fHRN)6r3_r;$Dd@_5eCYuQ8LSs#eWD=J|nIUnshjeb};F0}1@a+do z2K`Q-pLR4B5=EFB^hD%Q66+oAtkJcB{&oS|WJ1MKRTxmSt_7E7xW0 zb%!x7n)0F;xTZ5>Wa|cG9Yfs523EIIXkz2yapl6%PzZboIn8>bG3M&=U`#>bL9xit zD8RvA8pjEYyA-J)G;Aj{D&+!+U<%t#n?S6eStWDJuKu0LB|Qy_aiP4X0_vi#^)grc za(#tKF*p3z_VMXFcKPK`V{>Y!rdA{@Z`zt5M~W?(m0~3b$psZG-};O&%+T;doh2}Z z%XfM`w%lZU<5uXvDagBoM6RXGzQdHmMqAZgp5=Gw=iPF$S>IUPjsD&qB@B(=l^zSuUVL{3{vA5ISaM#w+o@-aQ3yE%)sVhsYD=Rbh z02KXNsX!IqQ_`mx<NcMN!2cqaYd{gZl|Rx{?mc zr=+}scvhvV^u>v|xRmj68x*|ZLST%1LxLd~&4*_Te}Ld_wIhD}0}*FZS_IPhF!fzd+F z7Ha%$f^pp9tIZI!TdlP+|7!3z;Shd}+%F0I;JEu4EhgV)?5!ymqI6I4`g2b3K*(C* zo6T2bmL=gcp=eQs>P0DiA7>yQyZ3|&1MBC*W}YKv zs2%a0GE#5M|GSB$BPzP(@@>5uKkOPch<%j^mEVr05b(D zeD^Wvpwjbg*HN;GvD+l=-NJM2wZ+NFGb&wQ~&uD|Dx?6JIX2fC>`r|lZzAsgdG zE8(fD;LR!Qk3Ftf+Vn4oi2BVi7DG(B7LivRJkw4)ZWeB?4gW=e0;&i$l@WSNa-({v zPA^ctLR#`_#k?gziy3xF)-@g7ZFunAtJjBrFSVU_7JN6+s7`p$%}EW7=6=qfYH1ki zvK?Tv9r-;bop~&-wIaXuG}NwJ!@0Hd<-nH{E-5hvl~{wgKBWv3_ zi*g{0f}fg=ow~?VyZ8x8bj@jX%{-Jwe}e{7vj=BQgl;n?= z2EUz#V+5ert#lwAJceqMF^u+hdI85wcq&(|94_t;BS2wG7JGNQdwbco3WhW4?|yk2 z(cfm08{)tVYobltH}^5UuqP3NR%9?kL7K!95*Bw}WlW5fN}v$M$inlCS}s@0m%*0= zlh+1)ox0=qhaS`aC`N_DX5LfazG64}O9xv=PD_dRp25o0Q14hx8X=Do!xhNS3rx%m zO`Tvlw@qHQjST}r=W7o~Fl$Ac>ZuYVP;EA9rGDG{c9moXw|8`KxG*#&cs?p6To8!k z_!cTIW}eEtkRLc9b+nX(w+fX_4CaAGc69XR3QU8;1A$SBVuPp4x8ntmQ?Qr;#|IoU zXhfw+f|3}q(X=78b_gCh@?Sn`C?F$Mjs_dU^;SC+@t-wmW}^wU=j&dIQCI+Gt>=5) z{0$2uq8n1uH&b{w@zUW}Xk)g_x2t_Ltt&^~$pMfy9`jp+=sGa=K8OBb*50JCQSe+- z_vhM~M8COF-l{IHWsh~KhK*a=+8ujyqPsAa=R_=x+!NxlT5@}p5~|xAI&=bCgyY(Kg*fG4 z>10k36sH4h9S(wv6e?==J# zFY;Uf-%<<@2-{D9m-3sz;;u8&u58@CEW4SaKG~#e9Qc z#@CTHpnvS5g8 zr(JYbPf7jOah9s;mOEGGX850&eJW5q1GKQ>ju4LTS2Y(fab7gXX0y{bBT=%n)ZklbF?JC}J_t(q5y_wE5OQvv^Cq&~6}g`)*YQ1nyZ4!;OCA!8G>Bro=8`O7 zOPAa4Xn9RByz{_;Q$}T&CV_y{usQph!37)careC^6fYY_6Htqzv<#r-7?B+_YM-nP zTJPwK(TUNl^epXHtI+CSqW6fd~IBEIh*3QlG|B!$yK ze)a|*9wsL%DK`Cee1wjclB}+_vdkWkslCb5=|%M49x#K_A3sv6#wtgv+cQF}!mJ~8 zP@rggP)JZ%U}&(UkeG;s;}rxt{7wz;3syQoJ)iO6-od^%2@x3y1u;2kS$=WhvxKOu zgs+v`;E> zSI4FE4J#t?N-9F%3?*aHe1CI6kBVnIiVRDs=F70&bWc(-m{lJh&U3KG0JO!`^< z)6{2czSU}&K2LGNE(wRQf&d!QS|r1`UBztU^|BzS2wiNtnf0=Xld*c0;+*T`7%}|< zS6f`hkC2iqe3J5K{)u2Ppv?y66ZuMl{j|B0oy46>D%A9mQ-E4(@4v)HXB#lrL z^D4p43hm9t&%O(rm+93w`}9pucmhJc{L&+i(}N}ysHktIk@rFMsqY|f*yyA9HN_O(Z< zmd<5bUwC;vZ~vr2*f^;b7ABbmv*F7e5Ai*$0lH1;jgu6)3v+fWi^!U<*f-v}!PY1ieL-WRCL$8l8fB#4;Pb1fP;h zcB?hp+o6T?W$X3yAuo6=jMu+FKMs>7i{mQ{`%Ppg&AeW}44^W@jm&&oZv;GE*Zs{M z0PyX2zyGTgREFd0DQC@WiR!^8DQ@(pb&IAQRJE`ZJdlC^^4`8dete5bkApcgNDtSj zaslB3k-)&5+`tdyJBgU~@`|TGk;98WlE^1;9|TF7Psw$}$#W zb6t~lpVVK-_jDXwC&s-Ug^QzxsS%#OB^*4RgpbsfA#+Lh8;=V8g9$sw>7`^B)bd5? zjX%+GBUfL+96}6TwWQsOe3`03gW6S3-}$jgC>QdXq}C6ctTHNANBwk9eOpft@OY8` zBG31@#(`!X}{s~Q7pxuOES6T78J(-vKO5tn{8uW}kNUP@>yyr%~=yl8D zi#g0c=2-9$jKaz^ah1Z_Bq~~NrMB!G<&yzR`sNUyN3nUeY zC3R)_6Mh98@-ctZ`?)=00?u=9fTB@sj0o$-!@JwJ*0`qrZtm{WzurH)4PO%35&;Zw zBl0kmcQH}hcwpk>^6}udZ>%UzQo59>&%0u%$J4}mLAG`)W5xg4;Ny>FWnhX|oVOzf zoK<9YMPp7&IR3tDE2*P?(*AY_Dh`mJ&`04KP7n`>P2(-ba3z8&Tx=7YSTdWBootI;pl(9g-It*7vT}g1#xyCR`6se)4Zo|E2 z-cXBMODM^1c2LAW`-9MNJ<`)YE{ZXM&htn+S`f@UQUVd7Oyz80BHSio?}kd03W(F@2$Zyrs+ZGUjdieds~j7l))C(dJ9Zn;B+nrh9Un;HIEoL z$&6kbz1js)+y|N>Q8Q8f3PFnV^LKCNgXTuV&AQg&L`k~Lv32r6EK34+Y$K!5=W$UUL~|@R?8=3X}=ig!(2tyA3$o zO6|ClyBewIk&?vXFiF9xnuk@c@aFM)A9DJ0ywd=+mnsc)`EsRf|Ho+`e#Kq{1^JqW z^q0<`TS;oO4V0i?{o1YcBD`b>7Wm9O*O%^5RW558c8&aro|T)Ju3>GEHw&NB1x@%; zBy^HgjUq`&){gPH*f6Z#I?NkXe1V{fK^n&6FonEGus;bd67J9^CIK*hgQCEVGeA2+ zjuQv5Hx+#i^~?-K2hFA#xbU0=cNP3kW!Ubq+r`;)E_Me^%i5|jP}#EU zNi2Wg#BhV#GkDd4BG8v6Fos8^{piz(pOcL(-Oz0(Lv_$-1p$k~5fW8<{k;fCRQA-6 zcN{V@p~b1PaKA0V1Ur(_T*OdAzRUXLqZYIGWYv%8eJ-#)IS4|PLB0NrG2NxoXhpT3 z+Eq=weAu!+>38Rp?%=+}A>Pz%T@}3_;NMMrz7xFOvs>a%dP&*Jc_NnK%khmK@_dQp z4oXXYz8mDT

}fXzi`KZeAE1r2&cPh)HFtdPla4j7P>xmiVz_t)MUHKuKF_(Vx_F zv8$ZnD>TtpZG;8jPbFiF{!(ff)qw2{ZXb{U#sNkA0|CjN%-WvA!SV%UTY>4a%7L+B z#3&nK%CEs;NO&P#7%txqZFjXpvgLIIA^Ap{^#{_B^Mg6j2I05M3ciZHW1419ij$mg z6?P=6J(cSgXL4uo`bAvJwS|3KUl$<~28ADT8P?V;AGK^CqD6jfAKFsBT^|Ok_J#dc zo#gS&p#3TW6bZ|e%WZn-N0g%AnqpquY+6fT;OWhjs0pjxOA1j@p|EW7eTIGPYH@5g ztK}*+rtU-BmM`Q8S)^ed`&WWwQntfj){(!A7y#$e4$*tFYL~MKK_Lm@qS|f=bO`?+ z))@P~bgca#YTh(j8AnZ^8Q;Uk^xfPi6oAVqZS8@hoA$;$V`X*g0P!bMyexfcaaKxb z6)J(|>0)?xmv^6$_x{wgf9ju*=CJ|rdRp`Q1%GV25(CbLk!!)1xu?$-`0*`BbVlFmsDc0KdW9-eMb+%STcz6HVJ$v|_k#e~? z0$lX$jzY==E<72%rWhO+Wc9Bn*M6e6*B7a6U3XQ49Ls1<1uo?yeKl5rD;0h*)*4lt zD}s1vTvj9nT*nnLZ-zg6K&{3{R8uSiHlaki5f;XH1>lr&mtz4C4eknej>iU^XnAX#B%qjhV(yBKTFg=hYt3Z$5d0iXto> zc3bL#3*6+<*hVg;+y}Mcj7i;6nm{$m^vn>YthME1_=}|Jux=9*m5pRL4$5$P>R;Bq z_4EcCxlWH2g?@#Spaj-2C1MYT78!y?=xHsjDnYsW66;2n9+c0|wQhm#gizD(+SI~p zyL}?D#;$t~9$rtqAh2`;5D-DIAtZ3jQo=N)CKzg(AoMiKp)>126l_K0Ok%a=pXnaTOWdfl`G^+}nP;w8o~kCO0-%p`@ziE@47onPhiv zU{XoJ*+(RTG$PuwDdg_SwL&r4S6;t)$Yg8zrr50(ZA23&8yV6?;2mdW6DWF?0Gln1 zx)6>{#)7jm78FbwEgSJO>A4K5Cv=_<$Bat#N<}|T#rm$tp615NN`)j2(Gx4{+OAwL zdIm;l{Lh-Q{rY`vn~D@DWo`SV53F*gkub}=*ha~}@CAz1!9b-*5l%d!a3U<`rR1lgE92{1q-2RKNih)F#cU!W9; zYB^BM>@Q{yAC7QZB#y3bTNADPP!l_kHwME$(c-gJ6Dnn74n60Cgh%T-LK+~E+%uU= zT;9}}DTOY|_aY4UWv-6ATD%H{IapT9sk6(*@&-)NJuI?-o0X*}1?;SJ^XpX14S=a{ zOF8$o8Rm9pwdGEY+EP@0?wQVp0KW9HwODFz{+Ai4M0=4|D*M%lEFwTse%?Uyi;1D$ zwn-ktb)TV?nK_G&XJ+H^>(_y}Z2SC@d+{-c>R+GtZF2U%2q|`7i&_km9VgWdcxew# z!n#@+)F!5dt&;5du{X=96br=*cqw0U(ri~vmaF7#mnmBn9S?7@3fIEk?V=$ihuCiO z1`Q?4S@7LGTQ>At#-jAA!0KHEJ3bvoh#Xh)@@CK6@7jOo_Oi5s9Ukl)N+2Lo2Ux@) z##LGLcN6tdNP4p3Io>=r&EuXotRA_~4pHfFHJ1;yHt}G4$RIGhJ;M@eCSx;oKa#N? zDp7DSpfFUGQeTSI|H|%89T&L?7gg70T&w&LzeX}X8@35eW~$#!Ia$V=Stgg(^U(9% zZXbF0i12|EcnJ`Dc2NGFSBlj$pu=G{9w(RJw{`R@2&7o5Izr3|hX`#m&pVq4~+VN?g`+4%i-%i9$d}EyxN0S-IPBJHO=!;2fKV{=IH7wEQo5x1XOGd}*th$4(d9k$C(XN>)LxH`!QH2-rb4zA z?ooQIm(ac$vdt&Y?7OhO$@oU@Uw=K}R$nMrO&i>_CmA-DY?_h3qh${|+i7N_tp^Mq zLTHc84h2~qMRjd-pRsi7@hSYPtXKz*^K{1G!fA16iMc_G@7WeviXf{`Cf z2}!5w^MxI61;P2ILQN9WXP%XO*r2`5!;!t4dXl+ms1J<8RinDP8J)>g1d@r(jjB06 z82b(Ty_U-K$#~$bc;hCU_}^N+C)30I;YP0k1|Et&?cPimA-+@UwK=)9rDJs_mlaLa z_8nb)I!i~Vlb$DUsTgl%Ddus4%XdW_N8(lTyms=d%X2Mixr0>)2e zZ0?!O)Xh>YLIAo@iZ~&QEPIq%#|F43Q%8AhO|_+InDTL)2Op_zOk24Batr?S6INc` zCx6NpqZhvcOD;$XIo^?i(Tkg(!;JI%Yzj#_-;wCS=xD}tbPgdQ=st)- z$lf$E4N-EQFty7xr;D0dG2(W8FL(WSPQgJZ+MUo5puWV8US z5A12rsp)l?m1AuwD+60PF_8=yXfNCO`ee)Be_xw%)x8L*ZTbJDO{aLHH>Rhj=`^Y* zq!N>V^0Wfdrl)`ZCuQsZKFFn`qB5ta|M&8L)bRfyKaY15mp3yrBa@a%1Op0ip6w_( zUJ$ICdqDJa1Zwml1k!YE%KtWHt%F&I`)C{npR9>V*IzgbWB10HQFFeiE$sjsH3@46O2Ce2(T z-AqOnpHS78+I75RoDs7gqUXOP+3o%%YIo&-RY#(%yaY8|Vbi+~434c9kuo|%;#JAI za%Fej3uM4+8`e5|)$^?W-aS%@1{j;u;cNCNKtW{$Uo-H++-$8m2ApR}qu#>$MGb|7 z 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

fFa^^Eli6avL?{i{2Mh*-!E_)Q!wHRA zquz8d702tssgFPm+i8HpEZeD{q;<<-7Pz+ScIMaa$IT?(HxLLE618xdJtCn<1R9ZQ zwmamHEuQ*sQ`}@cl}Ihu8x#taLbX6S11hDWqND@UvZ9#P#hhOVb3UDvxfp}SLd0rg zF4eWE6d31J*sNnNMHicL1~JwFn=G57Ut*viQGnRJCjlk^MNxt%htK#X&DwE{B+eU( zyeJ%P1l=sr@53z8!Zagj;6pyY9w100y-wXQ165VS2pVqlqR%9a$NdHrNuAcSTy20t zFk#@lvgfqZmt1l_a$fFJv1%Wsc2`oqATgObP%*iJx%fPeF}a-jQ>Dc*xsv;+l0Sq} zv0hS{vLFIui+H*Z<}yAbqg^AT8mFbubt-#mU3SA_Ff)qmBEp?BH^uCH-DB7n^}D9g zS#@S(on6aqeI9$8hCS4XGgZs+oUT*^!XPgkNC<{~A3t6ginw8n03M1N9YtOkQl@Dw zj#XW|Z9t`FZye{!F^+!+c?dl4RUG0s1WByBZxTPD1o3^ExA{eXP#iyh00^2gW8yN# z>v@LmNwF@4ya1GHIPYmC=2Dr(w7IHNfz`Uq)`SgBoZpvVH(YSg)33JD%D&&_M7Wlo zVX`_Mk0;BeyZ!=$qJ(oQgof%Mt+^64D(Hv5wj8}PUW7(rB*`xJY$ z`nK$PpbvXhI6`r%SNW$0)l?$nZjep}{SN6@4XB~?$1S!N!-CJiPWVvjUzEL}g9xtn zda+#pLAw8b1N&by|NqWl{_`RJ$63Jabn>rRE)YQW?09z!Xdv|M3>()juRRqK)_*-R zn?UAdP3Wa9!QlmiVzN_FG5>}}=9&E2NL0w6DvFYtq5a179NM^g_$V%6u;*<0bMXd5 zqA?h)4$oFB_yU2TP$+~1R3gLaQ?hM0H^7iv_;dQ<;^KuGC9|gs|L;(W=6|46Z8#zf zAV5R_@-8xV0-VO3yb@W0%36bxxAwI`?K zEg6-tI-QvCe7XS#37w>+M&a@)><_w6^JRt4FcTmaKgB@b?Ru|jN4pdpQ}pS5di)PE zvuAOIB>1Vng;vh4DAWx$ttn:n&Y3J(F%MgS0j4AsOlPp;kC;bT%#hdlcJf?URo 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 diff --git a/src/assets/fonts/Inter-Regular.woff2 b/src/assets/fonts/Inter-Regular.woff2 deleted file mode 100644 index b8699af29b021cbbbdf82e18f5c4a2271d19b616..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 108488 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

PpnM7rmcaRdv`(TIH`Wo&Af(jeZ4x_MBq+ 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

l*K8_>P7#5$l zs-dj-g2G&s^ZuYuV2_F!bnG}_@a9I_84X4UM3B2y6QU^;G{lA(p8(IkEjl(>H&SvP zs)#s}h-QNnX0gZ|E0~P4e5HXDmGi2Ed^xk$qQd50!N_>fQH*1WSo#TAh#LL;KuH4O zfc{{CC}Tb2GSD1NR*Pw+i$1WI|MlD$k%=0PXyLjj_bHv-5FOB$kM;nh#Kb^At{bBdD_A9;>zyVZ0j*6qqQ{ z#oq#8uTBmWgL<%JMl%6th#XJlyoYmwm0*3Rh#sQIsRCBgvxgd{k{T+`KYJp&Azn>Y ztXMUWO~$H6U31|x(OFg18*`J`YN%x1bLHp_5hBWV>zq5`AfB`s4QU{+IZ@%j=^JsUF3vyR5C3tr6j6I z!mmV(S3X!x&%$hhMQMf-jxYmZ|c}3w4g&Py3;{owx(Vo2_Be3d+ zoplgDknj-9akvt{cC3r4nOI)IHyg*sf_%#CDh6Wq{B$CX2x82MVS#OtK03!Ps`NBb z-~cxXn+kBHG*Fsz4U7Y0Cj+-X;qyMjf*zD#K~cCsHl@vBl)#r)Z`@8&pC7- zcO9K7SXa>bf)G#M(*#U;SmUFqqoE{WBAK$_g3%=~LlwJZWQQUg@2`V#%EU0!F%%k>$Vm~*$S@4$Rj9j!bdvt#7%ezJ?;zpw~F609CgDgj=#3%4B2r1lG&_VhW_xo2Xx^1(){iyRB<96sF?LJXXi#}o}4{#_Nz zg4W1j6RcwyFJ)DG%*}JFs;^|{nvCMe*e<^ zURlDl=Hl>piOnqgg-EAH124was}h8hFFjFkyhP0H+bsco-V_bcOcZ{R4npRJ3WTtT z8WWP?ywym{vWkRhw5sIhqrGNW6|LYTq!6klGDQm}t76qef37M-CLa(JF~N~2a1ZIu zk_%|Q;YwA&n)LOxxKb=zVqK&;iw^CmZ9qm;&+$B>x4PcxXkwwD<3yZt`wgC-lUSwU zAe>UwG%Zrylp_kfx})O!o%@E^DROWuG;oo%urU?u2EUxTbl>zyX`gF~lOCldGs)JpBQkCn+kQ)57Ot=SjO#xbLg7q%KlF z=aj;^2lc>~_mmPpVtasYBN~{0eBVioT}I^r%rjrW{Oo&->a%2Y&i3CXpHqgUYUpy; zIpzU!n(t@WY}8T^MSLY=vz{S%hwdu%L#vZ+FlS!480fzK0E%&M4hG{+8`>A23~n*s zseZJ!7 zXwW)^5r9G?U0KF~Q52pH?|AUbGsPr&F@uo>vMzMfEILbQQx@)z`S$ zg=H8S-eyIs z%?g`pCCS=rFBL4BI4ARtYATvh{{M{T`dW7m3wFRg_O>+|^Br>SmG1w+ZHVZ)_XDBk`iwd3jU(Frj{Z%rmrPSAJ#XYBK zMZ^_li}eU$01dkiyWNe`gMU!P0bw1n(_j^;XXsHYsI}*WGL?G!Fd-0Xa5QwG>R603_U>{VQu(v}17o|^DVXetYO+!I*n+q6rx1B+k1 z_NsDUFPgOlCGmti%v$EnTJMg=sV8m4He%JP+VH3Y<&uaQ6x~*{b3_8o5hJZun`Xk$ zYcmiA%e7`ki`8`NWl=9R)bCJAsTBWH30G?(3zsjeTfDjceEnYS;@pKAb1~*MA<&rg>!el;Kia@HnN?$j8#L8trHVeUGBN!} zH3wLG+0CFL{H9RRNE@Ou5@wJj>87fc(BvKjKDw6PwQ}jXJ^fnSCw(KA>#EaAF%7^qS#-^) zOG7={deagK+7woLOJhV8tQtcQKfUeZPgGxaQkpGlN^uv$+%&d#;hX=|qlLL-Od>Ig z{7Ug+IYU~)7xXBZYrw=DDAyw6h6!S56MEM>NVN_6856=9=K1Zilxf}kZeEsqzf90I z#JDy21r1Yxs&s6r!)`(7jnHnTyqm9u@?LJl+2bXibw0?Xf9d4RQ^fy#`cz;#*Lr(Q z5`o&HByC`HMB3mcDaRW!Sdidd(1?ebK2~;xctLh71g)pj2w! z6sGyWcao(Q3`aYbfLcl4GEVBaU!Er@S?J2dlnn@bWaW zNR(||>0@4E&P-Ej83WV`HJiI$Tg=e?UR1AiGiqVF8ue)c2Z^J%_(3(2Iy>jGN83%= zRqOMseSUa&<^%ue49z2*Dqa@m|@69nW06SdzBzq1Ns2N zUWQVr%6+24({P0qW11t5zm-MTdQUhG#$1mcrg_nnp<<;aw&UT8a)p+}hLm39UezSF5r{i(6c3S_hiOHVji0eQ0IS(jma6z87tQqp| zKlJzg+3ZS@qx0+L$klgFikIwLG5hL&EScxjRlUCW)RN&h|Ddy2-vsOZG&%}hXZKzX zFUe&Zb7q_q#vK6(6eoX+OJ9U4&|C*96#k#jI~W52vx4}fnrsqM!WlDa9|{~|q^lUM z@jl?k5@c?A;ee$9e2J_`Ue08>bMK$L?YF{CAox*m7#{fg@lw!DL^_3vZkul|3r2?8 zv6n!}HH_*KP?L@GemCeKN-dyiV{W?;It%U&B~|ve52~hziZpZX!h zhnYc2sZg%&8JUAuAIs_pXgXRU3@c;ghb<$Yt~|7V=Pz|01Z>i-L2eFEiar0RU3fn8 z2u95%h_1f9K(kfZpSF@D<%=pW?I)MF~b4Ty1*uLGK7-u}S=Et7iege{qA2WPWm-O^Zt+k9Y9+7ri&silj$ zz6~`uYMzyCm94qN2zyhq5{|Ow4v5la@T#3Nd%pc0lzM)jufY<%P|bs_sECP~k5|oI zT~)$&@zR~%W+#pB@(e`zy~pE>DCex8MKlRWQgmMy9J+tAm5RGPkQSCYp*|p?5yV1E z*q}hgD&PWg?a&OvjbIbE(J#xfM_8QkfzZ%{lScY=388d(daw>td z+E&Zz?9j!VIcF7T)T!_C0?Yw{utXIMgoMvC-9$`P6Cs~q&U%2LL!hB)hQSrDRvq)v zhlRqi(5jF@1kZESjq1C)C(IYs^-7r)gd*r3gxC-drKmD6_xvNos0y7|!1?!TV*J?a zMn!2lT+Hp;dQSUh&MgvT>5F1YO-;d{6MU54W5IUDL5eKsCKB`Y1sc5raglH=SP`up(*aD&y zN!@P5w3>J}!?urkp6mYTTVRk*u%P2Dj9tj(vNtxPa6NqV=pbwOnjvS977td{|1+@z zQIQBoYV@R=4#HA0wK{8o=0(PARz?ZbIyNy55Zm7KBySuLCoxjHalLlUWo1ic@GT^* zu$j)s1te1p)dZ4OD^mV1XTI!h%06Dhf_980*T{atL zhD!cejaWZ@|CjJ^x%c(5*jM(8)6S1i_=6O5bkZN!ygxMb;;)EhFvH4l1~{b@a8MtV zk&mJ(DX~IXDX@cuL4JL*2JS&Vy1t?mR8yxZ1b85~pUh-|PxAP-3iH4V@e_9c~%L9U_eN-JX$gNu7eJJuXV(srPff-%Xy>XhKgces^6Vh1n|{>;~c zLD=(^I&BwQiQ|CjR7t1Z$olLEAuqDwWoNb785jlEF%Dp>8acd1hWwaNFmhJ%Zuhp2 z;h#k5V?h)6)7tn5#3_~y)qF}eB`T(i!J)MrNO8eHULh82^>?ExS26> zB_JzX4ez3~2*1Sb)wVuWYYm=BCKgf6?}>C^{!M&&>@OTIW+(=EHEwX9{LrNN{|4Do z+vqzBd$Tck$=>XYXA(=tgWI(%Uof#1MmPiL+P12v`sINn)nGlK5N_?z!*54vps8t5 zmjP&oC>4g`AxF?XpHGySfs{0V)Mvjr#d*40m0f!6Inh?VrIlhw@lROljU)+eA~D23 z279(-sdCLZf^dQN(Mt%_HX*{oFd8-jXZ{_37nPtA?gY1Hj{m}!BcW`sqt^~(74UQ76vfD99N7a%O z+BM^>Z(@H^b>h3@>XqHx8Pl&(5(D8}PkgfqVwXda(X*+ZGPuu!P{^EBRn*f>zpZSm zrT)PYZlmSW7Ggh1S5l9ivWH>IZ}YC=_43WN(-Sim=BzO1(PHecxC*(O%>3J`c};r^ zOV}u(P-I}O`gf9&bJc&k@PwhgmFZpww(Y?@KEdr1;M9Xu^M|-iPKrOl?RJ_4-9JES z14iB0iEBoQywvJN9`C{U^IJduaeNZ9E*8MnA@h*8U-q(dL;&L^S{iYSMCP3#ojW(m0Ayn$E~{b&*L0lQOS3WRrfxIjAqEn(1IQL~n^xQ5|8h7Fw2gfIf8t%T(S zX;wNVpHJ1gmGqPUs!*CIK>ef3Q(EKaSRsVfwRVlh28w)OdWqy^CiT2PH2QDeAP$vfK^|kvzT2-Hn2<<(N zh90%AffHn@FTpm5YZlefV}FRN+^1X_P~kDJ_b{Z{K1$hVKPM5k`4?0<52uqM7+w?` z{#^?6vaTC+j-1)7t1OKIDw-HR$?XX2rL^B7oC*BwTc%|$SgI56D@@C^YqxOs)fW;n zoYy2}y+Jj2UnPJkydgPf!YW6-W7s7Wb$vuQ#`%cTTBIRB{1(C<;JX_z<|UAvM5#9& z7?2=m2&rOK^V5WfdqfQ`BYIwo>1Am%)GE()0~!lqYy|0(Bj3AA2#|%fLVO@sT z6rviKbxYy%rPh0zPRiylOBd@pPy%7}JZGTD2R-e57IhQf472y}Ox)6rW!wHW^cBSk zYLn@W+(X^*31zf$Gml^6c6|&Pi|JuKMe~9(p7N8J{qnF;)K|)*-^`4*keN>xoCc8T zv3d9Rsr2Y!{-E^Ri`&uJPb^9YlyPN!L92ssefz(p=v}7YoC|I#yN6q91?av85}c#` zh!ZQPHuO-V5HN7#MA~KrBU=a4Ui$n_H0c1~+KX#cb}0I`SUmMj%`!1iVy@Y285c+( zLxdK15=?9cXD1Dt>Q?|V=T=drU+3YgaZY}zijV8VgoqtAjc;Q1Xbl9->Yp^U zNvoKw1t67N-izvLhdc*;x11 zkFozB@NeO77>JLF5PH!_UXvH|JuE?-oEAr%WKEN#F1uYeo`D?3q^3X7HD~Qie{=W#0kIhL-j^R zT~Z3HvR$AXD&+E% zLUzG*Xs$QdjCH+GDZuEUI|>}Kf=9&vS5*vruRxrd!V3lg-hxSKqA|gRSyU=g`C%7) zC>eoo+_NGNTU0@*(Eiq7>`c}>9Yk0HHSK5%NOt=NeLDFZdPFH#n5^2VB>zN_7~oc7?eD1F+1d`|NO<7*BHOFijCJc^TOQ#B;n*pxoeZ zXZ~%pkS0jMNWgH1^v58Tb0*+>6xgW7ciJtY84)xf3c?c8j)0+b zO&R@yNk`Hvb3B-;PsvBJKKUnmR9x($n1HKM1xJA4a(oMC`P_Lr13o2zs7|;e#RBp= znsQcPDkgKlBd7vhSX_5d&8m;l%Sjc24vu(tM&MW!JWf!3Q@MfHpmqs|iA*SV)-caK zs2U!fsVk_vN(U@KY=eNKsxb=^)w~y=2Vok-i(LK9gX&HyQesAbNo>Nv(BSum5yvE8 zt?G+}beVEdI2`AG+!o)5Z&i_IU#&ryeW;Lr4>*Uuw5}V(5Q;A0yOe03BLMxY`V=Mh zD^*ZpCPhFMpvgFAd+$68qS5y?g4RgfDa|N-dJ)=`n5x-?w>H2E`B8#_AzAm3s30IO zEOoQr$e2%aP4EFy(>g1kwJnvlgI?jBgM7x;&bfuEQtDX*=9}y5a{g1gP8|!OfFnQ( za5?-3<;SZjshnDkW34*D`kdn1-4Xq8eiQVL((BIe^`V(<@ zwTBw>v_SltR}cTYAO(Z_ZMS9yy$*#oIsJ zz1(eJR21~7ERWZW0@ z-&W9?(RShEmpbS)>%ye~6`zqefSxeS(61Tv=ebG@3ge$7z%8B@T0yn5R^<& zuPt)l?g?S*C1LbQ24Vq;lh|gcgz4vN#LK{hAbf?2Y01Wf^%5TW({S0}49dnf16Ynf z$b0%0#6FzNaA?-)qW^PKv=H*fiSl7* z3|D3JLBW;HLNH?^lD_y#&e?j!g&*V>rIi0-iiPhmi*%`BA$LBHptSXyXYJD$jz?lg zReJz*|HGCdPY(U9QZEmW_XoCTYI#w|NRt+0jd&^99^jyP3D^|>w_hGX>1{*&o6IME zk%kURIh5xfBe+3Dzu5vh24^(*w=PNZ#K&#)Xb9dM`}~?bB(qg4YNHN1=;_d3veO75 z$_F}+Fj);FS5ugP&g9L6VkR4am-rCkvz8i6BW8iLClItJLTkCGMJiRN&P%27Y8B#} zM9!08$<8nTrfZmDeKviR?@{R|kg`S_kNHLmK>9oM>7O6j!*d+5^y2EpqmJaa0c0T^1o>HajBg6jM< zXQz;6oGx&~aNYdeD)Or<{Ui7))Ba?scx;UhfiUq!LpP`W zyz{obOOI-I%~8|f_DOOPtCBPbk?7+WMN@8KxJ;lMFy=O2H8iFGfoPk zIJ=KiM#c9aY~}n%pmntff>~51EM#C%pQF7~a3-QQ*+YJ$hpmU{u-M&}nQ_-WdZThk zmrqrYkaaM)m5CT=z#JJ!7)T%Nd}v0Wyi1sEAl_;5_+4cW*5(%7u2lx;b2aD=JZ~6T zhYhIqquC3RV>vVLasXH0D&u4?|2;Vt{d++wQSAfoP*X?7baDY0$f@mohaP>GQ8Ef< zz{8};Rno>i72uNzhQ#)tRn?y5FczUP2sZ_bjBDDPnvst|pS`)EKzny{z*^%VY#$)o zPx+9V+rwep$TGs+WLQxxZ=8ps` zY#aC>VXlc?9e{wJGBF$0c2tZoh-D3i^pck4a!EhEOd5;&Bk4$T+N{_p0W_ItMK)7c zxLuhjEWo4)>=ih7Qvg;JhzZS^y*wUbe$g!AJ!{SFt*i=h_)oAXQjp6(_fKv?FYxe* z*qtH>giK3AU7-g^s8V+h)alYls+--|26o=O5S@3ZXx$dtA8H}%dgqWEFvEjS_IUON zo00ZR@*1FO=!DPE1*n>2rbX{KOJ2QIjXAOKW;Om-oxvgSeGH_FL`8BGbPx?wwm_JS zmoCpwUNW~d`RtX2M(^V4yZ0OaUG}MWoc(}%x(w2BA#KMwR^l`YKhtfA@cGXwo!7*! zq^IOTVarBNtUQ#|_576?ZmDNkB@;D)AXHI)old-&tKnyYzLo!z*hl|gm%cFmh|-qd zW7><&dn0+QwD6#EsasBgRJf!<8UU5SS3)(AIia(!tWqNpe9U|) zlI;B=?lYyQ=5dYYs~}IrgqRl6WL5G*ln2TkW#|RJ>WA8C)qnTzEbqh1;t#ZJ3o?dC zZQKPiJ-xgt5>-d{w4eruI*pA{Y{3Fb^;<)y7Yio^T}eoW$SJqDUtK>W?S>wR7_M<^6S@ES#X;two1u70VamU7b>DCW?D}A3ETh~>H^$$P}F!rUT`(*a*`Z-K=(8@YqF+r2yli_W9K=Ba|2oX9&@KDF zp8kkW05QwPK**Y zCE!IEqK6n(QOL>3qYswLEd3i)je77%Qd$=7tmC|zFtM1fk4!Gc6D-C>!4TI0A-71AQ9&{us~Fw z$*ZGH?9Qs>8nnlq*c>4WQugQ3*3wx9n&-_2)#DZ1FZ{f7n|+0XGVkU*HU*o7{C(<9 z?cCn$Q->R3-KRQFfN?-J&Pj1i;7`oz6 zw!dY-CeoM4>M7NLE-r}zds@$Iu@*UO_UtO{WB1*g=y}07_|A_ormr{J-ub6QFn&ys zO12*7wWVN0Sd{#T@jef`>+{RTdb66IImh&l;tSXm_R=8j$|fexv(qjPXHvq3h9*nnzOJx9DopT?ynKF* zUC(^*aQ5L~_g73H5cUHH1wid7GSu{9S?d{n$2WbfmM^>o?xfaiG;93dVFXPX#rt%t zL}y9NS=unt1D_;@YdTx?p{jdC>8zfQ8|VKljF5&+3D$tuqmmu?m)LlUEyj5Mhrs`5 zE;)P-Ptqwn3ssY*6X_bmP&|K(oM!N4PVJtSreLr?370v{o335qM2~6)`TtG05el5$_BTzYiv_kaEXyu#_tFY;|F@35Oif&Y7Xxx)oq5~Pl9Xzh6B{Yq~SY7>85 z7{e37W3I+QP>KI727v!3_tOkVKd?!DwdzAs`&Inu0;}zXA~E_;k81bYYFh1;pwg{^ zG*Jm%EvQ(f@4sJ&ChfV<;q0ebWh%9(yjS5^maCdGwPugR$#jnFKk zSwwDdR0tNxA8;F$ogqXijz+C!MLWVd?}v%9+t@UoxS%TX=vQBqBm#XoWE-Ba;tyci zthAgD#fvn69JHP{ciw#Cu5ilKnuPD481~zd-|%VQ7diej3EEn9K0eCBfmremv=CsG z$nu5NSnvgohOaJQa}*K_tINeXn7c|4Hs*wduT8Z3#atJls6zjc<%i$Q7%7&1ua1-V`_ z_&oC{C?bym1_wL8f}%A%5YTH>fpO)`hnjL<*gZp&WNA**qVfxe-VvdIiN!^3cOd{w z(V|CrZ4U$pKQs&O(T9aMs3fKds|jS;iJ1E$_LdBO7p;M-V^TNu2p_krp>HsEVv2I9 zXpTl(J9VlgYCuEttD68EAEC3MEQ&$gPK3f-KE9Zu9BZA|oFleGE+&Ebo&D@R{wnZ` zgHlj-zk-wX>(7@t(nGuc3CJc-j{Mg7+hP9AFl8XURiy8ekbW3MPKh|ird}%65D-Ke z4M9|e_q2NgWx3)Tl)??JsT+2qs2wWMm>p@1^##_qzhCbr`((PP1(hO*&U)b8p`7T= zzk*e!T*?+Dk8=4vz)i5Wm{(QJ^X(l-p(-vhZ-u1ZaO|A^kOVe+ZeDqBmlMo3AmyPm zce;A!Tepl(XH%C_2+<-}!#+R(hDo0X0S-ZFUFIm|sV_(waD|1GWFPuP%$(dC&Cc|B zPVdp#jmU&>6DO!u5VShpu1g!}4dMuoGb?`rl2*LBxapmL%5R9<&KLP-Tj*rO4?6o< zZ@s{2g8di_8QUF8{I;59D(Q9Pq*nf}t+PJ?H4>ij>;S#6(hSgLxDDz8)FjF8gu4$dSSz3NP@MW9T$DLhw!qJU&x~b~NRQTgSMXt~hp} zskcH3KpP4ae!6Tdfns2wVo)WYrqx7m`}UVvDImIqJ%5dbxX=1jZN_V5eYA7tR=4CZ zq`Ak~ebt6Q;p^FX^+)3NUlMJ#`vjx5X7sJW&t_*V-p}p2-kRh2ajuWfFr>c}EU)5z zv(d=qBGn7@R2NxpxUS0Z|I>&qOL|s?N(SH?CM<$^LwlzM-O~tK{GDF1 z@cK{PuC6)r7frW*F6OHZumW2;CS)RgYF7;IKgc_l)wP|@KkInr{%Ab#Lx31$BWndE za#`4uQ=(suvQUs2aCvuso1?pvrCVTsz?9ZC3C0j02ueomhL^?fmK;u>v2zIfL}>>( zyTjLoL)|vHB(0k%1M{;Wmr4npNeDJMUOy#%MDooa1;3mR-fZ7;_-8Elo|KMcaJQk? zMc;qoD&7}l`cP7^sRt_1?l1I7c<;-L(?4Q@zv9tS^3M#M6vr;ErK*5Tv|>;Fh{9K1 zC`yqfq)@%mTCxZYUo;n=<;X}XPUT~zABkfQQK@}{wO0@mjWI@mvJjhkie3=G)Y89$=C;vr~Pi78D@6QJz z$c!0bo+bGsWJ=?SPmmfw@mM04ANv(kSU}N*Z#+#XgK2{P7Q9t?4{sOlp>i=puHD

sT5+C~)5bw)yD`@rz&ACITGUr^7Yy~hpqhE?+sqcF(I9WPH3J|jpk;*#j z<6=;#BQ)x-kHBmUot0jW^lQrhLH#f(eVY9tNX77r-MBi;U0*AF9G)sU!*=)(=vb$K z96^ORsK>0fp!0~r-yWnF>C54WFMQ4o*JBFQZT8BnwdHOD+6G>DJam0ux(xRUAbDrt ziiDNEnGXDXQep)+HwuaoHSHP9kG;a!D^i(XxaP=BX(xYZOlJGZ>C?$^2^z=ZCf9rV zkgENeN~P)*FL%+wG@29eVjHuOtu-0R8_Ekm+z&BM+^QdX2njBB*Pd9 ziu5qdC@##yrY5H;4WM87DZ>K6OaW;GNqVIiO_e5H2X2wBMs-dNeOlU=D*MwRf7U+- zmvu<0i6H-`3Yr1J{4RKt^Pt7b!A%nGooP*asx6;5Y%-JM6@_0 z{J``R*Zm&tdbys)DJiJu@GDNeA-9Emu6guG@F>CB@L$~OXo;_ijZ zOf;Gk+d%zr3{a!`iU>kwC4aR3=#$&I&7^FP^UR26`bl^`Ap}~XVDQadL~4q_JU{S= zO|oW?Na>LCO?3)|Dj_#>%D3F16XA&$B!T^C>66hO)8fJ3ba{Ho|ND1Nc}}hx&}Jv3 zv)k`uCbRoF6bMGA$(xC}oCG@**VdfPCMJw63lnDbQ!A##hfjWE)cydVV#nmsmo$#} z;V#VLQSW5(F;oU$?!pgcvJZ?u?#C_~%$5`^Cjv`!f-VincP`xt^ieN*C3Wa)x0wBR z5c3m!%EB`if1vo^9Ue3AoP}Ekh+M-m=b`gtOwPyXc#@8vPUJ*F&c@_)g1su`|MM-6 z`PLRRFkqs2isE=#oJy4~X)G!$`(IiqyS~Jpi(<(U)bYssOObNWfYzV{FnI$L+Gg#H z5N3roWxmF;%X{7lKyrA==q`6qJ;2nRQNI*Acpl91^?lo{2~+Ls{|0*iaxHmWJBw0X zk7cz*|FxE8!JRI{XB2HAor{rdLH5(}lh0UO3fHdkr=ZV?f3kA$iI+HH@scfnJACwL z(#x*j`ZgQB|FoUoIfvGbfHFs^pvL;B!L`k^i=ZDc4@sa-3&uX)(K7>2?~$Y8Aw0YT z<-EVp;47my*F1F+O`RY1oInmdt7hqCw5F10$0ofMV!Pq>0J*HpGZTOl(}yS9#876z z!6?*D{H>@f8_Qx`#-%lQJq z05kR4)AP?ljtU32X8QrK`m#`ZUcsV~z;UUK(EdXwi%rFC1;wQIC*W|F18YXzB?=wc zj4A)sG9<0d{Iq>MT17jZ1T55QO}29W>#y-)@+TiFVY;t5M!H&Nac+{z_;B+z!dMfK zR;b1TzOPYScyO&5rG!O#b}@mBr(={26PUB5K=l;mlUQAwW^0RPoF|}EFfazm#&ymK zpiXKE3xI?2WGx7FFV=*8?9=FAghg^P&(}|(NT&6OAEQIKZx}Xwp(gA!CCPQD#6@~G zrB@DjT6>Os*T0LBs3Oqx&Hz_vGv|kF72RRT`!o;~x*-prgOeORFNp~tJC!iY{6+m>{6wx9MDYqs{)L4H z_BpwHlH^B-Vi}Cazf3{#_=i7$w?v(>xz!!b=Se3Elwi0oux-xY<4kbKo zv54<{&s)i3ekV1MueX20Kl#iE|v{jm|woWH?>YNN%;UD{)f zmMY)gJ5Xp)Ea0dYECVsqMgswCHIqafn4}+Pg%?gt(F zk5Vb|HTr=xNg6l8H-5%E9O!%LC>3Q#Ep<_tiJPoC2tOUPW5eIuZ7%Nw*qh2?=4qvm zeV-;&Lk90${9DPlXk0DV2$c|Lu>SEom$;mKV4mMC%BSL6Rxk5^0{->Tk+J|aSl89~ zuW!CHggf6F4^eVrPoK0qvs$tdlX$|&hg)>ImyB0825rM+bRlgSMtOJgy!G7IPTu)n z2R{i;4@4T2Qp35^DgP5?}|kY-t zU;i=u=Fh?9iO;23uKFwq=rS>74;rO-a<*8WOrFfy#=CrDn7oe^<47eg{>@#9=WP6z zCQ#58%Ut8S>rN*nmdZqQe(5ziOrJz&Y@Kw!eyV7ab_fJtt4C0?6!>G*NEQ~+f3|`3 zo)JSP4YSE%1_yWT_fDxvGdeX780L_DO}g)a(koB!AX!i|=yjlVB`+e?f|o$XP8W+{ zii7Au(+na@A(EGWX_e2pg}fgWyj-9Z=hXIPULF4_F}B_D!KD-LILQ<)P0seSMKErE zW&_OT z@Q-*cE$m9F?gcB3?W6FYVXd#Qg{M{tF0D+LIsgAmPqh_t5t1K;lq1EElFH~J(c#_T zD#k{D0}Ekimz;pYx$)Q!Sso0QvdR}i@W=|d;5s-4Q)p;}a@?6UKxrn|!$lE$euZ0s zfTS476Tp-vJ?2Vfv#&!SAv z_Myt)sRv%5Ym1!>?W%A)$Jp*rZE;|vZK^=I)SRYh>z2GKhJ>$0z9!eh!>lq2GOTez zQyGt^ss8s6biDe9=8*49EYh9{Y&epa>o%YEUtp+O;em)m8pbySi`{tT) zocimstmI-}W`O>_`mb3hU}CLVcr%du@(F6p`n2yLIoF^N7y;Ifh)gjg!^t#2GOWpY z|8&8K*F-aM=}Hx8I+NOl)j%u*O~xm^vxf2zM@1qE3jvL*oEHKk*ecsr3sS+>8wN zSlzrV(!o|AcCY4>rTYu(2{GRag2{h>2}RthHzPssa+FTDU*99Yup(#G4hJBtpe#9;30YRN z`pLLVUTn&tshnEY5}7_+P5-Qaw&hjdF?RXkviw1WL(GfVLf+Na*=O*nwR-^Qz)xl| zH3zymp!^c~k)>HQr~q(d@f)l=YhAKZ#pBZ)Mdft#RSn11DYjUwg$+iEy0;n*qr5_@(7_a)qNO#$hG#bloO}du5!c|-`6>cIxV*kwW#uf)AYUp#Fw~%! zp(_y30|x@=4+?8#=Wl69)chMyGd`=OgmFI#xhtA^LaL6dPjR4yX;TD8GdmS)p3KgK zYNoD8k@z3Uc#zNXt)=~nD%suskf8h^zSjBP zBpg_B-~TATHIo&?e=`u4PJn3SwxjMy+xjQ?QL%IA# z{wp`kOJZtV&vkFShBEn7Tidv{?jvRY>@6S=ftparKtI@-I6Ze=IyfYfz$1o&Ev&Kyy3rOIuPy)C zx>5dVGAfiOhFHBD?6ul0uh>_ENK(0VvR*~WHuO>y{bTlE3z1mfkW9r4BLqK`5O91? zfLHj!p5DdNCvp2^pu-Mz3VW2m#tkxq@ZF!%pf$Nu#Ym#XucZyn`V7Sf=aU4Vzne%m zcj3|TQ(s=IgnCtOL@f0^cz2R5xi8N!9nqf6gKX|uv({p=VrnOU(ugKg8g^<=FYlb^ z+siw}1z;Z6rGZxoVo=K9YZRdo75jAhQNDQlf|+vt8GX78*`7d{KjVI&nSb&a1-+O^&wHx#l9n6BJHLKv z+kR(3TeO^=n1g*p;ps4~$kKd_FveF_{gZ96xY7@I7@jV<^Ll=d9EL9OyI?kchlWO7 z;~TQ?bgE=y;S0snVYT)cpSsa&T-v19z(w zYpPq4;9lkkFr^*dmYNt(0Z>S%n)kF^gEr;)!%Qwn=LJ9G45eI<#6+0O50MRVQD2Jx z%zYF+EBW5Sj=W&Py}5f6`0C5vA?+OJAO7;+ zb9+nrb64yMw_1*nNCG-}YJXFNq~ zh8FqRTau<#;fsZ&(E^Ag(|}FIUvqEuCQ*0CV%blJXqw!7?V=FdUp#K>$O+hdEnOXH_nRn{CFC_V%|}Io7u|?!mg06 zJ{1W)e1iZ;m4uN+xPXFdbFU<m0Fi0(S0c#_O5zQ--BZPvb>^#Sxl%7X_jOLU2EKKIG5&jfa zb2f^{{x5)$UkPO*F72o3Y&MUKbWr&gm_T7KUnDzgZu;jGf~oUtL4}xjevxuK<|G-1 z2D9i#-VPtk0JZoOfGCQ`8}aRKJ=Q;x)o{i9`xu-P;p-l7Mt0f`f=b`C7rP3BA+x? z3-+@GEWLjxu>>vFiRD4Y4Lk`O2AcYvDYrt8ufb`HjWJ3^oBL)H80-aGff(tw{n>Pa z67oChL>(%I`k{9C(f7@w_xM>W(99+!mJl|;nq~pa@}=(xion|O3yH20!FO#+ zI)0|Lh({up%-j`m8#OWt?XBP558W&BRioo@+j8x98+8ss0#uE50+xJ;N8R~fIrGXE zoG0Mx>zqK(T55Tw+Mr_6i2&FP&aUnOQIg0#?k4x!ey0%)Rw!PMck6xM6?DMd^YN-E zuCfdrG^>2@0(uMTTV0g!4$028tR|FNbpjonJt2}=yF6=~lta-^P91h>Y{`IWqcJn- zSQaT}>1X4EurTwLXa;(}*v{rnSm%`NS_Y>v4*eOyAef%USrml7P)p>O*@B44?)ZLD z&p96W`4KRoJhFWZ^G@(mhjJd5e@n)nEv1#G@6@alVQKTPDk0Y*jS$&Q$ok;LP>1e= zcf~?I+W1q+Ff!D7FB<1}&STvs+vI|1RK2A9KhHSfg6^+r)rq*NZzA1mA(th^q^-b* z#i}vD5_M&hti21_{^;D<%EV5%>tHzldi{!p7J{+%{u33yUit_2OXv9Z*3v^@qVWns zO9A01tdzV-8t;{Laa@kJ6Csq+UPG zV!D~6SHGLgXwZIC2}Vkn?K^lPM#}fR^sEesdAyD?N0q-$-J*! zcBP3CCf2XHD~n-IUR3`~(wT*BfI5-%BPyX0trzlw52U}tr!qwSL>1WR#ZQb{+cPkC|>`(BlFC^VaKlWaE+?gUS%ptC9 zP`yMY*18>ez6{PXm^tq582ad(De{FCMK!sbT2PZ|%Hd;A{9AG##r(Z4bKhQh=UtnO zP%QHH_jPPZ#O$qH)+wr?>NhwIEm6-Vv>w^#I3v|Q7dVDXyAC;v^aKv_;Tf^@BP`rJ zN#cQ_w4frcoEMZ?+$?Ks12g^ny7k3(aa-6xOywe0HVXtMT%YgwC%K`Z9hUxmU_t8B z2{H)b^;{FglNz-fU}bECkX9ZZzEujeDUyPO`$MhUGLx)C<8JSk6I0kKj>r28p{yhg zZNYw~GACAmbEwtqBG`HA?)n)u>$@co5U<`G57_Cbg)dZcFg#d+JFz@OJq{xpKQ5i}xGkI++i#RrArshKP?5rCa$4E&$^t zf}zSPkz7*7e!QUj7)^xoCpc<{5}X#01?xA@eujxNSKK&Tzk}>Pd<&)Xjl1PZkD}9Q zXCSQ`4v4JpO!+|Pqj9x|oOJSLnp=~J3=Lk#HLLosFIl>xT^4Ue1 z!TNNn5TO!4AJY2M=$zb(%C&Iv%D}=VynbOw9Rx??=|fRJ#n{~w=z;^H)OtkD>>+sF zjm(6KT8Wfye(QsGaXULeHqSMH_O4ehojQH-^2x1RaIVDa^u>or*&;CDSA$|)5<1~{ zNd@KnUbv*ZDYv}9Zm`2?#q7|UE6L|j3E!CN=;x1-9{dKkU(D(8&nTUIZ+gezQ~fbX z!($Nh$yu4_)&Lhf@p*=Gp)(1HTO346Z(T}Z;Y3wxAQ#Kevp{ugj61d>xVsXnDSnpe zpnxknl$C$zO`(2{@nTcoH>9XcM>uxow4LoBrF>v!Xk^bc{4^im&4a;x>#1iH?a761 z-%zft#b%x(Ip~_h4+lL+W;t z3gzVaQ#lS-&C(qBKpZW)sdplj+@1=UEgOwtyEETMV|ar z=I)q}Klw$!H27l1`wqoyEVUNj_2tik*R#bYy=#KHn~t)2pW_)zRAJ}bNX9DMOd*z8 zvS?mXx znc?qWDku{Svp)!p{76Y&s%BFCl_p85DyidggQh#OBL^m1_hejU^c)`ex7o9M%IVtQ zF&D$(pL$=uC^-};$8Aoc!uPzgH83$(fO0|BE7PR{m2Nh#@;cs?{@S8kDC?M* zh|6qGQ{C2ziHHhRYT%;5^L$wk+ji9j&T;Ps5H(UurC6VcLc($8Ld4-E$Ms#}!bH$D zQy&d-R4GfXsp{CtPDWcpMM|Pf{;g;^4}wQg_Q|PsWwc|ia?2aiVWB_u3RzEB#Ckk; zt_bB~u^~M#9FZ??c{t1?W}5a_m-SL7%R0_dpCCJW8mX1Hy1>2TagXm&X6nlk`)wRg zm7t=J8tBICuNU(;&0`6j^sN5jZBM&_VjY&YEL>xLaO?D8ua|X&X(opb0qhuK+<9S* zHyA513=?oe2hh9~;z<)t^8glDkn!+;Dr%S+hqI8r^JaDwNMp8BHIF2%N+u;CpRsU) z!9BFj)f7vF6W)Oi5p3@~BK|o1EC5$CO6`!o@2FiJ0t_i_pmretP|t2acSC|3Rd^ER zq|}Y}W!OKx4Q##LkdN@|;J`|=UXMa`j&(sey%SZgBFxV!;Y0~4*}}l)&7iC&wD{%E z>^hT_qil0Squ%UGXBF!ECJ13kn}q9n#XbzV;R)lgvqr#e?u26nK#a@?{Q7#(GYGtT zqpbn;wOQRr{xRNlvF<2vZWxVi*iWoIFLmoqbHAYN;y1X4X^#w_A-CG9FSO#9KwNUA z;cW`a*+2kE%IXq+LQ-N%QF+ly#dZUtaWzo8v35JG4c+JrSibB_wF!qK&L()l(!IP< zl)F?kYk(+i(0u%bPZY&R;b@DZkSgKX_^CjXR_z6c;I|b)aWyXA@b> z^6!rT9C>$(=pq_KUZ@2l6^EVlQ&btL!$1$zsFNYu@8L8k6B>!`efj_6D> z==e!Pd~Hs(9B6DjYyl})Cpgil5~YYY;aq1C%RucX31?b}BfpgCB=a4CHMQ0{R8nIl z6s?pCtqJKfV3_K$4a~|@gAleyfuOt)k^Wlwx}@%aX_IbxNT+Ol^B*+f0m&8-O>$W8 zek%t#crkdPo!{(#FZQx{E41Cpto6Q={atxGvOdUO7^l{H|FYYBgq`=zz)t5WsP##D zx4E-1Ozd^jBgSBwsH(J#_r9Ov?#t^rdPmaZ6@N=*d3DCIgPMI#RoI!RS-MjO40 zI&uEo2glBw4PhJZbjkt#{@tKzP|S!sSQW3&>4LIcd4<5I&?@g*Pm`fXz`2D29@!bJ zuvOE&RN5&R9=c<0MKLH|<@HQeL?sqmrp&)R(3gz0`S{Zli2z1}p(E0@ejP8t7Pmk7 z#J4i+x;2@#f}^YQ6W^K)9(cA~!IsCe$FkX9{>Bd=hOo9uWvOH;^F4laTPrt~nd&1H zTTykZqOQrtoM@z8OK z@q=ewO+ubS0ujGnXWv!2H~OsA4Y>1+LMfDpG879&fb%te`j^!;bQj zWrCYEo~S5CuQuL1_iDaNhLk{cfLA`+na5sx2ko2^Zjz3`;4BYUAzvK5CK8^3B5!X8+=M9nWYtp0b8(qnl3P*tvDDZe9}_c zhpm-p`_gKDgNj6>(%Q&!Y3X;Y$D~A|(ZoeUb9u&24* z#07YvSMl3z*{8jqf|}KDcSMO@^%fD_)|ji{agBXFsj*@fA_N!rslWAD8$fOjhfY2g zcs0)(F4TP2NENlq6mECeu&L*xmNY1P>BPkgiNpovEpC$C87JSAyfY=}Stvy|29s^t z&VfJ)ak*AggqqR@S|t?G;;z+19r6CS^!W1NcIu8R`)A*qh$H^=Ucu@bxZ3{;zF)`SE(^B&+sp!E zxyx_}`++@Jng`LF&_=N~?7ZKhroihz)-lu-|vbv48u}6Hd@4X`h#fF>hiXRb!`O z{~eU%VUMYzYIuTqR1{uQ5wPAgf>Uo&*K$xK=R__G-+ituK+OF17`EqZF;YSr`H zt5NmPDVn?(-{A7kN~t1u&@qNy+1EVqar>o4{bm{-7_oBo6zA%5MXWU17z#Er_g7gY(btgBukk$eRfY+6K>O&c~tSh8iuENn0hmWqS(g{>OQs*yH6jfq$P48p?91sAbkOB<zy43T5bpr)3#bQMZbQo_S;ukmXtG0<%P*~vq;kEcM+81 zGQZYLN7o=x)x2W5$XtDkn)mAq}GC5(R zeJ9US^+p}B)T_jL!Ip3h1I2r1zCcNB)Ex3a27g4S(@fbxkf9NVHta8>KF*S2!o7f1 zA65PwRjCa)RXiH@@tNOjYAv&!-s+i-y=F+2&#l{18>Dtf!i?fKAW6 z?R;X&lyz7HR`48JW6^jF9SnEN?8S4QC9BH8vh=~dzLo4j07HF=rFfUwDG|yw7AHE*2Gj~*rB~2`s zI29H54J*=zeJEhmOxtJ}LEBkEAbY9pH#e%gV+suo`Sc$+L zv~ESj$L_(%d6ebrZb|1Qm7<;5>rNH9R0v7i#Of9M$pQ{vE>uMUWpyhDyMM1fb*z1P zO48}$9*)+9vfzUGOtfaShNi|Sj!T&%p$jW0RSTW%9j2zeV(rU!3fSj<`?v@D0&9`b zg1xAekd(Kn7gtvn=9ZRcRhYkghOh$AX!DYaWQ{a-SuHMEzlIx*JejrMlC+GrfGFO7 zNbuA&Wrsol2bm3OXJqwOqj{^Xpv_{D=$ADQ2m>kTxYrNW)vTH!T#n2OI^HXqp8}k; zJkJy$GpGXoejNF;)~rC4CRSFl?-xoaVx9-H{R6c6@f?}eQ=SMAf(R9nk-NZ3rD+<{ zrn|O}-lH^qxbMF3Gp*IzPPfRPq-o9~RXWYN4Aq!0Hqs9KbEiv8IS?FHa$SzP_oa1J zs|Lx1P%a4w;DCHXptW!yuwv|Cl0gdzgPoG7|3T%cvy%WppCsygzaZcASMkelfT-`t zq|>1Xp7D6=`ICskW0Ngfoy}R$BXEbiC8iUu!_2?v3eC~ZQY#=Xb#;l81s69wr8#=rnEAsAEQOm1J%4$|v3ReukQ`J)30k~6p zMW~#u?R1%6)NUoUhqz|yljSUCbL>mjpe zIlEsO^`77dgSE0(2r8vv6hdq|XDNp_Pc=@u(UQNCU~G!kvK5lye)2S=EGYejZ>IZ@~#WxbQVlo!tAqVaNpgL#`w6_XyU9&*TGWm|zO2}PtL zMUqP`Tv9$AiY%fmzf{1H3Ks@!h;%xP#!}s!!M=OTG-t?Bn8dJspms_28Ih0snQB@FuhlbEVxGZ}lIsakU5*`xQszG@DlUWF zDR{DTn0uWC*Hj#kH4?Ss0$*=2XLHxx*)r+Jvp@`79xOvVSO|CE`h#WC>vVklY9DK` zXiW@FwP=_xr@_<+e=f-f8r-e9KlcoO?JOm&b4u-MwXJYGmjH|vBDoH1$ys^Kmz}wo z7@f(|yk?CNcOQhAoY8&>lFPOG5@A#kSw3me5Cs9HRE;GAbpc_ggY zoxWWrt9eNm1*Pg;E`oSO+ld$~Bv1)VLUr$b*V>1+*3F?)!wXPwFu+to0s^S^YGTI- zqCq0K`ooPVA2%rN{6fnN408FkInX_1k1tS0`RPByJtWPa9+kuWT-wL6m%}woBy^ny zss9QW1;)XLd3qxnF-Q8feQ$MOEyTw-;n7UBW<@8Pim_EH(CNzXsvG_d@WY9K{d{f^ zB<K7q%?3d_Y+kZAwHDVI1%9ulUhg+~&kPMHpG-24xFXn;F{jtF zGGFUD#(GyVLC6uKE&%~l1VQtjKyc4L(yTEGdPr{9M1zS_3IFz0XV-F2fjl1Kp(UhI zWK>a@Npdf&nviQ5bHK+di1!hbk0WykNWEplXWBgx_ds%AbHrh|wihu_*{j>$j(Eh8 z92Tj6c8)edc{)H*7`$IbzH5`zAFiP*%l`Ss-D~Hoh`rxu1(|oSBzQ1LURDtLR|L48 z`hG%5Z+T_|*c-54%(_}Rv&dzyg3u$jKiq`!nSG-RF^EoXq_9vD^!akyw949&LIdnT zz!->(1M9)|PRXokDM-FbXfj%W847AfC=zmQ;`wYmRJ64Hi{~V?XvW4!#Xb9f*G)+Z zn!5`WK!3l~JtX{h07H~VYqm(MAb*sLXaE&n_R3?(EI(|n-@Lw<` z$*7Rb0FCIf+;nvqmXr~7Gs1W@&c#!?UJdBjv>|(`&B*KqkO<3Uu$xXzAQ&brhJ7V_ ztPN2=mE{YY-`K}6_32+p$|qbR48r<_m!+;n@)23DNX|{Ncw1rx+K(NxB_NWh#Iqwy zrk_>Sug9@@=>*!8p&rBKow3-FRT$o02iJqMN4VIN|Djn4Hec8TPUhpH{7UuNs{41m zN`GguU4EqS19Xipi_w(wEsz;rYJgmw1%rK_JOKn z-2(I^$o~M2{X6#xevEv%?QMGaDFVS#A_{ltuwQ=aq`zg_?TRi`!HoPA%%CfDtiT5` zp1rYcq5YN7kRlGH+GbR(p=867%&WyLpKsM}v$#*R^)pZXCJqg&@342&&sT4O@5pJn&6N!-&}(w+zNXhF`k8o#2FW|_NT#Eb zc>;gM>$>vPJ5&=Axrr~kj8_fc5Y7<_B*}~Odn;Ri$0uaJqR0xCjVE6esv`noK|x?Ir0skaR)Py_ znq8BPl5;t+bbQVm^*URBt6u@g)3$ZZ8Vyg`R?^}@h>c(}cpfRN^9OA1Tl5bJ`>-!Y zP4wNSGRscfj>2}a$cmh-ebdfen^C?1wnSu&*uJ@jKl7sE2<`@p>?thbmAYX_=o_b? z$T}fo@1ffCA9;K}DfVUo;f;RPX|<#~8Tim_N^x*udEKdYTUJUCIu7MSjjFiq>?|j5 z5wc$O>+Z#eu)UC=dgnL_q2zNjCl^8Q6SoUUvV=H5j-v~aTXW`jlxb71tIULML`b7j zCYVU6dhA~UHy~DnG$@*N7WxRr3L5-chDqVHhJtJ*%Mus21E5>g;$E>Lq|gJUGp;VT zr}No_^FIMAZ57K3%(~n8oWo9@WU2Q>v#S7ub+@}ND%Tz?d|@qz>hi`wQV1KrJAE!m z4;&JV>iaZIz*$iybfaHTYeq>1yC!(7cD@?c3uSt;dnRO66uJ%c#27t`@uVDK=xv> z-4unp$n)!EXLRO&=UffG`LetH%T&;*PEWOyZ+?7v_f<9TGj+$)ja_D^mQWy}D*ECv zQ_&<@^f9>6XbBZGI5|hI87)OMCou~SqC41OVx7g?2Sheu*5~va9ALZ?)rMlIUH4&T z@7wfzF;H|MycAF}zj^57-P_;Hf&SFbSDZGD!I)nKb%zZPygZ-Gq-h(CvV;!u%0d8T zN^R%5QiLeo-jA}e`@;3-jk72HA?ijkoz35*kgms5%}d6Lurx~E0@cctm0_AcGxZ+` z>gQ%wC!SAjaNH&iPR`1Y!{|lYy4e<_IjcX8HQIJ#)!0T(4Kzt(pU0(tFs_@tU3}l# zqOnF>4vll;_T`p%#GE70)362Ymh&=!Wb-|%c4q1&#JR%Awf?{s zRPrKu%PO0I7w+rRds9tkwt582uLZ|260$V9gQ_Bd4_}N$vVT5JlyNsy)QtU2s`JB2 zSvtF235el5VPn>;g~|O*_PJ0(k3t5BYBw`Fa^4Zw+(qA`ZCl#QGFbv88bXtzp$M3` z+kwgeGJ+Z+r^X*Fv!lb#kX16%y|Ej<|l39Ua1; zZ`v|?U+TbBp|MMbfKNHF$v)B)pnDdbKBKrWoY|uGS-=3jnH)o`IXsh zlQEA#y>YUe#GiIobBlO23Is(?b&m=uCe|bkEoOvjQd1NC<$F2Oz@2vEOKx~z5|O4<7*W7AF9Gii*4Y?2##rQd{bFks{piwpFm=RqRQ4LAKU-T7LDd&XUIy;Xt}Zu==p*Z_#r)qWpxP2*B!WAZiKHYOF+7U z_or6Q!|@2$;OHh>+SZVru}1EW4pI-El$RjO(z|{)`tGWSl6otSx8#E04lX~=h9!8Y zTNG&6WbtWU5xN--z{nnfj^{a^ur;?LWe3EuVHRWk%S$)#4g0jys))O$o?LCGfzwp^ zDJ{!eQj%Xd*ilo3?_anutiRe2ErEg+IXb%E*@WRiF!&bVA@&yA_-d`JC}ykkMD1QG zPq6T^{ScCb=UNRLUV2a$!tnuNJN0?3pWe2>fPB?Oq*iN^9K%&A45so5uCI@T9=3POrKyFHl~r^#M$-6K0==}EAnvvXCZcrM5)7>#-TL<5v`Jx=u;k4D=?u->;meygzm$V zxaR}Jqa^CoJgO8-m!!yKjFJ@h(I*t5K&a(`th$eek0zeYHq@UsnaDYkK+84gy+~=b zNzU3ET%}^34wE1$#lqIjqtdjnfA8MyaLrADu{$%t&LeL zzO)6A-6WzuPI&6yTEG$(BrT<&J4s7dNtmV*;Ex;7uFA2Vo11zQ+wucHpEbx8pN!qQ z>k1FLMH|PqcaCpfP&;bZzz^YLi?{iLO69wf!=KPQ3Hc6w6r&5Y9kWQ5ee$dXX=~(b zdFxqa`P5Ucw8_)bCn9z7wL8l-*(2MVvj$K#V_v}$?m2#11k{j2Qn}2A=0GKrYU(x^ zLkhRV1g-W2w4@d#GMdVc-Bnh0;!KjArg2{0cAfw#%G^iW^@(k^=4ZU zcie&|JZA%+V#Kw@t5Ysf7f&XHdaEw-LmgC~2ZrBbD2?<+%sEYA-e#_}B}hWX^@@`2 z8#?`H4I35VavvEE2dJ&7uMGCYZ-j7s{azT|rSqP_YmS^AUFCYdHQ4y?2)^knGW7Ne z7PmjYnxDA4W{g@NUNSQmeK8n_K^2%=2dt%;{$Hk~)+oA136`DBuv92YUB$9@bvlp| z3$Wu?9VQ@@CZkVkZT%GpIR3Z5*Q(1*zDt}yO3?hQjM7r?-99h^g#@3&lgJviDh^t; zBH&F@SEE^>Frw^=dN$!*M+~`P$FX@x9Pge^lTvUBP;r5Zyyo70rBi%Ify@XzDH=ad z%dAPy%lSdC%r}#C<`jZRd{>^-o^m5`HtXwEKMOlixhT3Vw^c)l06l?3H&*(I<+F-v z=qG;SlPPUQ%!Fje+tVz!ko+K3cUzr9lU6&5bTLSmHW8cWcQ<6+$?8uv^*v|*9f#ER z!84^PHyUNy9h?gcKWmuykSlh`fWums(0c9?=#JO$b>UXR5tE;Ejm?j&)=s^xxS@Sms9;++Fe5cO*<&ZHjb|q5sXk;EV%TPI@{_LhpQg< zT~pa_JDjiacy;j2b~`NTOeEiUwHjzb3~A<#E4bgV^a{DDk>Jo!!Hz3S)!=`s*7CcFpg`XbFWT|;y{M^3qX1pe z)(tQ)a=@A6R-Kv9)FjzQ_}$x5co=e1;kHm3yq|D%0K&HWnl+hq!nfR;%B5;zUXBp9f;AE?W>G8RY)(s> zz{V23?SyN8f;Fy6X9_DH81X}=k4expiyqIiImHU+Ju>8K_YTy6Ly}?#i=^2q@AROeiw|zT)e255tEcx97fF$pxLsypUIC(8C*?jT zNw|_jdu>oJ5{kD2An=liy|L3^EBxw{a*_zAX84_mXKF}<6dvx3l_MzCBF(&0kj z2azE;K?8-FA3?^)xhel!3%deo!sqHS*#!)d45XSK4Yn~1Qz?39H2s=2xRI#RA3JF9 zbdKZXrmF3w9}LM$SM6gsOa0%W#+Hf6LS))Sgt{Wehv9sGgDglAlP5|M?Pd5 zeht^EoV*;e(|!@x>Oy^Ng+)oDuEx0@vaQf^zi@OWz_KrwNYJrhp49rlwKqWL-; z_Lp$IKP5<*y$6?15E{smY5OL1H?p8u?P}7ITol8f_hXT|XTlVprY&C|fYF8yy?Z_I zH>5l7OG`;bPwhQLQC`1?{IG^~=6WkgOcA$h^vA2z*`T8eq*u$qVk{^#PbweFexjOd zLNh3uG?l9Au;SN9z*UFI?Es5uL)&ZXRcyB7&R!a-@S3{3N+lx>_NQ+4j*4%dZ) z!Gc3*yzs(weBIt_N%0mbBMl3xf0KP~;tkiqFV*T<(&;%gipE4*YESKq)_GAJ;3N^o zp2<1r2%nvQO@Ci}Ox2~K+$QYGNuv!q@%Z{CjAkW$7q+UnaPI1crc<@v>b&vU9{DKN zx7fS0gdYAX%X>u5ql#^Z8l?Aw2`HCwXRkUrkR<~}iKK3|HRWPlRnq!yC8S~mK>~-J z*Cu>x&4>sc190v5nP2T=svACXv|wF&l$AdBZdWMKi&w6D4utvcQZ5uQ2bGYtAX{tK zYHN&=x3{t>sXlTyg1*|Vbuo0*3;}}MB2{kgY?=zi$rwVS61yTEg`(6IdpE$rt=M^r!KT!JJc6!vgwI6a_Uxi~CC#IK4O8~p6E2x{E1;Ly8C_1xQ!Pw7}xRlLc zWtZ&hPIP+n;5EfMgc>9ChWBI6h&*leOhjrJ=_I^rVMYbs|KUb@pj9t4#X8?*RjVR8%#ofe{nL z4nm%t_PAi($`lSsa`Q zs4~iv0f&jQ62Z9TK8+t$CoH~UWNVRD zfw~d&ka_A}cQk#jy{57*UIn_w!nuUwPTAYMQ%M{*MZxgP5Y42ikgA_=jI({6X3M=G zfv?j(fFu$pqlMa}>>Ki6ZJ-qRNir3uXR*mKWHA&7GCq*jp_weA1RW$9@^n<%s#nP9 zP2I8Ob_TT}Lru2650q2u4FjLzs+ENEP%$~;`y+FyfAQrqBjD8VXMS8W2p6OnuB zvHpJuaGKRa7lY=s_!8H%5oaQuFOOgJf!mXV`0#~3*2{#g%05E@CWV;5-AP*>tiU^i z8^d1vrPRHnr(`K~?~HXmqb3c+ff*ci^;3s3(zbnHLG#A3wR7;8$vTMdQ~pBft0(mR z!QQOZ9&h`w4YrWqLW^YXCTb^W5`H{hYi{QN*52J^SQ=(&c^>mdf@~!W#Q}A%nj%$< z!M#WQO9RoUdLk4d9lP@v9=D=#N_NMX_o-iX+%Sv$koK&gHS<>qeG{n$_}oyWg2LK1 z3|JuJ1}@f%17`>>z|9m}RJQ&*E&dZRH?Ez!0ncv1HBCI;RzZelnk%f2JDA_Hb$O~C8ql+pj?rudM zLRd@b2;^Y`lZYrsE&H>N9fyU31vq{z))l&nAXPvcvFx2~Mw~-+h~O@a_GXlzLhIGs zQ0Pu^wt(W?c;B4d6y(O#4qq2RxmlW)qhh>u^xoQF(WR5L{Ra1H*KmixPez!coC&Hx z1{aLss{j~Psuq;Z$c)ZaxGmbGFk@=HgDXkmsE}OnLyG*%CB{I3H`>mLZ+Ob}DqW>b zvMh*gR!zssRLiAN6Ep&{$VNsk@ zkQlW9`|%JWiVu8)^2398D$pc@#*z_?LeFyam~dt5G?Esk67y|koMC@OvHkcey>`C+ zY6WutqVX3#u15cZ$v&|HNby<~Lq7(K(L<2%fCW4EG(U&4#rS-{;BlvK3so;WAS)-8 zUhfx@=#aZz1hvRV#C|G$ogvh2SW6m6^sSjcXv{EHQ;Qm_2%K_!4NKxkoz&Q8=8t_= zkyq^X2NM&{v~n~a4%Y>7p|Jj5GGLe4NpFF?g=*iM$75LUd_xea(f?eC;({56{c)*l z@JF7yxB1PU&IXg<$@6Y=eJ5x(%U`rR^QcwHvp7Luo+eDlXTjx->Zr{5@+vXv^m}9^O1pvlx3T@h|e=Z(C zhhVO=h`gEDTxYW+_Ga$+qN%~qRv7$DtKzIDAJ|UM4sUdeVFfk(W~{Wqh?fRcLG#e0 zkOB4^3Dw6U^_m6@USU^L?gu2A91@h9^D-0=M?ku0=B{OGH*S}30I-S77&r?ge?~fe z8!h5FO~XhN;WgH4?}1T?dg6DUxxj;l!SH)9B1}s+Q9l0GAsU6xyMad-6oypJrluusQM^$gc^ud1F9$ zRlM-ytH5JBQOBvQ&4~`ogOpB04Wp#HoKRt z(^L!`sJL}d^a*ei$3;8}>ls5o!3pVmaS@mFA;bdNBr2~`?Fy!>Czdld&H~v#8D2*o zzH8b2xHk%o(Vnm(n~O9Xv=B=*l8O+?gN=RpPNHs6`$!@AfOqXm+$>lTZFf$ghT&F3 zOB1Km_XnD#ZKnnuy=-J(X*eMLg{&L*sA*7`?p-=&=HW#3zn5HNNP^o>@28mBdE*h- z%(S0)r-4FO_3Zmz@FrNLBSdvCXG^IV?l9Y#Ymg`oR)v^6XsB{FJ#x7UX2=b)PRD1> z6IcVfOI23zVF=(i0RCb-_m32<$27$(>+U3+EXyj1TECre;=44KsVc@iqE7}z(nr>+ z8QJ3pGBZr=;B4vEKGLaakF!kvRhZ}x;>-=fJiV*1^#?*}#f;<0j2V-|oJ;cT_0mGO z-y|TgLLM9CZ%{X;BfmSo-0+_|J6kVTHk!};Sffb+*s=Uk&=-V5GMig|IcIQiX88GM zaOP7nS8!ED{OwT!aj*za#qttfDbhet8tssk%@@oZvyn1IecUQD5hVvK<48zIkw2ql zMwx!e1h7b?BPP5J!CQF{yKmV5{j8@Sx_Zv*p1d#gqD0juI?izuV!ttTUW}1u|Je_y zIX%7f#-H|HjFK`m_ubYkXq4ku-)Izm9N}7E^p1S}8&P|?6b_f2H$JB`!wpeB$W*$G z*7y=eVTI4aEm62l*6h@|pLn|BMb=Ii@-Faq%{#bl24N|F3U%D++yDjhT^QX(TB*{Z{d21^# zg|@xhirT+p2toO5bx1D?Cl)4xsa;vK5-#)}^@u{z;QhJorsHF|@WwxCj3?h=G{o;J z0>iP=qz3UB*$^PY65$7AYHtejg}naKRSTmD2>S6yR(;l>g+cAyNrlno}KQN%#K0C#n-6iG_-A8^mEkp8%>pANX5dj!$2uIr)woVhibF)@BU; zmFyR+F-17Yh;qv(QWPP`-ivGAAxp@R^Az=4jW~0N`i*T3)$X%2>e~iq#K2I@A9EmB zlHi3z0`B6OjC0RZho&IQwyGeU&1$?cQFX$=mFz5f`c($WC#K^df^I0nl4t+g96nm~ ze^w^p8bHsgjzJhz&D#B;8MY4+^fD(F)UQWHVnwI{v~+>71n8tlo23Vyr#29!$FqCm zG=J&8IR?9sMWa4XwFwGS1%w{7m#tii!`m}1=C z7)g@DQEQzL+_JV^j&=Q{c?VTBj@8xxQr{bQHEoqxK@xm0UBV_d+lGwQ^u< zC)Z8ocnqMg0bzm#!Zfkqj#q<%<4y{y$9E1iw1m*BGYrT^KfNuWic-#%8(Grgn7!J1 z=zgU;@*(2Ppf?W{Y^wJ>$&GH&aWwSkAdKa>uYp`CghkqFfc<2?;UFjGS#`1Re{^+x z{*!fweS)k`f}7%8bE+LCZDHdId!O?5%{x?sg-+}%Yw*VJP0GMIicO&tmB$HEuxjFB zkQ+#r#0O|+SDUN8g&i7=vnMwgw$~qAWw!=H2*2qwB1h^LRQG+dq2MX)shAFzL*@3JAm#j)o>-0|jV{oqWaXP#tf!>D);_Hgx!H@i1-PtXmMt+{A?mtr1r6 zwShbRvapN5FCv|!-H)qn3CbgJpL_Ab_=u@kE2Y-FPVq#dZg}O;lf-m2h7s$)-43io zxh~2b1rNhdiEs$$9BlS5N|4Ihh=uzF`{L=TLHB$osrUYR-$2rZ#V$K<6=pUVbQpZj zKm{N)S4Lm;Gc5~BD<*zTs6@!u>uPGLP@7>`ggagKsjcbMdRF4K5PVrQ9gD~QVyqb} z$EvZP8T+IrFUjJ8wjJtSLl%dCmYdMm27NZO$>1=QUS3-{f=cZK!L-~rU3XDBv!gjY zY=N#NbJ(H{h#Bufr6LN|n*^&d3Q#)UKjPT1YG^%G`!K^~zJCxBxwm&Kj5}3Wh8OR9 zidU*L_gorOLE6LswMbYm0Bm_4!wGCjgj2o14;3G!Vq|Qj0Yo7;uqkN{|Hi-^uuRMx z3Rnn;-4l7we*uf;P?p8+>45+d&8x?oQSBPfznq5FNF2f^z?Yq$L8O#4u;rF}VW58+ zO_A_baalDc!k0Q(+hxzJHy0w+?(dS8*8cw8yMuS-`CJ{3U3nZkwIF7#br&NAcXRsg zKsHq1taPu``&g`P+taWtzb-Aod{BKj>9`*s*S9@JF!8D4HOvn>>wHIGOM}Y7|SbO){Y{Hm%L%FzzDmD_0)by)gww+&0dGl z=u!cPmVY~E?&E|CgJk%+lW08O8P~_`d zI#HMl{-$NZr>a2u{t`btln#*uJrE^`r(xEqA<@H`YYH{DoK8*YBp^wkj$FMWxZFWI z>Ku#r*PLcOYCj*0G^yO>Gl&_itFXsITrDBn)mDo4qPlhFmI;?$YZm6CaTVP0J_Wez zJ%tz-@BaCDyn6y@ri)Tymc0l!Ra8V(;m%Uk1rg*ov5pzl#KrRRScF5pW#S(?#p|_! zYt`+r#(5(bVrUj#ao%?1B3Tl5zLF>AtAY}kImwc@;czure|b#RBaFn-jf9jiD9-by z^5F0|#+HD>glCbp=(N5~XbX*fW_18Dc4Za`7g+^@oMV6Vucj0m5M3tIsy&&@5 z7Yp`0h0AUkS8!aXVWp?*bW(&<3q6NO^#ZU9j`nTSztjt0iG?uRC7wjkf5p`V_bu!T z?oTcpvDC7p0bVlJw6e537yy>rS#?jhk^E;P0d!)!orEK}qjnkr@nO)t4bUZ{6DD(% zYOg848}rjrwO#GB!()&%=`l?q-dvmoA&SW^Qu2-JiU4Qqt++KL_;g+F=?S$@uV|8P zx0$V0tuXXEI=NvF!5ARl4kWsX%=!H}jroy)>}Wyf;QrxsCDMz7E8vH_0QS>;d4PX! zZPGa(y|mT)-cnc2v69$I^TQfcn$7J2um?+>HCaJ>9}tv#fTbi)h^oou`bx(!WBoqBqe%2SD`6^N z#C3Uj2=cr$#rZKw#9h%4JEz=fQ&X&_89i?5f!nVPuwR4j=_QoWT5zZ`Tl zS6+vqKyhp7X_*?VihgaeEcjEYCb3X28pw+UF(QKb7XfP`Ct=UT6QHGu zagQQVZik$GKposTZH){xSEUEwa;g;S!@>cY$xAbKzyR_P&6O^pMRn<1(XH8o5pGK* z%lw3NlxFy8QO#`>Y15&Vf^XI6kCl;_jCEV~_LMSpP-;gT&8M{WJM?wc6}xT)#!%Ok z+9=@==MD2BFF-?7EOKqINum(Sxe1lZ+7OQMwV+=`i?;)rm*d|@Ia!cJbROuyE5_`$9CXI@Ke2fHH=Qjcb zJWS{rNhDeOjKT~=-5XXFS&DUhtOh|2?jhucha0g4ug^{+G58FoIm0b~K;coV!Ljt- zghVTyENrMqv+)aA$Ah!(?WcD3(09u)DN-E{PscrOw9GrJU4;n*{%1aiFd1VSh>3%b zeCK`6F^$I}HVQm1CPZ3CZ~p|&SJ?P)kApS-er9oJ-gp`qiEhU7R*`J4u4~(5K#P}J7{>Wq#0^j4$i<3Pz;1#5T83I$- zyPHC5z(Cz3#@Bb&Pm}(SbzBXFMVCBn16za5Q#CJwN)gXpqV0 z`+`R4eYh8LbMU5@2fpD{=+U`)5=2CrU7|^duqYP@w(q%-Z8(J~ zEPRf_ofa?vCdnoY195*NnS~uYG$%z(7QQ5gTU5aBFMlPG)-z`@uwy?4s7$6%T)-u~ zIRSSMTf*JwkkC(}q-Q}f$mUUF6qFcqrHOb)QH)x)F@UL{IVK3l5$+D;Sl;e%2N%Q} zzU&Tz7T)p-POH~Eu5M;Ub#LZ~1#xZ16NVZdiimT>p#&xVieCzj93b1^?A;~88PeW*k$3V%-W(7c%Ax?uN?k;= zy0=n4$r=e!l7oK*{h!%|N8aq(le^W8XU^2l{fFi4hi-lI>3wtkgRzi`qDgec@vo2Hs8Ufdfq3SoF#7=82z|RMqj_nq&m&&>LOB2$;yZqEwXq3v z3$VV1i}U>en|@P6IK*{4_Z0&&IvUu<&1dJvE)!)^Pb&i~P=+Nwfvz}5B2FYZ|)WMcuKsQC%6|_CAm17TOo(k;( zc(E)a5lK5`7A^n*BZ*rKgtN%YpxF=cC6NX@CjONkWQh}cghiaf7$w{@N7nTL% zpd4F)LdPe_G9Zs?TSi!I406b2Cwt8b;@%_r)0O8U&VTqFtun{A`P3`QCP|l&0QwJN zTF-fcu(RNMi>^fI%{!F6{1P^<2&Z5!v|)8;cxVlUPQ+g;bm6XGATyw zfnKnKNFF#f#`0cne;>~KukT4(uv{<{bZr7YLA2e-enm*crl`HlZ1K_rKWtww{+O-478*s-BW+|FeZ6Ft5lo65Ym9_75DJmawXEr&6xH)J1dWQHVg;2517= z4*);s?^kQ*=w5E)>E>(zM~;6R$`?+WdzN2ON;Pv+;2m1H1<4jv&Vba*RS2Hft}-tm zFj71aDR!TaZJY9_(nb|=!`@qP-E*c(QRl!(yas&6Cl72n$Hgf&BjZoyruY-8mn0<# z%aaautPk_eBxJ*=MPt8V+DGzqs9!Dbci)$}@|wwmOOls{^^wrsbjIeB-?A=(h{e|! z==>`Gz=F4R%vjn4BaEWbDrQEABkBT7TWStT|1bLyG^yv2r&?JRyeB{TX1!I=s;fxP zf@*A*#9l7Dov||Cr(E2tDh!<(PQ%i{Ie?SLc7`=5c4Vl=6U!kgh`_;Ds4$})di{XN z|2Sg{hW=lnr1WwyEe!LyVD5HzAFIwf1-7~B(bzV;kK103?v9*}OVxAj^hV8pG+PPStmQ0~+F%@`aTDpCQSKH- zXH~TX1s8wlNLy8J})0$=vrhu)x_`M5iUL2=I1ta0_wh!Uh z4^8OgjT3V!gCV@vkHg2SGa2rc{atfsMxq?$8$5HEcqKO@YV0rw>Q;t~rBuGx3p=F> z+BUbQ)!D`XBaQQ7k~4ttYJ~cPXrAc*-j#?VcZOVIR%>jdYceLMkK^_=wdqV$@6i(I zNGZC10^WP<|A-v?SW-fOB0pZAf!aBHYwBrlzqBm>oORN`MCmV}RT7=~Q2@gYAU*n_ z2&UfU_Nyr<;E=rmfM2~Jg1stpyf6p9nSlpj3TK^b!%k(ae1Q{MBaAtU6~=W@wTg;Y zN;Yy9pyL<-OXQFffD{DA_%i#i8VVoedy0A&_EtlDGG`Dd+?*g;;rr>qgVWCfFPH~= zdQ5A}ZpOtOD3DAkAiaTxo5f(tmkmQKm?MNz^z{7u)S>pVVo^MHu%=;Mwy+?sd|^SM zpSpeF`6N?@Du;lTWoMx<(}(p<2h`Mtt?R=Fd;@J4j=0yrUAqv2n3 z+|fQ@p7dW6U2vkzU*z&Xg**MARNHs&er9<_?OR$GPk3~1=AOGJC)69pLBptD+`MkR z8$WfN=M_dB08+~tC8_TiX@IA(zozFAO7i-VbJ0j+lj1J4DkBQu6VWl~fR!0-TsB}^ zDu#w(fYwB$1>uAvCs8ZYz@QZ*oK?;QfDewdL_1H5L51!Y{dRY^Z3}ieCu^LpcsO37 zx~6hY$#w1xXN4De%lb3jPp%X$bWIOXDF;K=Br%gRQO$&ZJo}J+h z1Zwd^@ZL>^8FFS_pnYXipIcdC>SoScv3w)-GKy+>nJDA)LEL})j{o$&+;KX0hK9PF zYwXu?63)YBTp7$FK$}zUQ8*(6N#T7c0koJxOA6=3;jmk_ltDpUbZ+{PIC75MG+rgU?vqd+X_w zdvEmB#3Kb1g?cwfZV+RmVT?eWN5h2XI147BiC=~=-F5P>rCAt5W>ry)m>V48adLwk z(Tj?O6Z{u^eWvMq$1(@x&vO_k0%wS5SgSRZE_XVu=+XYyyy6E${(Ufu% zBw*1%0h~LI(e&X;0O@qDYcHr=rWIjaxoun1%ARcx(q~vnyn%q}^BSf~hHGvQ+`c$v z>@>UN2RY;I+n;^*=JDCfckRkRcj6C0D?pZC3uYz|7fuo}yR~yQ5jVAV1mXvc^`Xw# z!2j=OcHj9l%!`Fvp1E!9nfF|`tvLgW000mG(vvhvF=7y0dEsSSa=d5+Q8=n9M;6@k zySY|Q5SBMJj`P|&|DhYRpa3mPvH2%5{q08`i4KtoTD9L;+# z{OE06U60l{#rDGr*b57nuD;@-`DOF`^E&?~TXWpw=5>7z>cuHHXoECgb!Eu+4w2f2 zmp8wBExTqvAQlJ`M#8x&mw9$wkYg)p&8P&r#S~VfEUQ8!?A2I@kIv}Ln`*7}EPvJ6 zRniamjcdx33;hF2{|Jj)5Eu55v=NH6G(*5SM0KD9NDD_r9_)Q;o7J2vQ1FsBg>tb$ zZZ@6AW>{s3k-6Cdm-y>uH+#SvU@}Tu#$3-0)X$nvETu6f6{Z)(va@u7#j0jQR%2r} zvqg;Yd3rNh=D8Cve!RWFgp@+pf@_7nV|QT0pE6U!%NUR+^*e1k@hv5|^EY9MlZ1WdNR#BnsAJodpR=8BMhz2x&>dD2tsG~DV&v=4bCVfjpzT}5Y~v&3s6S?IC+Cgh)5E09PIHrK$71= zw&Y8kR|G^9+jHwWMJRFlh)STiMPkD zZSe-8Ep>r{Y0XZ|XTk_5AN1jAq^uamQVWs`orIYj7i8LJ(4qCkrYzbLlT zgCWcRfPFHi3@QffF+K8)Vs9cSWf{bPY}B?zwshOnhbl_sNlS(q{5mp@J074&FCv*^ z&>@Kw&_)o1yNnul*GZ9YZD0Pv&VB8ZurK)*!MA)#+9%B{&Mf;HJGx?;_tdR#esb^T z)r`saU-5^e@=qjXjzL>xm@>1(HgT8}wfOkkXo1hHiDQF0^^vEqTM8~5~ojcE@DbsZ2G z5C@wvShY6jXdPum)^b)=1325B)m@_ty{5a%rK?n5a9cbX3PwNm(cg8vGfkKoZ>iEsApDM2Zy9b2+1AfU8DQsfbz{NY3o0Uo0OyGPk>@CWrfaGM54C+D}## z4*l279o!G^9os4$do0Ul{IXz$2ppzT_|Ug6Dd^Y+8Plzbw+vcV=AOF;tVuc98CVQF zVl(l0IJ}j_Vr1){JwPkk?3iZ(z!S`v@k@NJrw7t)Lcn2*0hoL?vPg`C2*g#`bqEp0 z#KDV}*hVHvqs@`Y>S5nnH7UWE|857#N&<^|$*KxJ=}Pp&zn?QYDzx7)-)f8)1XeC; zeG)D0!^6qp!)Z-W{%rZ+xOeT^b>qF0-D8&B^r@z40ZIu`?QGF3gyjAj$B-6+qrqR2 zOSkU|j+9uarfi;mUAwWDF-LKy1AHIwNeAS ztP+Tt0E4b)co@Us;9GT=0R_CPx)2kgRa*WFaasi~DiP7``?LGt1Mh0D-?f>nSG;tiF+EzQ%`XV>7MExkmDlIUl&YMX%8s(0 z?}ILb#lFweSM^O%4ZY14Q(r3@-UIiaLM2n_btHL1hI z5MyMA6R;!@<1|vGG$~aP?sF>T|dKU%0Q zQvJl%#zqSI=WFvLgfsdZ=aVyA&XD;~=Vflbp~~l$WembO-}FY){8@uFr+1bK00xUd zq*5s%DI-M)jhKx*(ct}PVEzW?UnGO9)ThiVn>R(@kn5ti_yy8C{C@LS$ZJ1cYpeEY zr_WXt0cDKzPK;o|ij5~2M{8>r+)`59(9j?1;~%tL1URCcDEvuk3R7z9tU|qK`Z>b% zfg9`N9BgVswC{ywH{Ph4cw_1debI)gemDs#BVHb!ZuQdZ@BO_u-k2Bj+jH}$GSv%s zRtSHLkQ-U*5gv=XY6}Ke`%Mlu_`X(aZkp|CJ+1E zErBysY<89S<6d*gJJhG1yh$kI;9VyR&ON}c4x_9%GYYYDT z!V7Zb$jKrH9OpME?&knuu#?bP+o__kS&!@^cBXi_br-W~uJXI?m|LMVl9WFiQy2-LT#uqz# zT=`XHRr#(aw@+;fVW{I}$2+_GH;vU(JJ;mO8-0!Sot%xk9S};FW5D-x%)O0QZ`f2b zKKSM`xZGrVdxJvpXFZYWEyE)`APtd(MaMnc&bzT(7!F{#8Qbw}>J|2Yl*%Kg%RJ+r z>n84jG_K|G^cX)UqxI03u#Z+BwMWO=&r2xi1q~Y`nV)CQRX$d^eJN)Q&icIqew?Tp z+B#H~cyaUVo$&CAvdU1t*RjKZZcDu&yzq_O64wcVLR5dSUEX-aw_Ka=J4y=l zo&SG@_3UOW2<|VHF)77hQ z?vh*h{^DyN#yB_5lUZ*Ms7aPwveTfrcoI=mt|UdYab-u4 z*iE;$XyPQ8hQrD(=dXfcdXw`DMfu`nRzPDQO;a?UvYxZYS$WV2#ej(0g?4WJ7GE~N z3)Q`CZN1#V74EP;y?oh{oYW2+&g?wX8v^%TpHc&nROzzBop2tO0R#l4!-9x#k{ARo zfxW5WeS0GqN&p)}itndJOajVtX9x7!zxk8YyKUg_%za%BQBZ^^;iY#6z? z0C3gHTE;?A7FesgUvXb$R2uoFL=#{1tya{5(w;ju8IuR?uMIv}NyF)R`JI6z{Lbtq%jR%-(Jv0DqXERo?ag|g+N|Nmd}bZ$?$wR zE@uM*J#!}a>L^TqRgXV)eR#HUthl@~#nTu;e(^XB= zVhX9!uU8`I;fUH~E+vpmk$aJxl>V|He{?i2|0i%mZNz*yd_EkZOl$8hSMR{K3LgH7 zbcFR_6yuX3HE7TzJ|ly+fEDM}bN(9r=*gnb>=<<97Crff5^9;zS8Y2N4SfUHi5-Yq z@p4}1GO7{YR0UK{DAltq)dT0ntl8C$u3+Ve5+a9$5MfiEB2_>kf-1X(bLmVaMpS|A zM+earMld2c;h^^4-QK>W1zY9}v=7Y5L)#{KOHPaQg=efs5G8;Yp+HE8u9!#-H-{n^ zlAxMoPmknm)~vs!poOCwou$*7@pPW)o#(z>jW>)W^F-J1)VTi_#qI$(zN(36zF8z& zS65z_s9fDD&+T@uS<~w<_CE2r59Gf)GcZxV%$^U>ijzn!a*-NAKu=S>Kjd;+Yuzo# z=P}UQ=+W*F37JMv+~3#NW?ADFoViQ`*ZCZlXl~Ao?%0`mXHL_MrphKqll4P8L1y<= z*A=#d+z*r-dO|SB9b6Z>H`<2Qc~!p;$j+YEs@JckjTu?pEDR|NcR5aCRj6Ls4@Qnn zVXh29h0OgBYdPJ5O7;c+B>`F7h)>%w5}S4voq#l)yx*aZ z0wv8G-0yiD4YZdDb{S*`Gu_~|8DjovN+mNI9&mPvEFoi1+aOW=26wR`)_2YnQd8eh z49?>0vc-ow z2IA4xMP{DEjApV=oGA3S7^MEdkt4pt+dp9LaP7UqZ3fa?PzzjAqyc4suKH??`Y=;| zdeD_yGNK?D42Q5zw#SACUi)Yyxr8tJmlMV%NUV~6XYzXD;)112D4;AXTv@LSoO<`ez4nQP;8~)T~()xN+ib($=jb zKB*lR_;v!0Q!J35!{?c{;IYO>v(r3WnH9MN0q*I=-3u-vrFH}*gYt>CXR$6zM~YAj z=?3nCS3cqtU;un-P!eI$Q3V(CJ{Fez#n-kA00Z|mCi%|VXe%1^*?0Pk z9ej7Wb-VVqPr}Qa*DbC$jJ0=IQft=LXm>tYrn(14Q$|jg$8$tqd*(J1%B*O7<%5h= z>Q=+vp%mmb+$;h-4)b9%o-<0O$n&Hi$9&R7QpL+@N)WJ8w;+H_vPy17aYZqU&Nv85 zjRRJ!N=JcRwv{vQsq5By(6ejXwl5aT7bAB$J_Qv~{bGo-x&~rcQHj#pFDjBsMx(H! zC$zR>EQrP%_Off9QDFvo9OXMqYc`ZlkJ{1=HOi0@F`X#Ht*Jd8Oc)-<;Sd(#V*2T9;R*HGx8>Q81x#Qw^(NNB) zxknGjv6;slnq%@HoW?Y>fsLFrxRKA|<@cgJp3tl?Ih)r^57dURq7f-0&O@{W#5~8Z zh1?gz?d>1+JbrA_R)XEjl~;f-`!>E=T!ch+abVLoUc?=qO@jN36Cv?_^rlz&M-`4uQ*)!I4 z&!d0*!v&88Mj}DxGo-;Hs{WMpxZ~e7pe;94`fqyL@KpKK*qqqZ@~0YT{t!G*O>>@` zea>0_podE0<33I#MHM`i0_R+iX1T}^cpkqUbZy*o4M_-kGM<|QTWz+R>ATtDmUh_e zetPgg=hDSn^9-iyTdSM4ZF_jzwx)S=S3{1yJ6T5+Cj2Mn3&|KzlEIa2kLFgMfRJOn zTfJu>L$8xoj6^KAxX1_r1rk+NtvPef^XJ*mPcQOZ>A2!qbXrbdR~Bse{Lmpea-zLm zdVejp+SuY-BTr6GS1mo6>iy`$4>}(m8IgWhf6-yhvjPDKnqH=sMFq7vH7Hbo{JGyN^CV>ScD1})Pi9BXrCXoHG+=`{1 zI6rD7ZA~~5&bPqXw38AM*_)DuBR`3taUP>cTsaGAVJ*r;ADBPF$v_Gg&nCeQU1=l4 zNP==>F|6nWB&TIBY#nK98)2l+@cUD#_I3^dbrhDZCo9xoQ54J^zj!>3OeKP9(MxYE5kDuEn^a;XiSlARU)vT$xIJREAtYX4 zsx8mnDscS~Rgp)hT694AGi&%%sD&6TZ%mHuDTFzEI|u37TdBs zxo)NeirUou!dU2J`g)4dwt1VI1I=DT0y#q$ zl8~T~w>o*Cmf(nUILc;}&w%XMxd{M<5RA52e2{C@8M?_PZz#lJ4Gnj^RW+!FxvHk- z0uYVG5{fNj5GIfxFrE7oDjhaj7;ZZ80R`yf6f&P zP)ctkXqpWo6yl8*tw+ZZSf9o;87^d_@;tk|Z=i(tgdp{v{=Tp)W?4XeaLFDco<8XB z6HjdsL67C9A2Xk^XtS8TWSJ4F@HeCkIn++&RpX&FJVL+N*7oLZ?6#Id$=XvHjEcN~ zC#m&d;L)G7)`uhE2p2-I6cPl`L>Pi_SRg+CIWav(&b;XjB}TcuZ6mQVS`fH3e|82- z$7Oz>m_9%DR98ft{CKF3=C6My8fekbIJ}|E7Ioy)0M7fR-+a@&xxNaJ93yq=52s5|TEs|IDiBmK2tMbcd{W{RR zwq)6=Rlm@urpD9GOFZw}5jqOS5yJ%WzQ9+<7EfCA(f}4d3&kT%!K);u zXBvpuK=AAhv!724^pac++H;|38ayliuzd5Z1NUhFgV(YUiM$`ZtnbgiSFHJ4;=GJX&feJ!aue>Tp)wHk8Iu$zNI#cB<#p8nyW_Ily%_z;$uM`_7H#jxT zA4YxsO=?#0l#dDvSzR3c{wl6^W%G;~*j&q^5636WF5_i--u%YK`Q<;nHgDboMkomD z5}xzv3x&~lt33UP3e*hZD@6_Cu5cj{Pz@*x$wOynoNbH?ey4&b8EZM|5{09Jl#$~0 zu|)_8h}zVbYG0bFZI_iJl_#b>`8q@7dQ(0#m&#TiKplQCrMhis=r+=R=k7LAzuu@P zo^cN;<7HG@LS46@r2ihAJJO8d*q3XW>Am%vyZ>CpBk5o;Cm?{tcVPKo)zkU3NL#kZ zq-W%mD%DdFP1&{J$O9!FK;LXZBri!Ux!_hRluBAAr`+;|jF9c7@x&xOL}{uLx*U%{ zq@)G}<5DseO_3)cBpe0Pz(LNn&^{TS*?ni*a76+!P8N%h;EK_mJly6*r0-CWh|0YY z_Hq6c#BRH%n-fXYh$G*3K5-GBGN_~>8nz!E94f}5O@*bQ53ae49tY1pcLV#9Eyt zvJD0WHN8CQ4KT2v&azt?B~%YzL);s13Rn3GLvxfnKl!Ngz+~A5F=DTI*!}K%%`q!eB z?d?busqC*SQTSx_I}N4M4|;<2>I9kc*lE@g1rgV^r#Rs?_rt&<-4BP0-BXT4)f|C$ zuB#uTXoXb8CtZ5>5XL01nvT%wa;dHh-eUK#Rya2H{DBU2(H^xulsrPk^|IwP7V{qo6gBk(7{ig_1K=Po^j8IO-hrasj{i}O67@}#~jMBnbnO&y+sR)wio@Pi2J@q z5g>pP2E2t_VFQ-tKFjO)+n2CGCJEsH8zG*NALr}1v%k^CwPA?FUIBQoI=)<3&es(? zcR7pKO`w$Rj_usRPhPK7*=`sP$(wYecPE+{$$`D|OG>>3@5n^7Q=R7HA;@=*oR^W~ zC;&YN6$V-)Y2b8GS3o#iVSPJ+Ly@xyO2zHT53I7#g16Yq9i|bFImv8`!~si$#iB7( zBBzlAf-qPZZ&<#OeZtSMoGa{t!TmD#q=E0T5){5YgYPgln0 zvO~mO%vQjR*($Y0@h1YU0cY+)tn-2kKXy1A)LLIzx$GEZL%i~XJt*ZRoOG{ z3Au~fiuTN#myV_z%a+8LvI(siKn!f z+)znwG(Z4FVWDB%7;BCnP0hE1uFA?tQcJz43egcN9NR#r|Mq{5A7))(jkEqedUckZ zneZI8x6rAzOU`WJ$68(V@`WG25&)-T?k+|Kx7|Tv{nbXgNK+!I#OxWnoWw}>yz@2FEQ$T5Zq5&!~!BuLVol9fu6NCh+XHu1N zX+bRC3S%WMx!KD-tLl7FF%2R6zE|)?w0%4ggRwB`pN|X=^s-IWH~07-eu?0DqI>2< z#S0s@Jo4Ft6_p+slb3$q6k5nGf}ZW(>&o$D${Fw{N;3|C(-TFvouZtc@9y!wjM0T( z(~zOeq^~;UnKDocF(Y$=o}pawQRGSv?^y|R(s5HY^cvg^9T(({x%Ml5!&F@w9vpoWT z6hcAU`7=0(qtuZQ($#+LpQyj`oy7xx+5!D%+Ut(bh|>PUwoObl33av}kd;H7Z=|w} z2m*uByn~e|-eWmv1;!B>2$Pt zCyagF#5qagp`7G@w6gco+R^99;q_=DJ=O--;-U^^7xA@QYIvx zWNlTZZ7lH>wy&qttk0ktC6V-92PLpeS~5OiU}~>B{hPf)w2o3j9p^@(lea{-6Wwm7 zt%vmJDH;Kh{O~7Fqs%K|*%$`Okme%6SyuT+;)*)xs)gyVZx=+yM9RB*Ft_-4Jv(4h zMS@>7Ai$#B%KL5@;z8rtw$#}(c`b=)-U!s5+Ruh52S-P!$1p;Rr&+_|{Bv6Spa-aP z!w)Ce8<9qP!r}1br0tD#q4R@vsq4I!7is)!{8Y5~^$#Zg6!>%E!3yL)aPk!^DM6DZ zv^<=T6-+5-e+t<^gfTTDzbycoPq1X;Hc|4JX2zpXE!T3wk$r2`^DFab4-N&`qqGyS zm1yCkiF}D4o<|pVOnrAm0qTT^zuYzO1A?;|OkI5(w z1w<8(?@R%`T&fBCn7Z0YXr+|Z@??EUK=1$BA|fpNg=IJzfp0X)yDyTbF?qU>EPiSI z@mjx!4B78Kp=#}dImuw)kf8XM=3Xdp8{wQgZK%hdfXiU!@dpaxcG{BNR>`vVmKFdp z^CvEHoW7g>D1IjV$HnF=g_!aix#{r96u4}d|JYHmxb`%ax9y@pfoy)%Djv|9idTKJP!G{eiuiiC4;~wQF1>? zCD-u?>sj}ihArd1XLQ0bup zEFx`3@L@&B?s~-bH4Y>bRuXR@JcZYU_1g({sKXvwT+`UKta6ZefejW+Qfg+vqx0j+ z);ht$IlfgHtOR3R<4*@h1BToB^m5Bc7MF9&7OwEy!V9;h3@C$2K(gtS9}2fRTqj+t z$uMj`kkJ{kevHj+?`PL7y0p^lZCkwy_B{LSs%AU5^nW3f``W(=PqxGJEA!oU_hgu; zn0=kCEqNuic(zB!5|Hf_sk>YA6gLIP?=kU@2e^DW%}R^Y9f&GH6hBPxXU0ZF?Kh)I z-$?9kh9Tr~gXiSuT-QFBG}3gnwyv(&#|}7F@fYIwH(cN97g&9+(ydC*LdJTFdN*w3 zIetXhyrxzM-?-6ITW}rE^^L1GtXan_)l|)(rC&!TfRvc;Lw49!)SToh`&f%1J>+gy ziaY14DVlvR_*Ly|dbh_)>!3LhNVZ>wn!9)JZb$2AlQ=}eyJi^Dc})VD7inlvU6#XOI+K zr~~E_F)BlO82q;{Pznkl{u5Z)T59DXc%v9Xn{KP2jokK=+WqU-myhd+TC4|+X)-w- zTyVou$H316H3)8Y&yv=5UxRLnW*X{!(?!oDT-Kom4MXg60DF4i5(7v?>_PYSFnGuxAVtUeJ$1NKx= z3e#*~pkF{pIH0N8r>ahcj=HXEZ8V=%;1%8ihgqlPSLS<#j%vQ9TQ0l<>J5tJX@9|E zj{ZncT%J1og5m;L`X^2B9Lpa&Xf5YwBbnKU(*k!jP~yT2agnK|BVjkRmz20vrpq-D+h=J=+pZf;%Os>RN_3GC0L zZTT;$p*i?mZVFa&6-;@?YnpA&&|-L^&YAk>o{Lz4*W;_@y4zw|JP}K0cQQ^X*lIQ# z5RBxRDSzPSgbwQj+#0iZVt4KbqAE*X35Y6Y91rzVe{*aAJ;CR92D*$p0o$zH?!) z-_ix~2^@~cn98b-S&_A%Oc_?4tXx=HwvZnm5*!emcX>_dl5gAfx%A-won|F_Wm92n zsa6u~Rg^y&Ub5tzDp+ygG$e~w^H4bG!?VdvaxV~n_fKF>AAesOQpZ)4!QWofRMila z^!!k!>~l6~{y3Ay=UiB}{KLb-1FF!)jrt#@82jz(5Lz0^lW@fw*>tOww3PE-2!Q&bi;>?7YA3nlxN1M6WI^JaU=Bhi8_|KH<_DTRTdk;gSsINSp20JDdy0 ztO&Dm#*$r*T~u~XaI!eo!zVtrSW1B=4~uNbBK7-nE0X@lgY;3vCW3dU5v%(mvL>_uo~bKn$s93 zjWZmQCfP$se3t7!u*mF^z?y~gS8nTh&~LhO?YyGWqpqWsuLE~}$?D?O`U=Zgx_%W* zU;Ia&abBQ=nnx1uDgbk_Rqn*?A{!@^q^_w^-+!+)G6oEv?OdWZH#Y~xm%QsinV!v`5RjTV&(Ym+#6b1gn*g`yEJHA%7-OAZ}NrEn5=8+}sk62UEHamu|fO41(|_7Z5Fvxj8drXFog#=MbcRtXIA zv`D5zMAulXjy0hvWGp-n4{r;Y1P=wxuYQ1Kk=4mhc&4!`!!r#NDQ9NyKJ=m3oVxDo z3fQ{T4E#h;EJ6M@4qV}AYN0WZLd}QKjJ?;Yi|y^#x6Qrq)#QH62L`HomsgBblnZCa z6`Z~~HEb^3BOvHE1syADZ#lZlmAj>LaS2>KFR3e~GYRZFSIO@zU8E9ze2Uz!K-b`D zv)!yk4S--^4q<(d2e*qIJ5p1T)WjWdIQks}kOw7qk`CdA(D(57Fy0vS?%m%%FwkOF zrbZcWK}U&7WfU9LdhKtU%&bhvoHI21>vbX+Kw$(B2qx^;#;H}wjnR3jm|y<=)cJFS z-jEP|Nz=s-CG_s-psphRV=v=Y_Wv zE4vh){w^3aX|mqp<*sAl?`NmYv(APAWwir~NJ4ICYH}=J9!mDbcnu5y?^v|dkt2C| zloE!Fu;GYzmZCobX0r;;Y;IEY2^KIrNy3fC0u-LOoBnaJ!JI_;`SjuR!F0ii>Yg*t2_Nw{6*-5iKbP)hYWo3@7ErU_ zN^Q!gSeuxmlX2ye6Vw$qDJWC?UW-q3BaRndC$JU(D^XGH^gVT{JjL3m;g>M$;Ia^~ zWYBY4yvJrWaHqKdfUqjxr3j22wvC3ek6vrk*18raalEzhWL9G-7?qh@M>vMy!#9pt zzqD%U`Up+rN^^~QWl_oGNL#rK^RufVtWv$Cj)~5TTy&80-_J4@2SAyDoo46DW2~N^ z#gt3$+(;VtaF`Q((EBv0stASSJc%8?acd$QO}|p|7i7!6nMzK(OHn~h?}x^&RpF@=x}20{7DJktVR@Q zoRL;Jszg;~RSIlqPvU!$5IL=EoO9kVjWXvvg@6jNEhmk4dr21W&0SWRpYz}HeP5~m z9jtQ4&a|H876XPuDlu52VxA64HB=pyJCnYqk%nPNt&3j>vv8U5QA|F{{3r1QFX*4= z&(+x&&zec1>qYI%DQ3F}#2Sq-C|&%bPU3V*5EoMT9U>k(o*^F30y6p~`Wk^g_s{_J zdOXk?-1CF19xO`{Q5*nsmHcuBGrhLa9Gc<`9t+xK5g(o+#t)YrmaaPAhWUIuHZjCe zL@pd}1`|N4G+QLPFe^FDx1WSUvp1dL9+JAD=u-@co%}Md7vTUwnPS-f(X{LW~O#6>ygW#EKp!#C#&0v^lj6Nit})WMbmBI z;B>`|3KOb^G1dBBEh*W+#kC@;>%jmDw+5gWmy8~8?Au)ap86S$SqH{_ClJCn2G>e6yodKdv@dkZ31S z$v=JXbIdp%EH?oou>>yoba_^87)CD)E-aTbY+HSr58hF9Aw@UEW)wHy2I7ajfQ%xb z?f+KQ|1ZMmbP}BjPOOm$yn(eRACC(5*I zU?50BZGbsK-Vx*!31e)tk!@x>Fe8R;jQdF~?~!*;z0h@_p>Gd}u${GoYEd7k+|3#s z2}wK0!9!BdaeaqKHw-?nr-tC1b7^fVh{!Y~Mt_rVz<~yvV8uMP42b(M3~5eT4Vk3z#uPt|f2dxF6!^L&EF(roeMdN0sX^mIgK1joUND81i1 zeDu6+(lWU_Gj1Jc^)MKq!ULcjZ_-$Ft%a~C4ICgK`}h{Cstl6p#5zj)qoJ8u`KOC? zzE=UCTy=jBlcjaeXTmMKqz=wRJh*Wf4bCs8*-w5XVuy6@uGE&;^;bYT{O_`gGru)O2LU#ShtUWd5leY7%-9tiqn3US6J_lv`S!!7o!l z8$eGYxcgN0eZ*S8pNuP)mU(EAa2ag2@4u0*l4QkiQMEe#)$8(*h7#lrhUVNiDF%aq z&}sbgDw6co8WUx?zO?*zIzq(q7Fk_*S`s+@{Yz&)B?YPX_Hh z7|BvHo2YFWs2oaDKAl3-L`r=rimMclgw`0;55`Qn#_g7(m%KF+F=!z>WQvU-vkqDC zsFI}V`0HRoI7;#|pS`Scs`>Mk;bFg@*DCDm@rLI&8&)n8nbu8jDu>Dy2h2B`<`)=!Bp%(YMkBj#0Gx0bQr#D#Y8~+KmQ^%TUxecdken zWWvum{5e+kJYtW1{AJ<<+k_b7skNg{Qc4@1}>$4Va4FKHVe|7x*(%a{CP=;j9YwN;f6 zhBt4IZuXVJ<79g5@ZrYB-m%+nkJa%S_AXpF*BN&+D38Nv2V<9WhDn;hQY>oP?IN1( z>6e6L<`%Wvcx=APJL9$cKao_GKsbO2f0&~FEMUsLgRuK@q3cWWzNAtCn%44 zMyPSWycNY#j;VN{na6pUMrcDSO+MXgwto3P76XI`)Wc%+KnQFm%@~UK^pj*ikv^g; ziHs=Lb@2kHivvD0$$m1zKoDE9vOXdR-dDauQYyddBl_^nD>X|;^2d18_j=hfC) zty-HMA^8g1F}UN+Q5nprxna7HO+9-kYDc3|5h$@zff3jAVbYOOo=BQ0 z%o0ZRzn&2yWv+2iW_1)6IiOV?swL|O2d9W+3}bUhiT&Aj0|@HedN@W{P*$qcaziMR z>AFT5U}5t-<|&wDDM_JuJMY+xnhC3*h07k<@fJ)If%+y2Q{-m17fUm>PS^MJG@wOo zZAAoiM=xaklDOHCDGK6-3;`S~Lmc!qzoApu6k9MI*?zjr=pzY$A2eiY2h&74>-mKB zc^q9TBc^6Gq9N-3KZ|*>GuORQfriQoMdTY-wbG!z{iIFepn1p1f@uFI+JMNjewtK& zT_80x{RtE@;-Z7Q|8f)fLSi8g3KDRoF?^mi)q#?j10x4oQJ5T+vB3Rj+gT8MVI>RF z{4}he6R_OPQ9s*ueN!iqI_jd_zrjnwmz~kHgmCc$hmliLSTBy?Y`)!L={r*>%dy#c z1aFWe^XSiKX4_T_b#G}B96Kqgy002VK`Z#1{UrWnt#Ocr-A`6p=Ubc#25g%36BrS? zg!IZtMPQlCHjs<{p02coFe1SOx1!e7uHKClBnVc~P>5UmoJNx&?l$@&Ir8O~u(82_ z^(ww5l($jk^~7{eI_q?4s^ZSwhEzZ|IQ9DZJc73}Xgr9f8@qkoHbYeU>LUFo?7a{l z7tsokiAG3A?d!{WatPW~YX@R6we1R=vJp0e3nkfGRRvSAoHMs&m|pg zEbB`!hOYTm#()j34Q~BO9Osnd$wk+|fXTh*jtqHI&^-J$W*X(2?AL6*LmWgzOOHQTMdmO zHI+I)Vg#uv$#>iyIk0mPGXr*6v_4ab_Kz+38g|FQ^ z-KM|7cgN@Hx37%oFC&(FrRFjZMu5kk+PI+-AxXG;(+21`8mdU_$cR^Voh8r94P+s= z(N3r+9)hCP($dq~_n{6Y+TB7!4>Cf}LTUuI6OHagp?CB13jDyBu<9Va^BFQhC zzD*{ole&b0&Xi7p5O@ooqxVX;m2M;I420F{I(5oGr0G($MD8&vTU}+!Doo1+i8-?t z+&e%GjTs04nn&;?P>*z&qK0L|Hx;bJ`M-v0V(8K^a$&IwHT`tA}>Enrozj7q=_6%f#&TV~Ss_rcg43f&J!YL&= z0k@TfPo%KLr2}~Vlh4IACM_SzgXbv=p2+dSABpRdm)*Ek;c$e)4vRAItsao4hJ>lU-ocAQ>OU^@6MeD=1UUsRw;XFI^c|!G6=+7 z+vU=)m~xslTd#yTZ&aGG(b)_!UYS+3BuoM(EhSWXNk*@hksdUXSQ1jLRZjUn;Tl%} zM(H=0s|Rxq23Ib85zo(0TKg&I6g&>U%^L6N-ZZ>G;iaqSgf>CJe%&uUMSX|JLDEBl z{l6~q)w3z~jeNV0bb8y!$oV_G!V@dpgD)@cmT&9TcQ4SE*cuMyk!*sZJj}(`o2_@0+zzM8-C>uJTZ&!?nThji#l9{M=A5`?DqEA4II6T~f|p7T7G!jHto_xB30N3mC!Y*XOmG ztk%p-BA{z$qgqz&VY#`Ng=Mmp88JuXVcN@0mzS9MT^SkNpoc zH}@nLdK`I_GV|aAy_v!PLaQhKcma|DQ90#^eh*E*a%ZDIUcWp(eaNb6b^(gDb;rVP zoCxdFRGwZQ_95cm@7jWzR?TX&Xog=gdDtVPfvG5pjS%_>_>-dE#t1BpaWw5HW3uhM z%G=`et%0Wf(k7*5z7P3+hLV!sg0IYtZY#l2=cP;O#Z1aoSZ<$F?b=XXQtm%S6&3#g zfT0%-Vhqk4JSR16ofV6gf1I%Ra z`9J_GE~ESm`#v>R$1_{NVsg;h6{yp>j^x`;a`2re4e%n$)vO6g_VrGPMr0J6eVZSB z-wY7B2|C}8l(JN%aK>d1bk0;%Y`n6uo1!5rOB+~Dv4U%E6y;XXTNrcSLBD8`3?B@>=y85wqO&EfI5=(M*oGWb}O6I0zfXNEs&DZY=HI zt}LY0z>jQ-w~31irJm}vVlU1&Uwn&(UQyN-#BmCZU(ND=(bH+|?3;0AVM`Ah z-zU3$8Hwi8{E`yBNUkcFl)34HIdk6*IBB5H?opWZvZ=+{VtON*=JOC5CP~5>A^%_r zrrq|I{L2R4Mf%q@FP^m-G^%>+wA~DYrNV6$O@? z0kx!4rRoOv`@b!(JYlf&LmLT(USJyh5+M8qX zMhlna#+6H!OVc-InZZB$*xMCB(8ip1oza}Kz((&1c)qKuTatYG&fU+@%xyDn)q6h~ zy}5q9ad5rtrLvTB$J({D9lSAPG#SV0G-e6|ILZtyvLza4Y!FIXkZ#+>*9ic8*x%0( z#ee})6DLBANxq2G5u{ww1EoM=Fdcmi{wr$(CvZATnzs4(j_rkn8H%@`qwd~%+W;HO_V#2|*=_yyH zFW@G>YQyvmt7dxU96z=(?fXH=n$0z{2aB73__d2`FD_1}C09r@0VV+()K=5FC< zwqp6(?7JKw>5a#V&b_R0I>|*Mr1hhZGUROyy0_d2ltyKCH1O9HQ^7it$z&bAV|#R9 z($K~{&;G{Jc6SU%=Q@}L$9^56;?jS6r@vqy4O;QIeQdl~8@&8oT`%X+NqGnq`dM=W zuZVGyQDot{IY_~Rs{3~dR*X}Df?i64cHq)%Nnt8GMbH~s!iJQiG{Yrxz3QV$v4ObH znDj8`oW3CUwHzBl5t*;!GT z<~Ao5wFN$l=uHx&mC?8d0JCQgdvlc z+50tYEe&*}EOWzQ94fa2X@fNV=Sowf8snqBC4xc`FjwAw7n$CjF=tMOkMXI)0Z#0z zn(|mDjj#_-^&b#bUVUv5$q&pqDRXX!ycB+*ACFWv5Sv?1HiIq?;{J7`CEfh%{?MJtFd>p8h8C z>7roJrll$zTXB3!aZ!75aeGm53LJln0G|(~4?lg>f8u+kG6&5~T&peov5Vv5B)sdx z7%3YQ(cGM-%U*t1#F>NXKeIiaW+r?sFDbk}WQ08@V`$+Y8w)iFUxALe+NT~TFN^7^ z0xw5O$b1?41tP+;&Xy0#PdZB(^!!Yun5v4oa@a)j8Vm;KnNE*4&$aJ$6?^B_&#tbj zu3o;JDq(e3vrwO{a@>MZLqI|y2f;<@o5QvdIX|#wlALr`*lXL~-X1@tsh|}WHs14U z%-y(1+I61@1Yoe?6_?&O1?A53!$W~9m%SZGNVXqqTD2-;b0*78|56!??|$ur**JBP zm4RJVwPtsbuBW-di4cNt2~${Z8d=aX?#q#34X(LQi}u-;bS}(evX#|y{QehcY)yJ1 zil|{PnVwOF&!Uq0fKaJC%K)&y&f!fQX<9H$Z+#<~rfY7>Td8V+F`8 z-*;?WW-xirywmLC#|>7aJ|5NUt!IuK!OOjbYqK~{@aF4)FI&2NJ2T@d@Q^)2(UQm1 z)f~#6T|?9dRi%^YNyMNn0$xGgCRRJwu=$*_Jpf6B!5G%p1q}l z!DLXW#~Ex8bEvJwY_}-u7vJk;)}XuKcYH?f+_2223JQBas=zu74|XiGM$Bi2Q#mjJ zf=xx*c|M_~;dS%8E2;LYOekkOJqsH=y(}^kiNu(S=TJ&wTDWkz+S{bMCgLsL)==0h z1ln9>HQAc7qV578_b;s+P&xokYb};i)|->D<7(%*l+tZHE7UqKC)^tdoO*9C%F|qV z7hBcsiQ+3@7b)@1L!Xl|n!p4FXHzkrGTC0xYVNkLIS|y>O!+jAO4GbyXTe9JFnK@bdJ$`r<)Qjj|nWB1<=Y2n#0 z0GvAT3IS)tSR2Wqld(s`fXuSt-wIf^;!{XQ_U32(LP~NBgJV>UXYMqnv+j@x%JMW1 zhAEZ=S0dhxN8RkZ`$;zgc)y)SETkwELw={zNh37H5r&sXac%1_P`oJW0jDmxFB$14sSbe`@zKUUtLN(XSSJ#y!Ocz^#)i6N`t3<-UE=-9EDfgUlbx(^fs8t!xqI4*a*CUYY)m*6jd z!j44BO>3vWj?VNEK}_5*qQwC(06YeO$<7qzFbbFD5U@TNylR?7{9ldgoIhQg6;xL% z8CcKOFz=EzYnCi+2OTY+s*DdM%eg+OP*R>8k#gi@Q(MP)2ioaK2x;qAxbeQn51&Gl zQZ?;=gVExe!`=erMCAzus|x-XBY}QXKC2o9irgJrQQF-)*3F6#wYzs4O&Is}hdQK& z@`*(>*{Dj?7nJBwNF_uUeJ*{AF61r4zM18!(b)<%q-7X*eL#R(|>3 z&AWRR3$JuPn(GITn3$}ZImUWVlig535Q$JwTszg z3c4m5E8f;mCbn;<+S+=k$$i)q#=?zm2TJQRGwZw8U*KC<_(nPL2C-kcMNK>p4mb8c z4`1@aQ@kdH299H_KBbzF@I$CqSlkMQM5+}iyn{2LK5(6K{|NN$jq`bi#3mlpt#}hk zt0M5oyhz1IvhWFILipcU*i61LAwJjCpyM?rmhqsyiXJGbYq+1}2dC`|ZC1LyPi{mE zT^|I5?w6*}X==hz4~zT%miVZw%%-f&C_j-3IZ)ag7A?8fG?(6Th`hS-=O^&dIPv9^mn7HFGlTUU<@xY>n%_RSBT{vaV&r=FH%2&dSQ+h=}1H zE{F>;_4^02pmJmIkqAMIF=pQ1fclsU|J4Ug!>pqm04|__39`<-#Q&*lbh8t)X6rOX zBL-F%%Ys@+5Cci0gD8gC^Q?q=)`+#&B9B`f%!0wcNMLPCINL+BnD$riV_Y?@pehQP zpbYjAYc@y%8aekRi(>}k<@@>*`isrET_BJLs)jG+DoQ06DpZO#m`CtnZ~J?keKjy7ER*h%H-Us12tQqKIjfJm0Jg$_+6;oO5lID2WXz6PnD9;5Spn#v1~^T0def1 zO)}RbgaTRfS5EdK+b#K~(s22Hbv!VstKLYO}eTl2ekHx#~;yFl_xcN|`jG{!xbR?DiWV0d$|TWJq=avbq$$kh9arv|Hy!a7|>;!-|P1&ePBS zbpxU{vvO5WsuIl;s$GM_E5M6+`(yXV-HCkyIc8%;on42!IuCT23dI?PV$(h_p_yJf zagmtJpaqN#n-gUc*}m6IZ#xEPRTQ3I9QRs~dZq)ySODh-1q=yi!^%am(_bLawQ==C zu|B;adsZH%@$^R%ZF#ePegLP3I;c z@Qim{@htt@Am@s8`&8Gt`ccSzJVoBiHO z7#-6eEda6Ajjb0Cut_kcMST-5#5wHp;;?dA$NE6uWY)vUH>=q!ltS;JOa1?H z$3b=2Lgm{60W`Ttu0+{t_ZOSP4ox?yelY)_DrE1fiNy<>io?wRG(AzJo6}XWLU5t3 zqApyR8NNVC&v!+(?3(+lGg6=T!?R!KfM>7#O;9l(%eq>kI7h>?AM)~MyXMSnDEkhc z*$USjHeWT}J`Elrx#98wIp?@Pg1 zEXQym82dU4Xg3GkKmglnZOj^33+pSpc>$MK!O>;zl{|}EX}~BDBO{G?Heli=XPZqk z3>7HCx%Y!a6+)Cn2A;$j#o8cQw){Hz3*OTs$DQsQCtADs;_{w*^zP_O8#c6-R4G*@ zZw(~x=;*j%>jW1NOdnw@*^WlDUf=RHR|+IAy#NK?Lp8-1AcS~phs|J1^QNP%GihF4 zYj7A08^j2i4#w|Ok8G6@*O7;p&N}Weu%!}NlX;=CqQbE_{^JN*ZnA@ zfWniU$pPbRZ->MQRwBoTXi?O2!Rk+QCDaoTFb zoTv1j0TN!(YN^B9@7d_=A-zAMLkT4*0g^aH{FaRinPbwZPSq{H43zhr zUot5tRagpIKeuFeDNJ$xffmwe&yy`;s*x7)TPpW`AkZvZE3H-ORH9P7E!57~x4&1(@a zF7Lj@g3X1eY{OULmo($qDztwGiu7WIw|ffUfLg910^V#imaR1t`ay}x!WE)gxmwjG zwcRO2pKCG*nd3;$uj=~7+f_UJ@l~@0dqjMdt(gt|#}CtU#>fC~;|nfmcyGzhWp^Kj zJ&S{!3j!#)QXSo+6%e9*fBZcT%{^Yt^D*b*&2H($Eq|)?CbxJ#A65KIa%9fO{=R-) zlh&8|DQCIq|6fV2`)jXRbn4ryr|MPb3toB;91+8?ON!~~&tkFS?{mHi%o)4=p8}Lj ziVquy{qSz5G2@zktOV56cmFfYFzFc3lheAL1oZ%w#+NE^dH)a;wEeF=Sr?KXo}~}k z=sXMjeTruhCc7244DizT52}|=g$X&WoWvl(K77>p*K`)$l@M(d_itej6+B5g(unH4RDA>Bk z61gAUu82(eUNj|qM82>-N{eS>@q^xe$i*Z~vm~qgp@sq#*huUK(K}2-By^?!h!sx` zlR`^p`eL<1$Jt`wWrPw*Xe1`j zu?T4B-1OaOeCXo@=sH(dG@F{%<2Z)Jw2e>EG$VpWvubP=Xw!9&o#qIPQ!9i;L`3x4 zfTeG`VQR4BipPuyB&cBY%bO8TRwED>P5-6toEW+AD^^xc&K`8_eDtls!LFj#dEGE6 z?lmZKO@-k&u)&YR2z{q74pG8fslsqhO4SbyZwT*R(I4 z;kn{*xyD?T2RTMlHQeX3Pqvvn@^u8U*Jd09dc7f4$`7)>5OQkJ^y`m5{`dbuI#Q>< zrhRh2{x@&z**5BtxlWZ7%C_zbv*rP~TdpV_q+`P8T^eT3AQ;Alu?$~(ZRFM0$||lO zvyA=YxpDo~@yeh89jU|KEg7W~JC)B{mM>wQ_#W#O!^BcA@VzqDW$oX<_8(Zc;egc% zo=ZV(y-o%7ToM*02klzP9R+rD@)7mS534Uc4mi`IFoE3SUb9A7E9OnAe@ROo_q_EB zrNgBdo6}77+(r4H3M{h=Rk`hFE?BNu>>gZst<1kGl6v}Hr*SPjr33>sK6t0^HK1q! zJ9^9KZ+h%1KkeRov68!OBnYntQLjU%7UX$9$kRS zqJr)uK+8GDqwcZn;T~9Ya%M0@1@%2Uo%lnQ__<|WTf6W#n1^}3civhy_wC$yxp;)3 z@#X?{(t?@|A`${2y**72C>_F>h!L8KaRkqrUAiQ-*B3OHL3xsW)jXzHoB0@iB9A|q z*|Bppla(CY6AWUE#4;|jV$-d!UGqur@9=lGYXaDcgt?W+Hc1^H1mBF&qy+{sKzjys z3fi89&;c9Xh*2H^KN?g1gOir4H|N|Oj`ud~eJuBI@h`w_w-U#Ymmg<^G1#ngzoZ$1 zF_2(g7rVp|sSuYnn+{pCWmdjb7Oe+8fxtFFy1_#nlp7ncPEJzHURlD&vAg{f9|+WH zpzZ#bY0o`QU#fn&Wma)fdNmWt94X$D{1)RFdwk-a?s;00&T;piu__`iqdRObmQ5Kbu=ei-M+EJMxQ!VD9?rfsoZ{rX?-Dms^|G-xq)ik}g@I zO}~xrbGpH>Z{*^z!7zbwjUqGKx+=CdLhAZJ4%POTt+cL-h^O(bFEf6q&-ozo?|-Q7 zZYpkYCj4_}Pul75i2c@sSp{KRabsJmttJX6a?&SD!%SgPtrVU?q%H?eJY;!lW2k(^|g?pKV zXrdq#yZ^r6AlMMOowjloE3AYicH9AX)$#w$Z&?bSebd*#c*SBu;pU?NOx>#+hc|qSy<=>H|wxEEbr7~U{ z-MoqVEQM-qrRKHtbaqk|6^>tLOSd{T@YsVNeNoHnCL(k-V9l@1Q;Iw3(U5cQCkhjbhzY4 z(dtSFcGW&OhLa#&GuURV)y%aQSjYtQT_f9ZOBTjG#Ho zW5TnV8nYu!;igDs5D3lmDKOrPx7u-R^&0Vs6G3!M;lS^0_^f))^D(E%=%QMdBT$B> zYvwhwc=4P$Gojex5USZ=q>QwJ;#;)*j_~En@@0QLX&k~qk(QP&vw7Gv&p3}Z_3W!P zcde|Ew9OP4h-eo12CDa|+nJ%lXoltyISQI>iLpqYmjVHbFlX0tpJA>ZM1V*p$<@F75EOc^B zg4bKGAWZc=V9c}^SIc)DH`C;wP7=wye$+&g4VzQy@iP4$zGzUySb2H&v1l=?a4egz zIfNp!cYYHQF@&!rYvo}JBtY|yybo2N70k2wPc0U^(P3@+60AB)q&JTSuY6Y4JZT*| zlyf4tQ;6sWif9edh8QQo8$%_YrToL{X8qHi`A?7er7mSI1q5{Hsf?I_oR{|W9hR~zl8&X(PEp$@qte^g55rTLvCLfpDaPZ{knSm^*8f&zrOnMsqbGZ) zao|S~k|YS{OA333#fR^=?yCFIGDr+s9)e zwzbL4-cW{ole`kcynho20*1P$qD_U5{8zcRQOaJ!-)wQM(4b{;o$z`><39O zob-TwTYApA7 zfAaH({pivHknUPdenP2NZ;#ltB$q(N)@CDem%wu(76*i~Cx_7pQrzm|Zf@F`$8 zlE7dTgWbwD4jLT}fD~X*)%_1CgIBEVjBI!^$Z1Ecn=nhzvK(ng3i~wIBZZ%(}_z!$z+`?GTVwzTHx)_aK z7zaA8od_8oX9m9MN7E`m2uR%=*T~7(^=|tT>ohl$qi9_6eof6aDIyGWd~`9Kp<4zY zrCSVZ11&D;ttWoVbCZG?8$a68BctU)MxhgKmb`fL#Elqld5xb&UB$9hY7I5J3B?*4 z*uiDGNL?9+1;&n@TT7K0Tu}4u{F&6kSWHE!X7QRM%7!xnw!))Yg~U|7CZwE&?o|kC zncLOXDa{JIPni-XXQb2Ru}vlyg$cEKpS|0i$vO+dx?4w}cpdVCygvDjRc!8&kjmr7 zDLVOyM@AeSL~)~eWDp$$*0T3WtuCugP64%P*N>+>0WKe5D; z?eFw*ky#br9zN-{jn#lT4X!-_x zArZ>?v<-_2uWsLPr76RRO<~52rYjrTtHTkBN4pw9l%(p3RQjwr32`9?LMUM)j2e^$ zR;2m);hOJ)VxUcsS8w!?mp^AQLErrxP_P!)ockWU8dM|S=gUnGWAi?gwrGa8bjmZv zqg(WycS|ykyF4`J%b$-B%HMg73p(%fUb-#A8lY=jd#o^+o_wCFs+`eZAy~u(xXuho zew+nBWoY;ozkbsHj$kN^V*PIydffyMAJOF!wp~3QOhX~@X!<|m%c55Wz>Qe4L_9Fu zH#6MTMRj%6|8(?dVA0%`ioh55s=wwju1zAW1}&hx(bnd5|9#f@DR$9cM16(E@j#P4l=#6D;MR7vt4K? zDD_{(mq%F zZS;79zxh~usJ|nH>8B1A%>LCw@$Wh+!O=Yia$YUVtbY;5tT;Ft9HcxXf*o0 zO;=&C-Yt;+2f5p$g=uVgK&=IhK_(G`sa;=c_B{&uW&Wopi=VXnO*us-h zRh3jh{z95w1#_cWS>sUPR;BFuoM^?o5_eb&L$C}{_0ZeO5?T^$LZMt;E|xQQYfxkG z@_OSLCuI)Y3VQb|6Q{gXoo-RxCu&u+DO@ ztx;JBsA$!psu>mU4d)argJdXb-qt^RNiAbJwc0M($z@X@+jv2{@A6K9=;G*gE_yQF z2JN>q=FC}d%t)&&Trrpn5G3jVc;Omo8;r!VLQ04FvUCMuife#lPD&7i7(q+{3Mj89 zV2CMD;o%{1X3%&L+cj#O+x@P02Z5)!gWc&m_gOlc=LVNt!d0u~T?I|Ajl?u`Gi%y( zR_V!~4NOBhIpW$b`X0|7g;98P!e(&vTLZ(QcZfVu!Zfx0a^i+CJ zw420t%_>m2PsMPbAS%V-Z~%`Q3ugZa?U`u0Kys>=FytrU02FS)djN06Sp;{GI{^#} zEYOz~xOO916G&rtzY8LsRF?)WAOCoKPTVZ1-@_<=`kVgay~1fI?5tl&xP5I0H;YTG z*)_!AoJVf6#^qK0y@6h~PxFIbD0U9~vY|(l<4;6y_9p@zh-J1I+pUsfpUbAaJZ^0{u0k3mwjjV z#^fIG2)-p$B77HP_ib7DBm%iVQ+U;XFZjgppaXIKFTWKqsP^Ui0VS5!-F}ovQKoxh z-%0N~NQHr%BunYVQM{Lz9V%(w0x|ux9CwP_TG$o=F`E_(gVGIR_lsv%(B39|l^19E z_J$40r{f0kz+}$A2yCEV6Zu;Ya}u6pZvGAHbt{AUc{g8i=!IUC8xGA)*xV1l^|S5+ z7=z!#5X{i(LiAV47}$<}BUtWzNj!0n8W*MUqDZqig;e}1rHLOS5^{=^_<3pOAGf6Y z7p|HWdtNp%8G>2+Kxq`9*G}w3Y?K(N#Rf4KPU04$um~4que}!=m-I@q;B`S>A{KcH zU5g+{e%*D^I0rw4p5vnH36Gi8^!sWt`)GnYw@wI$6%#RsIB3vsd;e?;6iMw}u}$51 zpUp1Coe!y+r0Dlk>B6Jh!yAb z)8~eRWo8X?#=~nZ_Y=u*61=l3Dj_Cn#MOg0ADty<9W51?(pb>VmY1kyw}#XZn(Bf& zEmuPYl-=2@8EGw$33Bri-Ewk_ov~shSj-|MU399RGcDO-;+V!v!x7s4YKx`0tLx=t z7mVXwNY@&?RXH*Omft`TD9@n-R3T;U^p-O?AAf(k+5e01@BQs^r-3ydLu6cyuDW@} zP%ZOx%VLn3rvPXd6Jmqfo)kW0K`rbNX299d4+6B)tZ;Xs8*jKzi7a_U9a;v+yGAxl z+Rf8AYPL^qb2XdsLL96OYvQ@VKQyKZa{if_*7!p(SH5P!r1p_^UFJG4KSChH=-z!kTxyS1(d=t zBL*B(l77drYF8gvt|!v^ z#CF=O*^(hJ^IxF`A4%9kggzcPk?RHSEFB=*9a`2pjf{fD(vm@xS z=JKN#V)0mUzNs+v3)(oS+@w7B&OT$OT&+GKST}cWdUAH#^dnu^dq#$rJxu3$vvhau zuMfj2dYKV)znK%xUtLVdTLiLCq|mJO$CkB@pPd;G;Y{`zfE1{0 zZ$z*vfLNd-q{`3Rev0GPbLyyG)!V zameZuMLPXRz$ zFu4l(r=Q%uKWc!}nm z_`g4wYCy1L$V8HGf25y5A{-6G-gqFrxdmt4yg%oji8T&g-T2E8w~0Gc`<6RLHs)?= z(ocAd@#M*XRm+hTuj(C>>ytN_~n6c$-QeiZeP$MYM-WOd4#wl|Tnk)KN|bR(f{I zEr)b?@>Y3p=E=8%*LW^Fb%rhH?n+jWEOHbkpYH{JBNRDGQlF622)RVFbFH_*;e%IF z_}Xu+JYO5upb zB?#JqppR;sP06z!NtWzc8^-p5D=PLZ4Pk{Phc99Kn5>GKv*cBIA;%Wg;VFOlGlG54 zjAM3Ff5C*LSsn=I7sB2gB`D^*5MKYT9P4zM+2aJY_tA1T5O7$TfuQ5PZf|wB#9sE0 z>vkDrkM#Zt#VnY?jN%A*OxV#*XJQ?AWaJM^Kfy7at7v1h7=t`(l)>xU6x`1T^2yR4 z3XTAyaZzYb1|pGUAU&ZXe8l0~Pnx12C$NAnE(??OR>Uqx5H}vm%Co12Gt)BvIFiNBr)`#YQ1jbkt}U z1#$4{31%jE;lVf-3<2SWfDX8N|HQK5z>8;3X8j(Og{MFpsGn9SPB~(5?QyZPH1XV| zAK|vpC^Rax4Tcz(dDbPyuO~quPslw3rmDNnQ!?2p=Uv$_k5c=7hEN-OfcqSMbzb@4TnO?rM zBJg6GX~J?U4h0Z3l<4(gdQQQle$K?6!tpqoV=i2CTyFvcx^MID+T|d;Wy=%_pJ z7sli(nNS#IJgxkX$=0|Ff_tK#`CsKr^DjW8ax#OAnVoTONF102bUJ#!NPJ#W5OJL@ zAza6^M*UV8HcP`R@h${LlBzGUa-iQ$l1e4IolzY&2NS+k{RA`obmWqN0$Z7IJrE2& z*-?m+FsIoxWrYNVX>$V{HiLC}Uq!2ppVl9ncy%Lr8+#NIGD0_YXQa!}yz%O+RY^by z<)DDY5{!Py9`Mi!DHevo;4?&$Lj?KU0?;af2th^^zcL}_qX-E;-wJu4s-aYg@O_3+ zqWg>Y5yqx%ml7LSHzp<@&Td@QIEzgLn3)rE8^F76R$E9{Wpg^;O256k(}~&XdQS@w z9`<=6ry}03V^NZW@CnE6-REAGI!WET=fp$$myd+B5Gu|mFe5wR&1cNww;&4Advc?j z8gp`_KKVk-PNRvUjN~QmQETG6fpsR!q8+Z~Ak57i*XEQR4+8^G30lm$^;O=#6{F?< z<~^Mw#+T)z71jA~3$#DYD@aSIB!oZ-q*V>*VLGIS+4r{JV}qvm12y^ir~V$3k5L!o z7pf{R$ktn^s!9qtM>_C=NF$2O!GtfUar`{!(2)N|g;+X2O#%zo3FC#@a4bewRm zHd1iJgk>9og&JT$UrmxM<+5cRtV;|I__J+oS-QbNU6wc(3@`~~tIyJfz*=&@{Ypl_ z8R;ARL=zpU_MvZS^zjfRw;_9pl~LtD5I@r0{q24zfVRmV?q{O&_f|mOXlW#!j*BRs z6cstl;Ov)f!b)#OJK>-hwx1l=;~L!NLFsidFe830;iPU3d*gjdgR408dCu80PU66U z@#h~;+p=CiNfvUsYE3;Rm4lOm4r?0#d&`!8Zq5dbNV5AzM#f?WW9Xv+VQfS)*z{mR z7j8xoR9-PGAMQa?d3jTFadC6=A=KB9MYJn9>&wf#fZ(YHs>f-)mGI7>I6^10)nF$p z&h+gx;LW8bKxCp!11VHLiD_XBRa6}8C@!L|a87>$LR?hqx}9oqt-jh~Hk&{X`zA<< z`_Gu&n_=HN_~ZJGzN-%xr+WRw{E2}dylVGCi;Db|m=DAa!#5_{8`BQ1!alq*zW(U$ zqx27k?*$&($^5T1_Z=lnzxU;*DXET(;^!XTUyCbiR=S0dUldkUsd|-}D7{PszcN#=nD#-vqIQeTV36S26Lb)Vl(C)xw$KR!{lcIeN5q@k>=)vKuP z?n2i6xpQakao;z4Yv%%aj<#Lqc&PQ$(3L}VjJ{GhA&Fc&N_RI{AFw809ivoArasoA z`Da3RH`UceE55Lu3&wULDxvB&6IgSPjK3!66|Eaoo)#WEqLU~f z7<7;>a?oma7q-(yjf4?zZ3QFmhUB^Ya83=xG!{Wz=r7tpD0X*^&-|K{KEV%uBk9{4 zBUl3oE7y-u!p?UP`nv9yT@aq?1Xceul}jJQQLNXl zG@~{{?^CFUg|m8~S7Nbv2d{TDm<%*h_4So#$xpS;QCh0QUuA#B?^Is$Qtu%1IF8Ci3~069L$0#Le2ZP`T7R(OVz`WkP(Kz;moz1 zs+TUhq2eW6qRhv`FB{U(OUjT}ntAr-x>Bg|wWQT@1ehP!XEs{Z7)pTkKKWnzH2rt7 zhOtld5F+7Whkkdgp&(>RmD~}xOd?)pQSCI%R3z*2{*aanB#K+1^Q|F(!%rn9YU~+jEXMigP&+oij!dLMD%;6C{)8kX_74VdIR^ zJYV>FWl+&oXN{`XIMu*G*#pPcp&Rz0ts=})V!HpXzB1{ry=AF!%GEl>{UoE(-S6cg z)9ob`Vdr!LZMa_{22mP%*6FPzJpoZhH_t8wN@8lxZf-Cny#PlKuA!4qCokpiz7Ors zTqro5mY+o3cwjBP<)ysJ8XJI}o`+a-M^U^Sqmd2*cPJq7epa~TKn+3pcnnthiJsON zC+jrhV2BQ!(sN1p>$vZ63}Tv5-0y1$x?H=)Ppf{-_>?rn>_nJ%HOlrBa_Wm3nbriWVIMlY`0JeHBo=PNtls5e+y^|KdrXTB=GYoNQh5e=xI)apdmmIRMe5oPFyS+UKk(Zr6_+8xs?;6_7K6cOq0PcbTz?=}%{JT%hh} zW>Ub=i4_y`gc1wLgoGmnwE-|&It}s37aX+@oTYJJZ#mWnpwk~Yyo^P3;6_m1UF&CD zb|AAV69`RQJPOKqqM}+k5ZJmu36^ z`OosxwOocrpe-dbiDaT&8%1btPp$o>+M*rJ%|PUujXyyWcVyu;F``akG$KtyjdR91 z<%9#WLUc%A&|1gzAQTHzk}bc$Uo7J7IA^Vah8QNpJ>x%__cP~jyX{Jyd51*-n-tj( z?hGycG&go<(1ZR@othxmAL!3biy(5F`SA!wVk<9bG?k(6U;7F=e{;VK2ntZ`R|$~| zxH;h-sA|qFL+oYn?#i|{n1I{b2o^Ek%xZX_x;frv9oOrr+0MK?=WNP2UQr(68usBK z<>gSsB2I{a1w|}a0N7XUQp#n@-7?v3rA)5eVU7`-21pjjsm2-ITD6nyhfPmomZAko z-_y%QQF2g6obD`8{X2poPZW%~hERgB;;H7`S{%he`X&B;j@a035~1^GK$MU1O1N(& z_SK7Dd@-|tm#d7C8(f(Yp)OpUGPuJlHvvby#Q(lc>h7k-^J@Za7=`TId1qf|m&b(y zKO`w+@5O@tsyep62)a&#pbuGc5BCZ6ZH^d)|HBY--~+r$&I=47ylWTiexoIr#&K*k zvZ+WI?6$5h0a$dcw*M>>WtxSN2CGUY&%lJsCpLGeAzy;NYZxs*+hMgB6ci($YXOcz z96~`ek(Cw9xfjWd#&L`UlxOpc!99`D%?h^aH5CVX<$kgSunpQ8XN4V>JQfmSwfeh3 zze!rB6k9U66O%f%>wmr;dhwNOf(uLJ45jPxPHQ8OSyR-oLQUBEK{3q|!%(XBtB16d zYvGaj(*M(xydkY{+her7s){Ns1V9+G+t8URr+kXjW+-{FFV0Q_>c z6eJAFq zuI}_QcHluUFmYSzj_h93oI0y3HBbLx7n=$7>|(o^B0V(PrIIk<0O%@VmSt3Wjyt=F zNDT9p$PlZk=Ywd^J!>7Fxu0*Qxj&QnmUk0|yKo)Enry!xVCu<$K?-uBPKYuPj*+L( zFb#Efp!iepgCjMRDgwq3|KrL$V9tv->&<#=LG0>$a8 z{wnh}O}jv4UVuFmrh1x1f**eRCGVG&Cu&0H_WOX&*pkqi6Dxnt|K+D21i0T&$Svd< z-VeIp0?$C{zOU&ykrweGLUzD;M<&_O*vwkS8fA5ZD09chJZ^6<=L34+|DF2{i!Fir zAK-h%(L-|OE}486S1#l3X6JjY(yI@&`DyDZz9YoyifF4qnWx{?HsIBxG3a&bFt5&vP;P#+6W*pS`bI?oDCoVxIj}3Lu0!NJ0aMU+TBeR6?5SU7;~GzU9p0?k_n*f z4Abjl(BXvx+Btsbz^60s3*koPrk9t$3Sx~iz+Q80*9OMX3ahuc>M_6~h9l;|#Rg8W z9)>4K_5=(h(KF65SaUk1JIeA8t?c#0-sCCcZkB)8oXkdd>`kuDeNIwSxIe$2pjg*E z(F2vrR(~{WqK^|stgh-g08N3mR+Pj6{oE2rLs)LSrEH&}sUgP8Me&*(uZ7yI$B&s? zSh+-9={Uj7&%cU-^FR42H1lU~qkNMhR}cS*A6+$iVxKsCvalo+=6v-}wefgiI>^U% zgPupHyNA<4RSD5jv3ugYj33ZmC?sSjVzU&SmF zW@CPH?HNYxs@i!)>glCvzN6zcW}9s?e%ZZ=o7I9`??!0Q+{b z39+CgnQmRKK#9ukIuFQX2b_0hs8Vz5Iw%R4UEutYtgMlF$Gf{Ji={;o(wmyv8=`1w zL%=KFr?S_Uz|WdF+_xsPbe2?Qh|pWt1F4%o)>lq_$J>!Bdc=;@>GSf$?!Lu%c6o+` z(JYg@+!LeY9=bh=DH0e`HO2C%V8aosW?h7ouL%V&L1AHDt^Zw+SI^@1znfAo%>aq} zEyvBzr@FhXneU!@7c6pGY~7yL)*Y1(Ut$rH43tEG0+-o2q07p@Y$OsZaL zgv|u_x1m>7ouJzy3_TYqn12C<7g)!SQ_GflkNZIUte=bG?xiKb_`v|?_Clo65h=QQ z|9;6%uR+^rhUnFT!w;8R$m-!5Y*?hjkZMQQwZOjM`_i1;=ZcG~MIiI%qYUF9-AE6l zf(vuK)-EVV{~gVNdRN0PuXI=iHRxTxl!x467&Qk0xc6kOj-Ee}nzcQsMPF_)pWOV6 zu7(&|qV?uKE*^XPZE9d3DZ?ll^xf?`{bPVQg@BUyZmPLC{ke7@(NGR&f&RC@y#MpbG*q__Q@LCR5GprC$aTylasnEAK128IL3{! zS{@hCgdcTIVo$79&S?ziuo4QY z#3~_*FuYf6nZUC%Xf{svLOEmrM-nSr^9kGRIl!9^ck^crP)yTYsl?q?x{To%u;tnS zuEGbTb6Il>!2YeGJYe#ac)xBbg)$P!-cso~l|Ou<9iSgP0`@@)nL;B9>>^e*0L^cx z7R>S#)G55`H-JBP@5M^u8$$A#dtcyCbDw7d$SuLM76F#0|LazWaP(iEmwv_=GQvO) zk7(i4E?%=zaUz)p|)w2uDv;ER=>gu*Sdu}gUNt*l#NBHD4 z-Ma=s*X}i~I1DeCa}q&L7OaBJG(1^0U^))l)E1Mu6B}j=wHg(~EngHVbyT6p`SaTgLg89^FVG$6#2+{9!E;jvocNAUd zf$0HnUIprwa2OXq_3Hn2Rs9Lg^x9|cSGL}VYL9p2j&^jkpJ~4iX-K3rpfw)fwUp+q znLmH`?k2o*YChkVy>tnrSE+;ZGo_*33J2L+-UA!S)76j4ckO2j%)=FA05|AwnCHC$$h6=@EJb(xl zY_6{kqB=~TCAJlvY9vu0hcY-d)8(19)Jp$^jZ1_Z5~{pS7$5_T+nY+FvLgu4KS0E` z!WM8C7N9q{yt}DsKtuvo@n{A__+C6;4xnJbkEl1Mtc zb0||M)!9XLwNNbw*t@LFuP0_t3{#Xo?|wr#L_ysl6oO{DgJ5^Ar&#GxUoN>wAo;Ct z7YD}n1+~xvg;*VT$xn%EG7t~YJa@%gm8W&p-s|z=)YFx_IgKI1z7pBz58mlBg_$VE zKG^o9G(=z^PUxg@lJ@NeDq&wI6PkaIHraEvhvA@*M?pc4B7=e=zYk*jr6gwn0gF9E z{2stHYKTxl=%vaaEcnC*F7M-hK5yU0Ja<`TLouJvLcXFB<6mntUA6vanOfkj zmGuiVeHoQsv|Rdvjj+G?VC6+Qs>+j%Mwf_>U7>58%qY4zir}8v3_>yAF1n-OrC&WZ zaz>9nVcow36=JvQ$$9|@937Amq}Yw5cyO%g)+utzWgs{?MdDy*&*~tNH7J)9lWc>1 zKI^Zfmv52j%2@x0D9Xa!fY1W@ije<;N_8>|-`O53xE>&>@5InMOPAqecuwTrPwR0*CA=aeTdXyg@<|%Z_Ojs}r zdZ?o#&Ejz7d6$(Tu|mf@$z&A7Rz+nHv8#yj!`~U1gMMA4c)p^zgw<10o^nNN7q_$k zZ$)7oF}myE6!DFrIEa)d=PY%jO_Lk@Yjz}S%x+6euHFHNxC4$wn0DU0TtATCaGciW z8z8Q8=FK-d$MmEbOx!8#Q{c^;aT>7~A~!7H73fggK245l6Qxv`3em&cqF(P=ziK`=1b{V;Bauk1&~rSyyfdDk793S(=T52YXgDnlLxm)Phz#gdG_6Q$%rOWHDi*(FWL?L=owEo)6Ky-oSfA zj;G*<$_fL!^hBfh>bQfS07`5A4)>#eh*L{y@i8(N_Y3_~&$8%{vtHOm(G+cpV+4h* z-hwmfjvWH(=@K27dU6mQWWmP4^TM>CMPbHo{tGK21y!x`}NVX>!Ka)OY^Tqk({W> zqk{-pY_mtLRsqI{gZK%;_&<+gQJ~Qv&k+Bg3jP41+VwYoWX!;>eJ_UZJJS!uT~F=u zW-K!dY+3g9#zJKfpU9Zr9^WDLRUkfQ43V4*IGZV(E2zeV+t;Q}nj++cm|gD{qlBR0 znS%?c3$?u9o5+7o$Z=&C%SazI*4C4lqa(gh0lb~&H@c6@-RBh0mbdEl;i;c)a$d{H znXe?S-luUvDXsdx5yXYP}EI) zos3iC_o#bS8cm6L3Y#K8-**Ve=ngRFK5Hl0**DQK*@5kQA8N|+AMU+6#bi!h9h&f0 zyWNI4p#(dI-s6nd4OET|!U-N#sLUH9Hbg;8Xfi#67Uza?7PbU}c{2$2Z$ zGtK*x8MJ{IhWlM28_7$QglrbA!BwHHiMa?o2}nN8@x>mI66=Zcx*ty( z%>ouseIm~s-$Ja22r$fAFq3bbHrlPdBaH=V^v5*F>(ns;9knY5)F7`RkaMwohyGar z;v>co$-6+9z#Mmd0#Q+UPqR&o2^sJDV=Ttt13RVB+dkJzii_aj0X!4e81p%KY`QQ! zJrCJCG69VuKaVC8{CTif)rZ|d={wspSBW7J=PX!$3Rg(?`(;K_}GBh>db)TAqc8= zdKrqQswi%LC7#{Q?AMB*Fh{ha`A7H#a^H=gn>0(t9M2FQ4+`&V922zn1yi9N+7t2xl34On&0!W<|R15p7!I_pkwiNuD=;%Hy>;B>>R7_ zVsb9Z(2)Opv;w6QOWWl}j@pYcF;;9hSQUBVyr~rUL!HgmCW|Xwr}2cq9_?}x5+V9J zOMIKz-A(1^(_pAUi#cq2<2(5dq*|(9)%Usfg&JJ7vjQH248Y&9jyYFa+b%J}l_>0vdhJ ziA&CAtPf_Wy_T1rU4ne*Q@QMn4{?F@>uqjMxjMy!6Jq&{S~WAArbu@IM*@7y9a^jQ zO{iGn0P6w=BTY8zcjR?2$1=F~tK*Xm*CtJlWycgeSgB$1+R`WAdh8!`9u=d}E*B(f zy*CW*1LEqPyS(%Fa*nqVClc^e!E+$0On(d5ncLYGkAG0rhDmTpJmfwcfuSVJ@AfC{ z9;6g8@y9T*$nCVP8=3^|P^;BoP>vbIfz!hf%g00K-KRkJ5WK4frC(ZqPR9*X6^Q%6 zv*!K+VC~nQFX(kK=_#lZ*O^Ssrtx)%>E^hp*?#C~IfqkzRNgK9;qM=3E2=FU&a|)g z$+oQ&gbs`Xzw`O?s>+$+iHWn7dgM33z<``teG*q??Mu4mQuLO8Vxa zC0yuPOxs_8o;U#_fN;@kA97_t3v$)d_Um(u--jpQKfE|~Vn4hjwZYdOBJOu;S}8J& zFIxuYm-hBvXyo=G@yrhn!8b}s()p{rI1&})B?H&9jO_xso^;zZ4Q|H6ke= zK{SmAm9&1!YgvMvjBi}#z_TKAMBD8yWit*~GvnDu?KiDMyVHf4iq0SW04Z4huEm2_ zAb2!mG-iZo$gGs(jSPbUkg*kfL?A6s(G-vm*V%O`cxsfk)kq`BtrWamZu2hOwJr=k zjwcv>Vm8PNbp6st)6}kiC5Wa3c!`q-{c?aIKl)+Yyr*0=HM+V*Q}^)Mr#|%|qfHbr z3)5S=xj;Yi-7paD=TRgUiyxv93DFsW=kIjRQ43Ug@&gn}N|P?if|ByYD7Sy7&lp9s zLd>ZR7yL2l${g!{1HXQK$GV_89eJl;cPEzo+3SXHKS$h7LXUIU+Q~YP-l{ugayCS$rlO=Q^;{fA+}#wzD}_?>R1O; zoSciEUrt1r#EU?lI|O`kMghQVd0i=INeDw^m{Y>?dfU>8eC-%yae=uQBe>PaJaS^# zu3}m!`i_R#XJ1De(Ev@dYYi z!{2`xJyT0n3-v;T6%im!HxVI;H~*gWo+B}(`=&a7s#BdhUnR68K^=AHp);qY4!7j6 zJb5`)=aUdTL0ttcbIO`{Zt~=h_rG&~zQ_B5XJN;0c-zf)eOX*`2<(v*z~cAgSWz$y zZH`G@wh3Lp!Y7?=dJ z9~FhlB-O-MK}nzGef&l`%COay;qu+-{08j{dTZNWP4iA)_bbLTt*(N$_2GQDsQ9Lu z3E&cfh=*KHPL>4p+F3GLD(i_X^XYnmx;lzVlQYxcVrM2xi=cuNIp+y2t4%)tc7PM! zhhw3WIEGdv6qf1rrS$T-@ymvC=m!qaGq@gBd`mqYjC(oEO%aT+`4;XK!@jT#OfL3>E zub^Xobg0cbNI7Bw%n-L-!>?v=cIh|tMy%bB=q}gh z&Gl;=Tnk+dGohQ350{jzU9o&kW#>e%scGEBry4+sX>`;UiYk=OXw{Nem*bSvj_?Jp zE0_++CQLp_Ot!^qb#TQgU=@`ho3$WH3MPo;h};`9jyS@uxI4ZHWE#`o8;JpD)s8^| z4q^n5OI^x%?L^C4#gOCt!-(OFT|>hX0U!cg@b(ynTjyOI(CFyAi?v*2T$%LnH{X+; zB80Bj#jxR+pj;H6#QhRzna+oB(vw{ZAhOP$p{f{aj9ke#Pn!9bbfXc&90+bDh8hw* zQxPWDb^v~~fu8a-L0_XB1v}N#c>~`*VB48jJ~u^rI2Gj@h-fq`0afR}W&qX#4ZJY? z7R(~m05b`?u(RciQB{?8`+Xn};t6|06am@UZR@rKD+RepI@#~g0fWN!jqR}j&1 z=MobtBR^|Pz6pYXo%t5GuADhzI_~ZF1B0*b6z}{R4$Q07`|R2TCmrY4K$aj zhxu20F#K$3AiL>3c5pl(9kFHC;NY$;mUYW2n~mMcBuX>9{`;eIyj=h2cLObC7pysY zvaxUm3%wgzJuKbsIz`z=;KKJ~1K8_V!7jmA;9Kn~da`#BvY!ZVKOZ>ccjV#Z0%d92 zJH!gggt!@!cpxoF4TC;tcC|upYfped?m_na==4w4+IzJ-2X?PRzrz5Ld!l}amXyU5 zOLvm&CG6iDg;*`PrFLX5VPZ{}O`m>(sfhx)JLR#{S?Fkc<0%uVS72p%Z;0IU$&=!Y zd78cq83$LKujSU()iQ41zu#x?*aSe*pFqXC+yU)YRQeO7ee(SDaK%O`3O|J0-F!p0 zAa|H#JRBuz@Cnfz;}jiNS?ef{)kcVkHt#~=qGsBPqNw$zwPw$>eW(^`$=M!wq%z;y%>wy6h>X*hS;gFo+wPgU0s4b-@9anvCr$c1+^H>CSW~@-Ne?a zrOuWa6_%}H@1R6G=9qE_*_Q@&PW(s|^kvAc|JVTC5_06;H1osbpcP`>M`_UGbIeEu z9R1MxF9pWn!b%z>3M?lv$ofZYwwp=cMu6W2HQ}BZiy}Z4$;E6S`?wA3pGQ+Yc&m$V zz`_?jueG%HVrs&ACMJggwc3#}v;Opu+A-w-%A&ofmFRYZnA^W3m|MHLz8(sIHk^)~ zSlTS!cP2k#?Yi-`YroiKJnZN;#yH1c+p>5=@9kCsqx>8;i=p4t_WIg{07W!=!Th$x zs}@FWaOx3F=#&$OYLK^_RCf=*qKGLFBb|J1&2Q+zxGX|`hb*cg5+Y6g{F0n80Hjb* z^%LuicKY5UC4bC3_~5u~Y;Vf|cqkL9=b5a`p3$tcP1EPX++Kd5^f%-;?gQl|+PjM5 z-HDq?j1l1|?)uH7L9B_@G%<@4I|PpIBJ?4A;qFp30IN};;@Cp|cePn;Ihj%9im%mtoCWuPf_@Tg1jUz-zwUNZ02SzkQTI%j!FqdTls2@BVi= zIp5vq=7q1Vy`%x2i*%Es<}N+d=Q&Upk}zA@pFsNXL9dFGW)g|orwonJJ}v;-*Ix%T zOR^`>6(crgclkQ;jSpl!k(Q)ddFKMUKMHWjJV791?_MC*bTF4?Ngri0$-(N>+UoG~ zX_Qpp9eR=%_Jbv>1J$Jxj&2s^kz$mi6l3l0`HJem>llKu{cIea+@{hb=Knl8P%u(e z00wc7J^?-h_tK_#Np{{WJAhh*5y)&V@86rsvw7EMG(oiVR{`M|8vE5a_vt^;On02` ztPoLgu0r>5j{+@^Z)|I6xhVQ$S1)Y3knQDj&A0DET-nf?B^t4$PW9Sf7DjnoLa;gB zJKot(?@Q``XmMi~NnHTgA(;R^-;c+*N;kl(DaD+TIRi57Mnxuzjm|r3ftr0)67s5L zPe!Me{p!gwwJt=~1!9k#?ZHdE-GkOqm+R6FL#S*a!t=u zshYPtzOY;DwCbFe9uWZ@Rn##Lb#N$3sdcx>%v_gELELYTEktEjs0r7^ad6EZs??X> zV*q(g1{T+m`Ck`kcjw)&%;3M5&NTDc5ciM1^($OClt_@oBgh7a)q>PICHEFqJ@V& ze+1~~w){@NGRaS(CS9ffyx~K7BDZ&iOAyj*HsVI$h z>>nVh6(wEntiyuh2o5*UbNB%Tp2s#Ylj_Yb9|9u_HTzjNmU)yR)^zrxZ)TXuS3h{l zfvi-tI|grYOz-`4E;g4rQ|E@O5KKj}dC9d{?Wb=(F|2n-XISMv!~@i3%xpnVNo#TO zXWudv)FCziZF}anmBl5kTe$34L?Tx2byV!6QchY(g0xK9%!g3B8L@99OpqjjW&hB* zMOu;|xF7B^fz@lkeU<(h8RxpX(61)O0n#OaPAw=U-GiT!uar)&)=9U%&UjHYT*$$2xzST zn-TcD?nV&%{Po#nXUTs{RcOTJA$#`>bgY5$!XD~^U%PyF9zVS?=}081s{6WO&&K*X zN-;sc5z?G@vK~p|pS|p&hmC@hfuEmXb6pm%;W5>fyLqR^ahBs%%LF|L!5tw_b^i(h z-!cc`$+@==bbVH9L4CcNE9)z{FJFl6LQz!dLSra+^O339c_-jBnw}3~en1r$DaM+v zsF->#M$w)x0f#v^2VHZ3ET+70?)>L3xmjUhyyMH~^XCdx1&2*m6%6RPFp&KDa%+DI zsXif3COb4E_^r@vQHb2rGeNf2$yyp-|E&57u!LW-SYHZRSoM|5eGpUI{K8R&F|hSL z$<8vWzJBOW|EZ?M2sr#z3#(4*ySQrD=*_pE>AcuIXftT$iuXuyQ4x`=SKreT0j-U3d<9RooSk(t#zcwX3N_C3%d1>H#pPWx`+?;L2p>g z5KuK}*bjFRWRs9XTYTfK`lVA^cfk_pbkJgiMG%<(i$8ey>wBsSTIfL^{B?r7Nm2rd zU8k_EI8m?9aa%_+{J*qpoo-eGZIiRY;{Y$UE`HQj3qbmH9^?QD?YnfBQ6^w$R>NHIjv5`A4p-o?pfUaUs@%I@0}7jIcgKuh>qupNFJACP@$F zelxeNJ1EQz;xJ5@KEqPfn(g)p%YGL6UHy|__PdsfD9}8)A6pilj5^G$ZkEvhtN-Cb z95l_haI^|loR_4~a?W=2&>*Plh#>#AqR~R5r$2>rWdP$pbaL)4IlJZ+rOEI+B59Y= z`b@(>@U?u5R_{3KiZn6G*s=_z2uywN112sKS;ekrGpKfbhJUQNSxbts;1qFM`zL>T$y5jO;>dQ@O=sS|#CW3XVu|Brf$iH@5RBCg!bBD|* zBhLg{GMP~b_v??+n4p`r7bz#+?0UX$)G?wADkF~3^X)EXjvCB+_g;|Y8o>70R@ySx zHzI-)ceuaN`27qJjNHGs@%IN%c0f;sL!&gUB&&lwjA?aZHhu z5oN=cYGt{C9Ho-E-0EG5+0JC|yp^dj_3|+1ZLX-RVefOSVV6MoY$j~E8Vlp9Tlt;M z2-4iiPcY<6@e<#UDRP9AnEIGDMR>}*#uI^U^bBC;X>MdZJ>7&_YSP}G3!JoC&35&& z)D8|$YqtPIUr!x{CLCeKXUKHc^f_P-F{Db~;gYJE=1q>Fm?C8Fv7{9gKmeH08Dkk@ zV1Puq91if)qodP1l`W*khHc|1GCW3I0IVl$n(&WgFKx{ADd+CY-5+iX^ougou`Sfc zG&@%R+!;|KEv^8G#ffFqz0@E{NMPmQrOOwt#X8_Ayi08$uFPWsi9!@cYY!D2T|aHs zGZSu3vtk!!^ml)kU?s88S@*8G*BR4G6yrK zRIo4(2dkh=0BHn~-GJpF0GO~w>=`14L{@|Xf;Bx^IWIjEsMF^Tqg{TqD5{%KqAYwy zbg%>?h~^DMJ=({(qj$f!Uyvs4xjHdX{X8vbB5vTw+Bq>?MBEWQ#JLMxZ$ip{%kX}0 zKKr(ddUi*9dj^?VAk?*M;?C4JtE#B{td5R$`qL=0ha>fS z9yA?lI&)h}j!~SanMvFs0u4BrjaZ{6b|mpi8>=x<=A*%B1 zLg%G`-Az0ta4aW@zC8)E-RLt-f{wwbf>0>nZ>%#I zrdzMaWJEmv-(aH5E*JA}0n-5Mc9u-=>`f@p7k%uWnxc;R*dvt(&u@KI6_lP{%RYIG zK})pyXpm&-)lqMySAPuEdHh;9cTZYQ?b1JV9)RI6JL7Qcv~6nI##Zh-5JBEiegaI2 z`Q5m$2-I3XyXH5H*r@9dLiNiG{`{(+SHz~V-k*}Afx!=A2YL5aLLh^v7u*VE+QL~^ zN4A+`!>pUXdFhaBL)hhlCPDS!acaEgqyuw|5Galw45IWF|Me1Du{fx3^1CLJ6c!3X zS@P4DyJ2&wIs~bkG4%~H1AE#_5Q@6MVu4wY=z-Y+x!dz+L-)^r!9r->8S9Jl_o3PR z`WncF2~nm~au~RzELGJ8oSHT2e^T+{3ddmJcs; zq&MY`_BI0uRS*^-D9@W1h{01~EIl&YI^);*2eR}EmD`97WK>(I4(iCJb%%y{mf8Zd z7IsGPtW_*FeAh6;;;+DSXMPrq*p&?REM!nMcF1~!=9nZ_~Y z*{dTrN7KK@{NS1PWkZQPj_YpN0*3$RwR>_C=FZkwAC% zfFn>$%|xI@rwzQ?@uess1d${)7AfvZIa%#x5yIeA1T>MAC3NcrmzwT>khIIMHC^Zo zhX=N0^7rVu6d;I9-n|v?y`G&)+P8OoQ^;c9!RQhKGj>PnPoba9&gjx}`F$%Mf9SfF zX*6{xFHHy1@$4{nFlRk;^-XiEPtHgM@4n>Ixec&4kg^g?7LdcqCTjvPNu4bxQMh}XS4C3!22mSxhY$N|upfnxr! zk-X^7ESR^V>+edopa-3QU{AbkZeHQ079^72=l?Uv}Z zAg;|eX1as9uLL>be1Y54fyjiNmmpm%tSz`Y>_0Zc)bZoD_vo@>yHyCz19m@6ZJ|Gt zC6#)HdQqf%eIFx*Nq(&!Jj&b|{XV(=ju;b9mVeuJ&_|muxf0Y4DB+*ZrP3<4K`(ZYKao<#6X%T11?2>E`WGiT%NzaKI^l60jNM7kSEMEdi1X~&8!81$1VctG#EdgU=ckRyz&0U zZ4~(lsQJg`0hHoV@e2t$A{po~CzqRZw|diOkIT>y#>KpC|NLl)_~zchYXt z7%KeWx6BUiaTq?%)vS*(`2UFq>HX_ofnp?RBP!YeY1nKHWLA!%jglDXgvCEghyQKx zKmSCO*K_q*6zN5D_Mww&2!Al1AIFM`22x>z6UV)P)&w&k2;V2H6R?S%lV*qomyY8GTiJ?>kXU1 z(_Or~R^-%!U(*IR{tb$SM+ectDHKHw$;&k&MK$AJX7upk(Xz1UpC57@J_f>rKRaKL z5rQIBhUf+ZB$t&4LI-w&w?vNYy&-Q2Thhwwa<1^Lki8!JFZWoWG=^h|sF1y6-!`O( zC)G}Z=4R$>K7TfoI{yWW^~HI+FlbISo%8MXqOwyhlHW;;N#Fh&1$IC|*Z~Dy{5D6EmgagM&wDF}n z*yN(rova=Z9j@E_R)1ac>OHZz$GnZru@O2b=Er?dZX7G~dOapC$kGU<*4ZYt0ff}9s98Ta#0hOJ6Ce5Ffg~?z~CM?+vaLlmu~p4`Q%{W_wP5<{;&Kl zYMK51T33Z%qG5gS{SzN8$&KrT>%Ywwe=ZPWN^Q6q?zZjUzFrKpAqW_wXDD3QP|{zC zsSRoarkseeoo18{9gK6WF}NpBnqv&zM^)7qW1p>C?|3M&Wik0f$FkEu2DncfQf7t6Wpm8^CzR7sWM9)vBqRJxP>ASFK@al|;Q5 zScuyTuzS(ZUb%jI>iVXHouWz+_S5xmkUR`{3(i+Aq(idSOR z>vAvu#0HXQ6A(|MKnY)a=n!RUQi)TZXzHX64RKx0@t`2*>vvq_xAEB(cG&4ERcCtqZo$42E(Xh)QV17ri{k* z4nP9TKQ%RJ3l{!N3O1$b_4F~qYMnA$FpFi%cIVp!Ox0tDZxn`}n30tv%F^wXQjx&G)JDP~%b_-PbaH-b0d5-~bV#D!v}ViJ=#bd~FN| z3mU8nNH~sb1%h9fU;|k;cLvD}A6pT%Xtc1nj71z~3n<=QwPz9-3JD+p>*<1bcP z|El&u2Wk$6>|kvXRmmw(m6IB+{W}<9 zw@QNFT1m(71$wrCmZohYm|5U|Z#bN~`7HK|*x)@YUwL`H(F|BcaK|=lZ+SS@lUT1Q z`!~3gU=h9b_uASbA~yzFJ;k096({YeT^;k4k+7M^HbqRnx5zQz=$~a? z^8?ZD473UUWwhigA1c-wX)rXl{kaprddU2~rT>@m561odH-{Z@ZP4PJD8T(t3ob6M zxrTFdJ)94f)c+bp{~0{1j;_P!J7bU3p9@E02ks4oSu51Jn#hnQ$^Qx~obwl0FEjfd zDHMU436O6{<+n?E=kGrGTt|W?Lm#Er(m5hLx|2KOr~P{V3E}ovcUySB=w#4);CCMR zEAZr5TOLgfh=l>#uqixmA@Y?1Ry3q|%X{A}bm?aTh#7~RI zsIl?o%fZ5`?+ull$`|`e{Bpf>(Wn9rBYswrpSqz_%*dH_uNl+bvSMqs@bDTiG)hm; z+m;|`Zx`scpSDT09QG%tIr$k2brL5P5NszEiK&sB&rJS3y^f^%`aUkMJ=E9tj~3_l z_4b;OmM)}g?i}ZqEy8y)-O82D-Md?6kY=s3y`Ag)t#IV%Xv?{0u8ViJjhT$bft)@F zK!;vZJYqL=m?sTtv(0QEMnB(I*4|J^iDN{6Y+IyD(dnf3L*tdy*EQXoIoE4qXPE(J zE}l_KH!0{ng8v)r4r8zwLAi6ZbSh^2i>=ZSx#y}?{G2swiZeo_AKm?!X(G7NlQ)Kk z$KIAo-yTkh=TA!PhzmiZY(}2h*_@%F>*$B(R4B%6l!N+f%SH?=U{_KeG75^+r7ae+#{W1$2Bibgj6%lNVh z{9YXQh1gbfe23qAcpHwpu=4j4i@iEPmFHqwZ6&r|+lPH>Fd&xHw=LAL69i6fYokh8 z9vzYR=bP!TjBovJ0)}-NijqH*O(I~#h!|kZ&w|h$j5tsl&!XtoE_^M9W9{+C1gmI+ zu~rX<*{vb;)Fs$aNRgb06~LN{ET37b^}azy9@Fd6-uuo2@x!Lru-RU>IY2rjnU{F{ zUSPY9C(d&m7CsPV!U%d$cTL-~h-^nX9#EYB)I@G57Fj0wFAOnXxgN?$1SDPJrjMUW zDdwZ4@-dH5>9P206NZRXK_Am{EjStwpQ7BMf%Ps!wUc4_#JbOzG9zV>z)#~EKtQVw zSoJ(VYBn3~sND#LB5zLctT{L_mXj+NtdrATAlGjoFMKDZ{>F7jTI90{awsggF{0X9 zN`oVq$rDkc_f_aqYoF^ZIUA5WE#Zt2HNsCOu}QEYoDDQjG4VJ0N$bdD{~5?SZ=Mx` z4nJYS6W(vU<~=MhpBx5*?|8QOvW$w4Ke-`yP<#n`seF}0zKb6gnqH5m#zIy8$qAh^ z@c|9CBEp;Kd6BMJ4El%}x%7)YK6pgY<{YB_&`F}vl5RM8$e$tB#T@vZ_OxQYFUVm> za^Kpx>M-QqL%(;3f^DPn(63e|aDMWA3vTVHQjUMiZgZ0RHgsGn%2IZXJ6H9Av-jWO%BKdb0BKyn-lV9zF5Kq z&Fq>K&;3y>JaYTW|AR7dp1N?2c^;SFKLD0g7pn8bvJd~ia{Gu-{Nr5lB#ukv&NCxl zt%GH434N~i9r}t0Pkwjwkrb{P^gpleRZi{PB82dKT{b1~ceM6my)eKUhBv8k$v8Em z*HiIbYHQEEkgZs&8dYYUk+b8A(=Fz)UuY4!;n5KTM{mT@r`?&e@aHRGNCLg8s2tAF zh}DOd`8Y>`Cd0@EWl>kTpXktB(%lg_Pl*l&_vlRK@NG39IFQ6Ghi6fe+!2KUzBN=< zfM3QV1F>wsJ$qlrBwxD_1oP>5Gpl)`086`?PuWQwQG$sqv<+iLAI5_iU1iwr=+dr; zg)a3|nIhvO#qNZMz)iQ{Kd#_Q>x6Xm(lpmz(g`4J#>IZSStAo|1Z|SPpiW?~m3XfM z_QK)3ttDC?3iCDxn+6HQVd8jVIK@vn8aE`*TOa}4^{U4@=oCp_UWJ7{#sx~vgj4rD2M6G_wM!)MCapriY z$4^L#oujhC=sy;(&MP?6+Pz<5hJ(vviN=SD}uF=pE$E(yC2p^-0@a?xTcVCI58(x$8>P50NA5`1lqd0nr-n0a)c{_qgpK z+A9~H5a3rgfdKg^Mp@^J04JSt0J?D6p}QnY>cKfr>E5{Tih%5bIdL0+zrTjaDD{~k z<)N$`y4d{`+(aCYe+)61+?h3&LfUaRL53>CX;2(LYO6RlxY+jndgh@w&~0|B+w+D ze{)llyNj$|75KXQM4f%hp~J3wk901~A#NiVsryZtnOB-m847_GTRM*2%DU$1ZCt_G z00J#GRO5^QOL%- z19I8GosA)|_H;xD=c~K3+T)G{3xYoG-qYaAPWjq$Ixymh8b1^fc?jpu17AP!^^o1v zbY-WVPPeX%GuqCq7!M>WZIr8D7}%CZ<)l#Q~&lbPX8ZDl$;f1+LbQ%bZ1GlP?J%9i(MGH3=i$^6AZgWR70rEs7CHk7ro0Ce~&z)eg*lhL^ zH+bBYA3Oz8f3Za>yaxl(;Zvcs{2JR=K)<{a?FKK^v*m7<1LxXHQa<*%8MU4U#9CX# zm_~XbbGn!B6KH)1;7#p`JL!e%1&mBc5?HK>43w>)e4k19L2?!~e5b{}0bgA-XLHKI@osaegY7;Xmc9vZM3t>=1^} z{#;xH<>ibs3%|+~giGJLx=SDlzFc*3cl<7uzu$(*w_KBl36jW(Bf(i2UI~&OFOsk$ zL_;YQlqN)`y{GWyHsp$SuO9zET*)lp$A_{yOt36?+}1E#nCl@E^SEB=yH1?Ydi^cG zB&1Ci@1-fflIPv|c-H6S?PVtK+#tCZF|%%0kS7{bQ0yJ|ua~B+KI(8=PH0ZXwiIE8 zzol^%n}6*eMvq+G&TyV4Uol40O4`J37(#?hEZ+4-D-ZS}#)s9FXo`2piamUuUFEY^ zhef&@zMB-Vzl`2%sxM9s^TAL<&DJ$_VJMo@zO|oDz#A7=y>fl#XN>d--b^}?au`H_ z;N{ae3dWq0=n2G$QF4hEoGc&W33hoK^OUP}w|p;yPW0nFK?EiL{g=*L9Z|8N8N6;F zgiOz*dS`oh99&o zU?+Y#V0;u2px~IHwIhJvb>?{SVw`xFpfiLz95@k>!>f71PvZUZz(F|RWN6Wnt^vk( z<3BG9`13|^rtA==jw+U?;sS##RLQ#8&rEARBEN>V892AQDF_El!VUrpk0Tw#fzrVk zaJE^rD4ztl6WmZxTMN<>!*?8QX!&dN*&#tWw;Vt-<)!8I}B_lAFB$!vlfohxg$u5)Oi6+n)F*KkMK_+t1hqL0mE)oPVDi58V$wOSVOjlSw zA^voubTX%*jqZFoGayAQNUJV(DV~elk?E~3y(vy|QSoNYsC2ydrp&{rC31aeAZDd$m@@kx<~;JJcXc^9A_U>wAzP zY{H^tvW2r2Ej+yABT7ttG*8s1;SvBl?LzU*K-pgmp9@ia-!8rYbe~s;#MRkO?`IZ` zM|0aRNT@F~pUWf^iFtA1)qa7M+Rv`D{nc>3+TcBzoh253`+=jw<)TLnRJf2&Lfdfl z1bYM*FA2QtEh&5~kv!d2pq)OKpLr_4Vt!l*jKQO7a3e8dwX)t<=q2oEM@Rb&1BsCi z)YcI@0jECf3H9`=a3%{pgI(U;-F-yLhdcWa17I#yUx!Z0YSz+6%Bj!_<^r{c@6Ggv z@1Iu#`R(V`ASjwV4T;)~c2pT(nz@-I(5eOqHh~e_fzZtm;|*%!%@P1LY(*-uN`)1M ztqQ}+T`=BiCQV=;F4H1b+|d}%OYbop+oyKQzjxINa!)K+74yD$Xj>8BYXhm{IrQ*w z{(b5=rO}y;K_y1H|MYB85w>I54op;(HuODV5`upme z1wMYzGMOkgv=rD&Byo~(7%fJnS)49+&uDiR&5E01MV!bWm`)aC@;P)HlM8vk-*w*O z@v?u2ykKsKGC10+4J*f*uqZF3a9L_w=^WuAE>ezf8}~tQKrV|UMSI8L(Mf=SmC{bo zU2gPgj3*L(6@veJ8T?Q6nrkDqb{;{%1e=&_r4S#B1xuJfOR^8#ym{{)_=|_$sSI$n zC@S2z=Q-3m1+rUpLnpwaAa0bu1T|vTW$NUPDg8b1z>~V(Y#Amv6%626G8+dL#t$WN zKg%u9v~Jnsx*z8Q>B4k$x%ghmNKQlCGde>QLc~#f2QtiYn@TuW;_Hl?TcqegR{Ppn zDcBWz^kjcb9%Vmpd1ZdShlG6MQpHf9goxRAUfwd=G=7mX5&95Y>2`<0SacAbYNBGv z>>@^?`9%B0OmOWu5+wi5Ca5KYGHDk~D)F2T@4XL-D{lR4lH zH9t^r!XUd|4~RX5QOxoaj1dN4rX_(JxDu-~#K#&EW-e|;bIqu-mTE;7zKnet$F%~b zMbB$8Vw&OBTS`9NCmXA3<9rMyu$EKR(Kb4uU@p18f~+HAEP+cG#|*w8E(+b2Q4~Yb zZDF*I9mgwvT-y!Q+3P4t77Y5@wTVa_2I7OCo1!o*!liOCci2*?0+uJRr8qE9EXz>~ zHu(vZ@MF<(izBvSAIujEdUG>ov7>ei*1UXVa-aF59sUphUJYbNXy9rTAhXtjr~ZU6VA5t#MvaC3)!L2x)W#__ zmY{t->vjWHN;Psisr3u`{0mMGm6_4E;|=#<*;}&pB}6 z%~3Tn*6-{e16M|7;qTS!$7L5XGsomk>cXBMsItpjPJJGDKi_96K4O_r=uL>#l&3e1 z!bGYKEA#xiFw8{?Y(TRyu&;+PD^e7U`J-AGDJ(hET*Dc62r4Dbdh>Ir`4uN=Np<&` zGs~(?<2vTil$Lc-OUfEMlE1l7D6Gn_4JfBJ0ok^Gjzyd?-ZE!>HAETMt3p9w>pdTM zg@ZE1rF)~b5~Hdq2T{dWOA9cu*(^>M7^R?XI#VD;|PK;zATd@gA zb$mP*oxsEvvpD@ri7`5wU!Py5i_I2je9bsaDDc=%M$+qf>D7VveTFS1AI-YKHM5bS zY%x)$3c@Oz+R0i*mM)?DvndMB(r73!&%%Z#m-UiE&QgF?GEWJ6@X7Rq86O4AG4KTQ z3A5AZ?T$gSTwFPezo>LWM?)=tR+HIbijOtw0{P;6Q`x6q5r2QUzCN0f47h@+3nYTs zGca|MU!70~3IBkpgDoIG|KpKB+N1YoshujL{&cB~hw|gfHi&5aH;b07?ODQPjRdms zodvYW>g6lz`6w?sbipeavHyJ)BS|d5UKSb4X@xKgU#4dAn6$>k|Im$ryvYk42-pcx zE%SwG2?%LKy4+qFqGFMBI_R72l`&-d5ovqS^0e+$l}Bo`bMq*-N4~e2>SEr>oufV5 zOdVc;v1DrtiV-*>=OF2}7+fUm!7vB$)3ZB=GJ@i=VIbDS1R5oG^D%cIj^wbQN1rKc z$Qp*dkEDXE9N4ueQyFyNVvF*Cg* zWW>{zjPV<5hU*u>5H_2i*6$g?kv$h&%d*hUBiHT|oU@EFq4DE+vt9jz>s^%4>HoTA zs~AoUM=(S~k#J%-0Xi)B<*+k#6KmXNUABii(asoLr4v0}XGv&VSo~yyC*1e5pgDW? znI45XDsw7(xhN<}zp-b5d`RRF4NYhN7k>4kLRgkcqGi=Sou_3!MBwSeKE(wnnJO$( zT+IHVZdF!yAmGRGK%DaK!@JsH;2JTurluh~!K63utl@6(kMUV+SN)f8ex229&=26b z4O8EUlY=bLx@&%lLLhgb$F{Px8pZ+%vD|*$J5695`x`_PFvGdJ`F#jFRqXfHlGz|W z4zA;5I{KNEhqoMy`&AL_Lxftti^D*!9F{_*Yf{o~K@-efr%IV+NqbL*F%6{$j(}i> zF?4xgR;U(#6uyCyq=E4sOJsUF%RS?{o8gPBXhQC~*UP4vY`W*-@)ZXK2U?I8m{tJY zoyV#4csEt$>mXe-qFp@d@@}!5Mwq#$6|O}!1NZn4u+ubp(qKr}3E4x_)L$?$iI}he znILYG52yUJ2#ad42!D)Ale9Yh5$rSW&8)6rTe6zA8wgelU(M&=%WcqRy{6}(%KQb0 zEuPAZWBACFLj!vN%ysHs(=Oz*V`I2zvX(`407(oDbQ0o|5w>8gT;A(Rx}_k3=M8s6 zz_FkrK2ZcCX(UaucV}r$@q~r4-KBG`Yi9_x2$l^Q=AN0#hQeYpXQ$`--Sxrkr4(3M zG1>hn(5M|YQm_fbM+8M&id{hWo^GX&1;fROb^>f4bw55gNBs zd&%ArYcJZ1afA}O1$nruP>i-p&l1#frH+Xa{SO9XYW5fgigKJFUDE@y<@rG8V;9r+ zPw?~hhndwIJNBEoeLG;*_NmmC=D&Ul37!4v{B?=%f7ls2U#6sKrmBN8HX_DuVUT&| zv(jLgd(21zQdwMf2nDc03jVGoP$CH+8k7W1EcH*+N$3Pwu4lx?@`izJ&F`e{n z$;mVo&#ucIyjxap4pii`y{1XYo;t&G-vOyyLW+zhG2`RenVtpZ-0_F8=q z?1uGd%OZ@HmD%55cbe{CC8pC>aZqN)EJtUNmlyOG7EtpoeXdMdwmhEa3bP|@8Tv`> z(opn%(9Zh40Yg6J)`IrDfz>hrbRbAR|0+9ED`c~Q%2mR+Ang?pt?!7zHii?ZloIlV z-N)B=82F=Bwe;l3NYqc2e|^^9*f{FfYx5Z7<4gGj&(h<

2@*Arq|@ox;IopRzro+D_*NQ^llF2tbr2FhgWku6}>FoMhlvK|fT zz3|pO^&keCWW9&>Incznsxy-{)g(DDNmD~wZ2AO}1X81s8=5Xs`q9=;etGt3Gzi3( zgzkTEuc`rO;kelp=>T8@bzerp<1{s8W;eFyZN%1%y&OHS|6Oi4jD`(yBxGHP?#KBhRI zAOh2}Kg#q!xUJ=BE|LL6-%8sjoy(T{^Mee>$>wq`XfqV5t3}cctB8mGm{^OgWhOq4 zeJO)$L6gBTb#Wm}nN_-5tT<+qUBdBAtwvZYl`D*M_k`2ttqa4{2?1ggTsUGH2@~-~ zmA)+HlQO>o*|(3>1kLBjbB>EJaSe2u=mrgO!8rvkwJ>+|!csO4X z(WX=ZDvGu{_~y;Skw2ankNlrqg2aLO7wq7UqoXrNqkfEx_jr{nD(dW{1MO^RcvfHk z`S6jl>Fb7iBSaWkM$UQZBOv3U`-2ZwzkkDjzq|qX^;gbPLql6IBerG1f~9^geW>(_ zz~Y^~q*5)PqMx>8XQL(;%S4%82m`Lx@R3EJ>x;;)o&q5fDPsPpxl&S{*7rE7so&TP zKOfinCC95#Yv78k3mFz?|O&NK(qtQpfGPd zkO6x51>$63E%*OA?&WJLaP1xLv!6G(-0Vi$Wp_VK$>d_Ln&4!-p=j011+Mvj(r$jg zB7OGp+5=~{`VQOthBMi{0Bi$V6=!r^eE|?ZE4(cVyRM*1kjTeEU<=uimehgi&FM}g zFFy+@vS|MuwuD)T1r8aGmk3Aym1=jSIidz;J0c}z!0=OlT7P68j?_Q9Z={X8sTQCz zFnlH+j~{~J2;Wok!dI_K`pJW~X5#K&2UPt_f7coLF_^|UDwj|_L-RyHZwg)CKkXOAPEp`{PjMNfTOr;gJRLj&LHm-ShGe3Xe^EdhV8~pr{pFhHa;aPLdZ9f_iiQziX)3m5$3^55u?2^JQht~(EVlT;Y)vgopXHL_pUD2Jy)f*eioZ- zLealbtl1}QJ3RTVg6XvZ<;!=2@%}Eys(&toH9eT;GSTpA4=}b5@luMlkT*M5N zsQ@bgwy{(i_?qNn`46lB8?;SeW(>hl40L&AtzLE}W5rTe@tuehd3tlUlnLaZrBSdG z_gY$o4o};$?&_U+`w8_h-+n~k{0VFy{ud)eG(*kw-CUqox8}-d3M%YoR5Y@!OHr@Tin+E z9UIG7Q>I%|xQ~Y0f`i<1RP)*Cf-!IIkmuHkSaQ&FHJf?ig!x{rkE&EHta-pc z5Wg~*a%C>gv9Cc(f?CiusR^%!@86e*VNL~OaF$K0!@4NJuG7F^oGg4cU1nQi7Th@* zZKiF#JZXPIfIOa!lCF@$b!ji8Xhe&onSi<3Y#x>mpFTa?X0IseOkhGusN|9qdE#dG zr~?uv0)`5ALB+x)E7GpC2O##I^il?KNp3<_Ek_zSv zVWkqOtPoB*8ZOku>8yGPbr2yKE(~Fc%7?mQ@yv9JFs2v@YK)(yCvC+!?bM`}5<(tw zD|WV+8Wv>fjWE1{$4iNV(oRlk?+=qC*CQ}+oKR-XL8O@USU+_oU*ap~ujG^pAt>7_ zSLP(=TObs&f5_lm3npA}G*^KV-B2qK3_7@Vgr~w_`VdAwSp5N_EF@(3=M{fFuQh9A zD*$rr-0&iw8oxkY7?%FLyJJ;yR4Ac5ju87wri3*Hw3ylEDe@U@#6-$N2`{=2d`@Gd zN3c43summADjIg@H_;=HHA0236u)(rZm7><8Lv1R6C;Nt!P&ee zGA_{}-U>i+P6?{ddzyWM{PZsL*1|;)VFPcme>ye!Y!{>(J={LG8+IJW`I*>tYGH&Z{Of7S6 zZNm%$H;|#t5r+9^VLBYk(mfM~uD^7s?N6*A+HIUv;E75DldWKm@We3XQ}N1u_pTD4 zB|XSA?TDu*gVMhzj|Bkxe`i^Fr8viypNOe;(dm8RSYp0S+m)7YIK9V`OG;dDUy%cI z0Cux=g3J(|Qd*PLNA<0{DhYD$z{tpC0p3#0mROIhE~JRNKZ7M$;V*)Pb)m*K6EU=oD!(oP}qc8Oh1w zdu&MG<^E2}ld*yb?vCr143w6{4f|#23TZHy~l>hHh* z{YXL-G?92>79Z3f_Gyc$#-jd zA@d|_Ea)RZfu2(q8+9y;&gU^TB2$-bQ?o|tJT>Ekt%-?Szbf+M=|Nxtf#0VGMgVa; z{_nVAgS&pjHo`_=9Dcrf;utP0I1x$KJ5J<@0wHc5Au;R>nYyWYnL)S^2wpRD|zo?f_cf&Cag43y*?YhAGL?UK5P?Ch_+7WH{$V;|ID zMBQJ*F3aR;gTeF`-aDdx>p|~3=2OI|W0W}c&IF31O~uqbiYw%l@r->qimR0pTh)2q zepA9x`X2M(F(4EkQHs(3c?t-sWo-;cNhZ9c9Vw4ZD}`(~i#;Ki+< z2u^PwBKLGn&dSmzMF*d+%ffrz_5SOX_|HGZeRmTvq`eWF0wDkdc%57hjoG=VW?IDg$)YZK2Oum3Frxpl1qMr_*LbNt3mOF_3u7i#Nt$MF%Jv z^F2wRZp(^<1f<&w=uT`)t=()Ij+ZwlMMP%bW;_tlV|?&ozks>s1-y`T1R^xAkS?Dk z>n=QulDaRw1v$o|Cn;>wvr~R^K|{$Z67r0`9VQIL@L1Gp z51uadsC@SA z{|<^eAta@iLjF>EVkqFWAom&2Y;+0HPe){rP|&mE!v&v!`1WD7l%Ua|;-HdC(Cd)A zl8}N;`pc1*;Xfr?&B9G^9lg~ zc5ZBpqDjwTK>UA5Qtrci)tlKyYni}k$^kv`=R8@u6}}lCWe~p8=cENJme!3!&VNp! z_r*S0DayZD4QyV1X~v$DXcWk*hWrkJX608Ow~Bj%$te1%>+<19_KYH#{Khn5eh!u&*$vTJ-zk>99H`{Tr!@WJuV4%)Av!wdq`9rj8!1oKXT;xlbWXdHB&N}W`bm;r4& zS+9p`eqO!3@}G9;&XP`cX09u@+^PKq)%E^AHDhwfy35*}eL<^q2L^Ku2K5AS`A6K`3K0 zSaw95`hE-y$Go5V+Z#)i2%=oF9~^ZSBVMQlAa@J3sn1Id?-N-JUnlKE;(ti+kAL}d z>1nrRjlD5~i^0Jc1u?xws0a85KrpIO0ML~1Y5eDyTz>37(x)>{P#-h>ILK=H3LkC< zeZBbKL;Pi%?5^`2d6*>gP%;gOzUrtv+1JtS?#nf{q4laqD0n{7D(Y`|B@W2=w>2bLKMfFr}Dt0sF!aKb-oP z#Tv-hsbFNm?Ad{4DUU+~k^FysK2?;l#>rtLV_IcDm|@U$i62PW$z~%P1G8nI0|==` zy5v<$2?SA_#Su%QO66Y91PJW86zi$&wGWdiyQGlc1L zBgGw&@SytMz2~F->H5}#qUQNLZgZ@=8JP>n(@9iA!-3fx@O?%R8f@`O7JqJoEXUqI zG{KJB6EX_(c~cj;QV}@I>e<^^@&G5@n%~v9sK5TrQ~WNpR25qO%G2mt`ds!_R%86a zST;L$VSFQNYYhG6bQ@9yZtg>B*^EhZ+ubJ4whDeTo!92W zDlpIobfaRqT?ZiOz&0p=XF$Q3fnL={01^_!vlE(K2@7GN;sNCwuLU$-9yDP7-N}gr zQ2E77M&>60#`#pzqYUpETO8vNTL6#$V4R_4DCDyeo1*s+d|_6oDp$TB*|oy{zO_~xEH z;8ie{`$WfD(5k+^%1Vw6f1etYjTyHV)3A)LI?~u^iZof|FqGh}VkqCfL1{E=)&SPs z)O)(td*7LTK-_I18^@5-5qoGD+)}@D%^IG~6uAr#v_`RU)xCV_IB_#ya_=RJ^1Hc= ze;Jgp?-JF#J<*Dt{N_5}@dlZt^A{)$Rrw6tqnxlQ%Q`5)86-YA)q{&f^te63tL8jP zj>2_gX5m;5A6euC+1&Ok8n?c@Sz3A-z5hOY%|gRrjM?uPiUCFm?if_4 zo6lVYImHg7KSoL*PB~JW|NTILWZnNFegEoqrRKn&axVt3=8u;$93CD$kmCNcHH^XJ zRb5e+kRQBw(h}-N7(oyJhzK#855w)PpyX-4AVCoUe>~D44Lhw(Ifnv!*H~XzS*}!19T)Wc2ZnI*NE)V7qt z?VIe8U?FO28)I=gx2R%a0a)(PvrziEfN_7EC%Q7smKRe7h?0j*WS4W!+6*K6O`D7R zM?id%P8QUW_d&MT9%I6DfZ-w*jM2n)za)k#valmeP;bA?M=n&0nWS3gSmOAcBD*A` z3_>eL$;!1~`QMlk5l%D%+Z{|76N80av&%xS%`t{k6df85E<9JqnME?QsFlUa=jZ>* zAq+TxL;RR%&j(b%;}*K2Z)og>c==yow`@MCc;Br?x$*(W-UY5oXnh4FryRVfQP04L zVpO%uc1ut@3|AFcgbA~b>^V)Vg7S{sGF=HipE*ClhUPOU$#_;ap2RF|{G2RBSH>D& zwv9{6L!XuTzjeABz}pz?CC(6?FnMjmInU3;z7&W+VKRD@K#X+jeq$P}YqpRLN~DQ zY<*~$U|P{0>bb}+s4N6IdU(80rS%ynoaI#*TS@KYM zQg{jXiP)r8h@6aDXX|YBkJS&iunKZT&I_{|7x;HvleD9Vtt9;_0ysLxee?>b+~D#Htj;;trz=dKNYf|34KB_Wl;X?cC}>>J27i zM4TVF*~p&G`bMml-Y{S|2DDTH-CFrh=hZUIk}V0BJSQuaUi(d=AtpJghgcJD46H1g z$h4BovTL^OhhB49XH6(c&hjb*& z=xmzZRU>TG*9lHNM*8_?Q}SZ+!44ylt4)ALr zEh{>WWQ`ik$rVyjB}AMO`2~N)TtprWV8l6vE8LqG_lbRZ_q?xAY77lnTI;OSajFAE z!`J!WHKLx%WbBo-MLI3r5&*Nhw#?Bt>%F6v_PNHci&)fc?q~cce;{d$-wsyB{dK!5 zmgjW7y@Z(O)~TYUzqBKw;MJ%z{iBRK;;$FXw8qJN4$(6*2}JDl!Tl*C3}60~1sE56 z%9wp@mm8NqC81}Pi=VOz5z8FrOh-B0aSn5$ogLv6Cp*LH?BgiMILnC+bGic_+!;=n z;+JA=)?lrle?xZ2gfmb6^ke=gvTB_p6PrNwbC-HB#g6q^opqsV)6ssg_ed^fDo9ENBHU_Vn-K~!D3 zcn66e422&Xwt6RT1MYV_faCi7HW5Y1oE4%7HVz1ev_8GNar0z!DsF(my(Hdk;chBAgbrxBL% zUi`izyPS=|e=iEX#mFR3ep> zq^%y8t;_yEMc2FN4FBR%Y3!FNXX#Lm z6%cBv`*#l1W7SQ>M!$Bz4llizkc+J044`AwpU+ z41yA~{T{Cy#%3Lgi;LV&ok1uH60IL&L0}YOCj*2KU=n_FVJcqn72oh3KkyR-!Y{B) z#ZwxG&7ui}&U6k9U_fXX6GPLO6Pm}K&^}IzSG$(LJ3fK&8DD7VD}FtE1i%Nysf&_z zPe(y}(>ERj?Y-=~0BG;GxsHSOaf@UaG$a6cJO}`Rzs+7Se9{TaKmY*F2tZL=QbX1- z03WCbV$#RGsPBs>l)(=wQb|O^h@JqD$K7XD1xj1UHLmZ4&|5WHi74DSI#B_gZPE&~ z9JNx*Mhn!*EJ_hFVWNg4L1ItWvbi?{^5_qUy`RSp*M==2R00)6Rz&2n5Py?(076bEu zSwJyR0OSA@fn*>KhyX?cLx6rjPvB1A4xk;-5@-g*a+T68f5|WMT}-}+Q@gp_`?kuR zT+Epq%Ym$ADKi<*X!_HYmei#>suU(SvZRHVq|ibPCb20Vb5fHSEyifkCqR110LkK? z_#r-tH-6UL{mi$0)#rW6N4(Dmyx=L^@?{=&uRGjitt(yX0?RFRs#DA~#rWPcP!x@( zVKiViZ^!o}yEweNchriS&$d~B|0t5b$zL7)Kwr@(PkLWBbvehVgPz#hp>*j`zG$1~ zWQeMxd*~qTp>4A@NE4YVR2*VQ^JrGHSOUtSiL;S~6T+Wl?d}~7p?<{kaDJm$nY@hJ zQOk*DB3qltO}`?v1!`86zR%nramEhh*(xydx>)ZW3nAEx9+u(Nx3@YOv7f_ zIH@s1Zr`%un&MAKfUW}dsSVe2ONu}30Ii4f6LC2Zx`}*%ID^V(QF%M%j~P>MBIiX6 zaXE2`F@|*y)CXyy#Lpmre7&f{NWAnm`S;zHPE6|bRYc{z(P};SLNKZ_DZ;G~Cw>Je z)NAgMpslp)w@dozj_!BlW=0?(g{6-Cqu$;MAKvTU*tTjK`+IQvXq+Q^(0*&iyE4*-57+!-=G`Qri53InGvoXJfNw`WNII zxsf^&D^JubzLg4N?UjSm_-?}s-~F0I!aK2rgt^lno#M0efEDh zR%$EJTjujbGhB`;VoEEBIN?8bN6MX(|+lx}RS@ zRR0>X%4e_)fa0&HilBipF(#C#u7lCZT7#>%QF@c>bZr1hjK z9iB`oqAYf#rKa!DuC_O@wu#7)7Z5P0qxLyQJ>5`R`I#)1N7vS;22*GJa}*H_mUz;(m<$a%+k+quW81NK`mW|Us$!|(fcmme`b z=M{wh#gdnqe&W^8cma)Sx>&Wvc1ht;e9rop#sRJt)`~Bs#0B1t|}`nDK08h7UbtCa&zR_S(&m7sYINfCQ20w_&jb( zGKZbSVlwD7DkXtTA`=L(X?#XZTtnvg|qfqXo@9a zt&F;$gsKRZ@tDd*Qo(nU$?N|!4}@i z2&Q7Q{LU9&)>y^5jne%Z!a1(KV=lY+{4|YvJJFD3)z)JYBn^Vu;59c9CMaZ~r*3#( z(8iyxZ`Ff_Es`8>H2btX?zLMIM|F}{{H>eNm!WLu5;aGdm;c68%Zf-NLP z2MzD3xQeH7Eu-1UMQS=Ze@*V3I<&L`PdxWXOgKkn$X? zJ8yS>!U0@fBlHwuKas&jjmzHln<>IHNkqi=`35o2F6j#E%{O^;P`0gqEJ+6w$t|_< z;Oc=k(K;QOW=?iqT(x-7t&YaJGa$L79GDRb{uCiYMqQ&hwS3w}1q0U`8?DJ7m2Ty! zD7AVIQakE{Q+LJ54I2g8r57zo2k38Z0H`^@YANEP#8efX8wCVQ!B+h%Tqj+(95)cN zQ(6K5ot4H!KtOO%x7m1;wIEL5UbZ4w-Yk42aYmR57M8q{MTIylr*2^?SB36sVXeuA za_Z1_yHP8^3A+zm{{VPz&67w1zfYua#ipr4*~&r3H9MlgRcjMq%weRTbP8fwH`Ej@ zzgqwtNa9%8OTJkiSRc0^YKiuYCeTlydg1UlyFcF1tvD6|x?bCSMp;$@gR->0m5_ME zb+1~`??N|}u%swisKd-T8ey>;i+~d7In)`joY3HNxq0Iu5f%Z`_jTl-99>oO)t&GH z13kbTq)QEu5WkcYEE--m?eYUU&F?@U`^zYLB>h4z7C4dwMrOetS{)HfOPPJVt?Jml0_@t8!oB%v>cUD>p}NZD-+?dh!HK{q zipP4K_h5v+bX)P_&D>&~VC&-Y)D*d2{-xe5MIB;GJrJ(xs;XE=1kMR4;DZg(KAZq* zC=|kz-T4t=vpc}BCg;>rD?`t3(jXpuPt&8FF+#9+m?&>?6NatL+}`Sa4_{FZChv>X zQloG*SB?}lIx1ih>Xssi0RTsC0kldmFA!2`{CwbvZPcZ3+d4OT)FIC+L(C4c}eG9@$ z{ReT1ek=1M^uG@$L_P1kW|Lj}TM3I7Pr}{uf?h=MB#XV-P)~`BD%gOIE+s`~*zq^t z%UCt?hLa5Wil(LGoU(`Nq2ALNM~xgu;L;hB?|I;CRsA>lEDV5l_a|>ALgZJr&evE3 z%IFflRQqqbP>L3MQRV(LV)OhcfGg#0imYHjkOx6k+-sGWxscX&x?Gra#0Af63N8`I~@q>QuS0$Y%%56%*{kpRE| zvkFYdzgEuZ1t0iB=kahHmxgdiA&vgiLcY}^Uw=7S7YIKf^bkHJSFgK(0s$&#m{XR* z5ET?wMTwyDGfRX`#fwbx90JX0J2&_R*5Y4^uO`A&b8K@L$C9rBg=3M5BBC?d=NoWqaCL&D}pC04fNrmLc0sk%OMZ;Slrf@ynU zE98PcU!spM?C+vxxr2P)lKJNK9toxD#}fs5gx#UA1H!xQ4AO zvupp~n}z%x7ywUT03Zj)w zENd)9qb4dM}D^ha0<% z1S;9K`zY0p$04^RYA>E3YhL+A?K{H`&#UQ;rzLx!PSa0=cGizO{~4WrzETxgL`^RK z^(}2v!)a2(Yg*K)*Q3@WVL+6-F~M~|b&bMrc~J4%zKBYelpNs~*344Y?uq_J+!GAa z)vQ>_T_3fY)XwpQDPRMk@K9CuUZe`M?wPfoq)Mt{Dp(=6OyHfzQlem(Z#+Ec1fCwS zTCnU48;OEZ3 z(}uG8?c0sZ$<3^0$U~NA*k)$*FJ+b0vlh4Y4O6xWpK|vm*oPj=5#ejwInVnhR_#?% z;0H$&b#~~Ib&4RkT4w|3X1%6&Een}n_j&LuH=sxFCH)M_#=`Stnwy)KM@d}C5aDge zydI~85h(l&G!D9oj4=Qwo}$eoYOp0e;lZ-Qk)&a6Le;{Sw!0`jf&H3P?ZC4=T97;w*&4wf=N37iGlDp2Lu zELk#csrFi%F7Z#&2!rK2L;M{+jNcMUC zomCs5H#qB{3&)jkS(33$a{8CO#FsVA=m6uzqVU}-xlMV>cOGqUzOcJ4`mZan%1RlD z)POugGtqMX64J}S55ER}OWLgM9JPZ-%*ag(>dl~tr>Q=l3wh1O1oCVF2!1ghg?b2?;P)D;gR<8s_5_&AC`<;B27acdaya+~JikB7Q)PdyqLfJ3WE&i`Hsqm(~?_GxK_mh{5< z6IR;r#Z+X=QDbephmK%d1I`|E{euj?nUx*k z3FAg`H2F_j{)P_xmAPG(8mtkYphGhJV#Dvi=k`E=xoa4dNm<@+`+7%*Ay(4sTJVy0Amn#OdW9sqvBYVgR+L6U4%iy+xfa6Wrf|O89xBam0M~&oYStj z){;5I8&n;AYm!Gt_Bf_kC){erm%&IpxP>~=$1sbS)bPPgf~Nqh6$CSMj0qk;Q8Io} ztUY<*;B%hH4eLH+6okSp&o&RZ+~-LqjBbmJy7iL}-2sM+l3cOI2swLiS*faw_ncv0 zw*@bpb+K>a!#&qjeTzXQVelK!&+xv6so*>F+0NKi?Oa$wc5T z965{s#$agGTiY>NPt03|?-37l=0EC8GW z{;*(U(!Jo8jdeNHo9wsWji2TbA1{h9nnk{Oj`>SicMC?Jv+<4VrLA`JyxAd(Rn0W7{%u;GR~a>qUl_`bhv!=YNpoPgDsCQa>Fq!$6_RkK+e7d?sK z;3l-w2$Z^cRR=r3=GJ6%-CaIu^(a@hrBpx(_lwUANwF`xUQgU4@eLvbNA04B!#o{+ zz0y1Q?a?FsPeUF3Kk=K;`K`B@PMVsYCe6~B^x5et+H^=qTF~lRSM1FS(GU6Q!{s~s zetP(*<6B<|ouo6`)a(z=)K1v1>+)eDvpHQewNgXSH!84G_Gwe#TJcj71LE@Xz|vn` zoaF#z%Q`o2e@#|GUwctH{52yhSVa`4v>Heoy0;|k%4J99P>M!cv<=6TQE_&ge7Jc6 z7MWf}N~pl(RkNuwkq=kDZOrHa(}*~oo1|=a$Fa`qzwSYVRf7dpBa#xG6C%pYG-whL ztp!PoM}(EtZiuiwW5}p#_teVWQkB*f5o_kTW&>?$DsWsVgZ+%z%Q=ufkv_@!F{=ay zTF@52T0ov>?1meLry8f&e>coDTFAei-;NKPKp0%{6*g3lCD%FAcys#Wo*#Nl^cgsG zWMD8h5{Jdc1_z>J&3yH1JArHCJ8jptpq8I5huSMo9TeA$-PtdrefuP!-9E4|ad$a` z7I@>!)tGHfb@};Cy4Y>&mtrg$8-)^308GX~zUSo`bV+&50Zq2<$D8X~ zpxZ#)ypQFJtrhJBLj&+xP6OAEQ@Cr;E8vBU zd}_?w^nI7-w31YM;;FeXM>4-@q{gb&87I!Do)kqYqo~kUvf_Fl7F3$betD)F1Yl!Yj)fsB;V16=LTa!kC@x6Pq*`4C@ z;^n)-j-dyS|3pVIft1_K7Pv=qq18Ne zk@cC{Vtrl~881^46Tl>J5gDCH%<54%p&0Qx$lsiYePeHUyM1!ZygJC~76ISg-NUy5 z&Y3??r8Nfds*YyJ&b9OvJh@)dDqo>%_u;?)%GQm~FLt(0_DFl^G&O1&Z@r)l2Uewy zqxiNx@fd8(qGK$%U+-;?hZ_(EFuu};;<2=I-Zb9fhk^B>=ny(4bb=MCNq%Brt3~V5 zqD9V;i$d$ks~ye`J(pE4Lpg35HsqmS?T@SjtBh}_iqS8=A~cuo6PJ$SkZw|4X1SnH zK5yK%Wz)q(bKi_gQN)lJf8{!H`TCsuxuXN_x}&|)nX7asI*8rWZ%4Dml+0fRnd{a@ zt*pn+u@H6T>=a8gp+z^9(XObkIQ&{L{JYs0+Tlc(x=g*0bK;+T_kc5d`!x)F(Z1LQ zaIikK>||oyaQxHeLj@LZy64j7TpqE|=yojF z;AhFQ`uO__k!kq36`<@o{2aM&A$IwPbDIA<_-prdKR++a-~6&y=+~=#DC`kBYaI(_ znjU@!zMgL%-1Xo8CxQJ0o%JSsbuaD1>t%Z4k#DL;yZD}nZraY%fwGnVy6d(cK3HV& zr~X`etKIICEJylDz`Ff_t)%j26o78)94`uJxrfZns)I;dXFLBSnE8bBec+jVfU;>8 zpe$`nSut?T-(9jeKhzwBI`_kHL`iida^}tjY?%{@%||u%Taa8*$8as1Vuh27r;}?ysfYqCN z5Y#>P+|y5|SvFJW|ID74`6t_OA<=gFMK^udcds9M9`2{%Prf~px$RN+^vr|qjBQ6i zUt<5BdEA+0ZV8dBfi^w4#*a4CS3be-S&p0Y7IHeyGIzHeiQ?DgbscWQ|I_M#$o=G{ zc3-yaXJh59d$&%qXh&%1+JR3T?)vNe5TZF#8T$G>uXn-lc6 zh1r!OXD^+tn@LSvP#&-(v({YiuFb}4w``k!hTxj%C>j}YOmoX3+M-Wd7dkYDqHjSf z_Xn5knAYUWelF9NBs?o7ic)W*&67Io@!-Y0VioS~N92YK(3x%U2`~1!CQT)CA~>(D)d`=Bvh&MRGxYvY_km z-hJ-2Nj5t4X0?^+F2b}#d+nDU5r-B3o~vor7*cm(x4Lze0#yB5bV)NW`bfL!^~OhQ z1O3l$-08gwm00(@EK~n^=z{j2k7fGAepi#gCTk5iqM%nqJl3qkf7g+g!)}H&^kmmL zTZUNQ_z4sa`rY*+yT+GK{=qNSID6+o13=Z+ISd)U5KuLKv5iZe7tXodYi*)551KpbbtCf@Ll{5{ zYfnj{qnGmh_Vb4Gr)j6c2u<|4A$ne%%vSBKabjBS5~iqXY1=_BK0o-lr!zy-sk9%9 zriMhLQZQbuommD&vB+?kt#uyfgqCJsa=7P_gC2i+^0eRYWeaD)| zDXW@>Hp7I6L~%(g(s@|JgCm zcZz=eE<+%3Mr-l-2Kxb1hwOwp z7+JH(;4C&>n>yWCURR~+;KnU$kf1$IoAAp&^g5t}$2yJo!^iDVKg?QovccP;mNuSN zU$moG;lJUG!=70YY-ta!sJ^p$gP$AW{cXy%kz!3a7Fa8aEoI*&)ynCz?{{R_r(#V4 zZPRy@{JWSpZS@Ntv=X4QJMKCGo;a$qYY#XcbUftv(H#H?e)-4pcy}p?Uv7Lec%L)# zjcUdD&PS+NtZ%1D{o~Dgb2lt- z8Q`Tfo1oB5gbf*V^x|S1Y!!R){_xIGFxzwOX}(-p2dwCB>p2)-6hRwa1T9rmkuO@2T4JjOme!K(QS9 z0Tb8x=#Ucbiwjj30xQJx2YJx7TXCMnmJKc3IipmCI6HYdx7i z0wX#HRbfCauvB$6I@T+uG(rr?fasHGN~TPpyM>3)xO^$sYTuZ`itF+U_KjHPtzTAd-?y*rA+CX5zVgQnUFy|C zg<4b%xCO3s6gl}M2+ih znaHTzC^;@N^hT(Rm&O27d>H-3XqQx%)M5;yx7CT$Ux;>2bxtkBaC#vqwB5G4dU%6H zEJzI;8`5Y+X?cIVYZ||n-XwmcUD<)z z1X>G^PibkVqzOAH^cFrZR_{pQ<)?|{9G+M%l<*&!$4Ql2X4IdlcYF;xs{f@9@(5-k zWnbRYsceZW-5-^JL&Zq_@F>py=BOl1cXb{nEI&(0#!rt8TG@u(Ztqm5F*%vHHq*8V zWQ>xT?q!n3alH%;Zgh{8OOr_CVvM{bt3;McM}C^C3HMLw<3(;aOC*!cUYaL;~u3-rj zLTBWpn|QEM{!8WcuCyL>b4YbT^?HBomg~DV+LQ zYID2`(Cnuzp@O!~$}|Q$^OiAnn=pe>GTRe;I+DqzzF0G|QM(v5HjXwMLUmRib3@z| zSW{hY+0H>Yw_T5imOOQ?oDhwIV|GJCh7N@yV(rZKn`bVw1pIU3&!^XyynkK0)0_Cv zr^m-Rkra6I;6bI&5cs+0JZ;yWq4q7re*S%h$TIv=**K&h>hJ9MXk4f-{QbDUub0QU z+W!Na5zUP}+sjWCiN*p!YPygoOiNAZ?6PUXbjY4*o5d%B2tkr|B`IepB|X_?d1o_E z_TeC+uc)bjlG)7@rDbMct%E-ZBY9gNDCykAJ?3mJrsIev_*O94>-7Sw(Svp1krAxU zj#F9)q6~GF&+ubQ$Rpr)CE&_0+pq;6~Yhb)`SqA?s&Q6DPU^mIipJxr-#J@P#UC* z4jFcnq>hG_W_cv+!sll9MP`eKvB|ADIk~;h5)GRU8^<@R^W^m50PN0SH34=$L|ikT z3=@Z>%uABuhBu!y-d!XY$dkD#&GFQB`Gp;2ol|Cewgb|N^eE`T68oA36+5F{Y6yd$ z8sa5aiUpju4;0YE@e-q#wY$4sl&GKe4-`GVSKLV|a}tF9p#hgRtaE5)1GtQL+IeBP z$uC*TZU$~|kqo!Hi&HSW_xkx*SS~fGBG6633zD`roN0L3;rAd0dE0N-ZDh;?pJRyt zf*`(HY;YT42UPz(sT-lzLA2~rIWe_1nuxlpv9R#?OlkBeViqg#skKpf^raBjszir| zmD^QBp>yQy=u7UKQbfHb(qtE|bM``s4Ia2D3kwYMGfPq^Y$A6#lcIy-fd zg^%r;jVo{2ZQc~Ozh66i0%dT+|JJN6t%kxTkSTj_+b1Z2jOVItNM8Hh7Cj>;?^+VV zi)&N*!KKDYXQ!6f&wOUXWvTu#F|h!inZ$%=r3Ok8xF8eTiM1Jwxxx%&J#A(_gEhZl zYOZa>BG#{MY3_cG)d%wb1(u$+Yhk~xwRPW(TLRu*mM-j~`(f+b`T}W`n!t1kw%z7UepkY%OOR0u?TVZkRF(1ihR6~ z@#YsqkSoF~nng}ZW|Cr}Q)r1!03C)L6CTct|D&9J0xmL~5@R3t&L;BAOyrsA$g%0z zrN8~nBdFko1O`lmZamsI7E$V?@Oebvk9Mo{g~vVgj|{<~LrBr6JX(~K6`mFw9iAAA zCnrXSN7JJ19qv9#;4|@-Cb=^6IkI_DKwu!*J!*&8S{z#JQC5>;Yv+y`8T#=2vHsK8 z$msiLkMv(BN_edC*%{V2FNHZiH_aHgaDI0aj5RJQ$iSJw6xFPVE+E(BN?sJJOy5>3 zAT~4-`1~#=YrZxEb|kf9nqjvb#qkNic!YY3STV7*wA54@o9k$sbeGqim^4$D0Xr(_ zo@8p=Fw0%43kYca7EdhCAoa5ZvKEJ>BUS z@@g4S*$|TFO?<|tfM$TQ%a(dRpd@QwJR_o>G~$y|r(`ydpH^7?^zqS(x(!PWPGz3X z5TBss0Xe)<=W)ezm_&Gar(Aaag>kmUr~CQb-N(I;8GAlFBLH#)7h=MWOV=#Qop;`@ z?Cq5j^3yX?YA56BKQpi3K|j&`Ag7up+u$c9{5=le-6MG3d2^Z3}A$XLmd74&HeTJIzzY<#2%=6aMqHT0*rL9Op z5tTs7ZDI@m9dgT2MHC{oumzcSkKj^F!eo)Mx)l{g`n)VMK~_PuM+KMR2YusjxXq^C z?XTg^9)UG*o@9jj3mylvul5VOZhUU3qiv!K&~_$`R#9C`kmik51Oe6|7;sC$hzDdt z4$UmD>ejkfoos!Im#rP_->oASg7Dd@%`hb~+)sAENiL$;s>#Z{np}Pj%^itRQd?)P zWvzSBvh}Gopt<9`tQ2l`R4K*WI?k+-2D{uE~CQn$!4dHzeBAwKb@GNdoEmUAYk*k; zf6CACb7g+t*y}1*xw91kA-6)Q(d=M@QxoOpXx*#ETc5(QtAj=8Byhp0pGR>}>nn?D zedh+DF>u9ctW~07jgx^NNI`;#GpfCJC1wwORezrq!xu^VuUOy;E70I<62St|X^HM< z6&E+;B`e9w$@5m$eqm+XiguZ#hQtxsI*r(oH)sBLy1Cb0pxN=?spivjcvHuHGvV-S z@Na|KU(Ho}st?qM>KpZu>Qvrh&Ib1n18T0?Q+=R5RNttNRHyRxt*8j0A5AECeek2* z!%d4k;mO}sIgLG_W<61c@|Y!DX-xueP4U-F3F>6krl!y5gMm|@bA668K>X-T2X%5& z`uY~9v5M?)xiae4MbWK7REjPsNQrn{xLb8__r-M2fJ;r5UBTe6$ z&y5%gYK{HCxr&Kn$ewyn3lBQpT0%z*f?7deUB3WLM9XBr@eyk$;JOj(C18`r=6;#p zPc2q+Oc#Q#Q7{+FL5fcof*M1Z-JxLwV^CZFud=JujGR4eNT0u`J?}$3-@3W8*0WyD zYm7cx>AkiC<({b=okRiU@Bnv>G9svJR2^hbmH#7hXWum3_8~)CVGq&&;kiFO{dC@t z_bRnp%;!o_8T%?J>ys9_5*wh$?t&R`j;lympEYraFfZI`C1utJjjw>EWvSIz>v@{6 zREK7`f;e^47r2HLS+%GyViU1m_HN9oB4uA9K_xXYiZE8V+Q%rP;u>E8OUu%}fVEy- z!crZY(dUU%=>>ho!_B?ZyY^)L3`A>l6e5AmhPd?C%fqoUc+^VlC233Mjph?B7F{?Q zBtd|Xqn(SflrZi@4h}xi9YzdO*SiwNwnQk{?Ro3@e!turi@OeE-?}r(KLdn)OG_B* zLJ=Ff<>E5mk2^9;EyFys!Aze+Fl@*(x0`t^ez2=o60`@$otqfpF0`Z$@&wdiU_O`O zh@ps0i8p)^t!T(PfFno@>^F<$*?6l%R2eBnc1Hl5wq*3AB6x2Y_A_Mn_Ao~TixlWm zzMh!wD<7w1{t1c%9emorqb1fcY2%NNl9bhT2N?k8#jm&AW5IW$tq{EYD zbb9?Pv$wa3bcqbCCrc4yeP-s7_Xd$#tA&u^8JR@hJ=R&0gy8^yzM9KYITBGR3|iZ) zR=)MrvsFhjn+rvp$Z^3Csre$(M7^2lFEyM&Y}`Y_jTq`|T5?n|DH>p;9x5wbf=5i# z`jSO+3|yA%Z8W}|6 zLpOVp#Q*paX-qoazqpxA8-n!@w1zKd_LNmiqzs8w4kE+&HqpDT%X6?qW@Zi~8qR$d zo))H(_}U-8W|GD@Ip>nSM?*$qKp+nDjy^?u%-as=%SkTTBCLS3-JR>s7Rxiwh;+MH2K__`YGh>K=-CV9Q zr3Q)N^;NBOeH?>0fpg9bz9wfvJ3v5WIcyNeTpLa(DsY3NZ2op*fBvlTn>VW!m_^ao zYUz4_iU4c4jNSi)qv(I68Avq^qD|KsGly9(tAk>p(6G6V4gJhwvG{m%ylOvS8%3Mw zION;}39J-8ikQ&*2?VjQ_PTb9-gG8+-N*ndYb!IBVx~dWQIQgEv^uLYT~p9+8)I-0 zQ|_v0ryUtSwzR4=k%A>q zuyN01@QWeU11+qKfPcom^Q167TIPBjfc2p(g>B@VsRqz&wnDJK#DBk}-PxoxG1fB) z7_N_CSX&=^Uf8$dvJ@EEV!=ECM1be27wdk18N~5&nT7K$84fZhr3c0Q@L-gjwefzQ z;1k7H)i%E>VH*;w(LnFJrnR|#qM&JP9JHi98eBON&m?x%tkBZ7W&1VlUp}3V-R%|{ z=sz&~IHVc|$8x|UwghNWv`5#jz%WTcG~sW=WenqN9`(4RB`l?DUB!B+prbKh z$zq_$Q=G$NwA3_K-y3xy8GORPO=ndfaAYous?}ZA-6>Cj!hSEWyJ|6&^{8AV;{pSi zfwj&oEj+_b3~hAadMF5XyNI?RCs!*gI=9)F-gr{&#OlpDpWjY1-#)J`S$7pz%L+Og zYKto#s(2Fl5YAz{!W1(mj&t0<5#)K0S!-!K`+(*>*rHn93*{|Ly6?xQz}|1QqANf= z{z;pg8$SBFjz1iBx0O6I zI$cb2#W!SOJK1d2npdX-V>AMH-6#O?H-JMMP*yLPcm}2JZpqVu;`(KG*+=UDBj|I8V*xU z>fB|V_=^iU^4CaZ2a0DGfE(Al-;KwvAvOdRixXBP=hFlziNKiyNWFGwJ)7ODJbDhG zuSs{iHR?K?0Io**#Yb$1cwJO`wk2Ok@3OHlV;71+{V{?!vc&H_r|S=VB7C z1G}nVG3jIhrdKgTGW6e(c@#-iQWIMWKoBcLlSIA)HhuZuCCp`Sg(r^DdyS|Lm5pjs z_t;y}8)#%C~@USTa5QEXS67P)o2Oco49h;eDl&XoX>%uva$74S+%j0j-^c`l-2TP_ic#P1t@6fGIFZb>UTL`F#8U~kR=T`Qup7*+NKat8lvlvTbNL>d-W z-8JiQMG|gK!`!3ng52=i6e}BvMiOwrF3y38GdZr{K)=k@FkV@o+MQpZY4`Z#s zH)y9vX!@2f_y0gmBRqvj3WLQFsvCe3X;WVeWY)!~zfnV)Mf=*(x<$oAzl>GbSVL>w zCdlU(NgKJSMgMHvNlC|BhOVGbQU-3lbT^io`WrP%4w9z1 zNee(b0O%_&dCp;t^&RQDOdetE%$M$sSU)0|Rrjgx2<)j0?AdCy+5I{=#xhJqw~2;{ zGDfXQOK|T_waIz`wM%4yOCeTsQt;$)-IA#6dcxKgo{R9j>;wNII$}s9;c@qkBc3zI zYHznaKTHppLLZQSL0LzRi%CmI>}jB01}PMigVNyzu_8D-=$B8CwmIQ776AbizC$R; zM1m1SLFNHIbi8&Z5kCN%qPXCz8KV_EH5hnJCO5KT08wkV#}zmZicWqmD@AVwB8R@|8#eQB)Tq6G=oC z*oC5!?<$y|fZZN!Zg&k&$91Yc6(znSsNv*A6)hG@6-uEgcu$#vv8P-G84M{`OiCoB z9ST}6rI4j$`q@V+svJ}WHSL~Nbd+0>@qj8-B+X@dYak&MTV$9oA*~HoS@{Y`Kta=p2!p`YTH?{X2X^pdk!2q0olQs3ouu1c5(*+1>?b! z7jHgx@#V)~fIvZlg$NY}E?k62QKH3&6$b$c1q}lWCmtRF5eZoW3Mv}9L<~$UN!U1% zl`I7p51)WgDpArHEuCX}eNd-Ovk}wA18QosTHP6Ut(j_Y# zbRER5khtiw>#kaN%|}wV-Eh;Q3_qCao;&W6`RuDkSu$nIA(v|pg?xDmC>1GGti&g! zRLYc7t8mC(RbHo3wHjZ1urF~f+3$h7?t9>lZC0!~=&T)9oio~O$#>idN3&XdU*V*I;NR_G%nnuD@8@TU%a(r^4zvR&)P7b<1ie!;Up!$Rh-4_4%+Q!2(V1EWUPB znIe35(@~faWyK7=xV6g{?lq!LDXrZ_DP?h)Vt&MVhxu`rTq!I|%lPtd$%cKihe4K| z*xN2W0f!T4*aN^5+~5iB#U23n4GY5o@CJb3z%v3P1Ok8u4m@)p5E$Y2{l*1RdCl_Z zvUkp&UZbMO{IAf=QmS>?Dr@;FB2WKMAtQ3R06E;13$A4gEsI5Dk_^a5l?+kIv|UFN?cCI@yTWZx6Kr$%+c2aXbGd7+rL1$3*BRifJcqsNmb79nYiSyD z;W8E-EpZV+PpZ)pL5&(Eb`zqbk(oQ)VX_EfA`p(&+io{p!-d<9egtN9L$8R!x*PW? zt;IPxkDZ^GIoyXcL_C=OMNTK&o4&xWUp3tjo^k@o3X5cZ1$g!*qx6C{h{7vqJx$W% zMB$GBZU?A@7bH5rF-cmf40{OTTorF(>*8i!#xM{Y(_OM(v$Qc{hwQdz`w7aso&6oNM+uh zqxtTho%vC^lU~xZot9XncJ>EkwZ#x$Ywi~Yzd1e;CF4Id&T@*6)mCLc;^W91wh)X2XJy$Pke%(!beTO9g*^&< PU3zbBiqFQyt^oi5TvQ8C diff --git a/src/assets/i18n/de.json b/src/assets/i18n/de.json deleted file mode 100644 index bd16c0bd2..000000000 --- a/src/assets/i18n/de.json +++ /dev/null @@ -1,295 +0,0 @@ -{ - "general": { - "access_pol": "Zugriffsrichtlinie", - "ad_info": "Weitere Informationen", - "add_add_header": "Füge zusätzliche Kopfzeile hinzu", - "add_auth": "Authentifizierung hinzufügen", - "add_header": "Zusätzliche Kopfzeilen", - "add": "Hinzufügen", - "additional_properties": "Weitere Eigenschaften", - "asset": "Datenbestand", - "assets": "Datenbestände", - "auth_header": "Authentifizierungskopfzeile Name", - "auth_value": "Authentifizierungskopfzeile Wert", - "auth": "Authentifizierung", - "body": "Körper", - "cancel": "Abbrechen", - "close": "Schließen", - "con_def": "Vertragsdefinition", - "conditions": "Nutzungsbedingungen", - "confirm": "Bestätigen", - "cons": "Einschränkungen", - "consuming": "Eingehend", - "content_type": "Inhaltstyp", - "contract": "Vertragsabschluss", - "coverage": "Zeitlicher Geltungsbereich", - "create": "Erstellen", - "data_category": "Datenkategorie", - "data_model": "Datenmodell", - "data_subcategory": "Datenunterkategorie", - "data": "Datenbeispiel", - "delete": "Löschen", - "description": "Beschreibung", - "detail": "Details", - "details": "Zeige Details", - "direction": "Richtung", - "disable": "Deaktivieren", - "edit": "Bearbeiten", - "enable": "Aktivieren", - "endpoint_doc": "Endpunkt Dokumentation", - "endpoint": "Konnektor Endpunkt", - "error": "Fehler", - "files": "Referenzdateien", - "frequency": "Häufigkeit der Datenaktualisierung", - "geo_location": "Geo-Standort", - "geo_reference_method": "Georeferenz-Methode", - "header_name": "Kopfzeilen-Name", - "header_sec": "Kopfzeile mit Vault Passwort", - "header_val": "Kopfzeile mit Wert", - "header_value": "Kopfzeilen-Wert", - "hide": "Verberge", - "id": "Vertragsangebot ID", - "irr_pol": "Irreguläre Richtlinie", - "language": "Sprache", - "loading": "Lädt...", - "loading1": "Lädt", - "method_para": "Parametrisierung der Methode", - "method": "Methode", - "nuts": "NUTS-Standort", - "offer": "Vertragsangebot", - "oth_connector": "Gegenseite", - "params": "Abfrageparameter", - "path": "Pfad", - "pol": "Richtlinie", - "policies": "Richtlinien", - "policy": "Vertragsrichtlinien", - "providing": "Ausgehend", - "publisher": "Anbieter", - "refresh": "Aktualisieren", - "rem_auth": "Entferne Authentifizierung", - "remove": "Entfernen", - "show_data": "Zeige Datenbeispiel", - "show_files": "Zeige Referenzdateien", - "show": "Zeige", - "signed": "Abgeschlossen", - "sovereign": "Souverän", - "standard_license": "Standardlizenz", - "state": "Status", - "still_loading": "Lädt noch...", - "title": "Titel", - "total": "Total", - "transport_mode": "Transportmodus", - "type": "Typ", - "update": "Aktualisieren", - "updated": "Zuletzt aktualisiert", - "value": "Wert", - "vault_secret": "Vault-Passwort-Name", - "warn": "Warnung" - }, - "tooltip": { - "clipboard": "In die Zwischenablage kopieren", - "details": "Klicken Sie hier für Details", - "failed_details": "Klicken Sie hier für fehlgeschlagene Katalogdetails", - "negotiate": "Sie können keine Verträge mit Ihrem eigenen Konnektor aushandeln." - }, - "notification": { - "asset": "Datei erfolgreich gespeichert.", - "compl_negotiation": "Vertragsverhandlungen abgeschlossen!", - "failed_asset": "Fehlgeschlagene Speichervorgang!", - "failed_create_policy": "Fehlgeschlagene Richtlinie", - "failed_refresh": "Aktualisierung der Datenbestände fehlgeschlagen!", - "failed_transfer_detail_fetch": "Datei-Details konnten nicht abgerufen werden!", - "negotiation": "Gescheiterte Vertragsverhandlungen.", - "starting_neg": "Scheitern bei der Aufnahme von Verhandlungen.", - "succ_pol": "Erfolgreich erstellte Richtlinie." - }, - "component_library": { - "accept_licence": "Hiermit erkläre ich mich damit einverstanden, dass ich durch Drücken der Schaltfläche \"Bestätigen\" die mit dem Angebot des Anbieters verbundenen Lizenzbedingungen, Richtlinien und zusätzlichen Nutzungsbedingungen, einschließlich aller Urheberrechtshinweise, akzeptiere.", - "agree": "Ich stimme den Allgemeinen Geschäftsbedingungen zu.", - "at": "Erstellt am", - "connector_id": "Konnector ID", - "content_type": "Inhaltstyp", - "data_offer": "Allgemeine Geschäftsbedingungen für das Datenangebot", - "delete_one": "Bitte bestätigen Sie, dass Sie löschen möchten", - "delete_title": "Bestätigung der Löschung", - "delete_two": ". Diese Aktion kann nicht rückgängig gemacht werden.", - "http_param": "HTTP-Datenquellen-Parametrisierung", - "json_ld": "Zeige JSON-LD", - "json": "Bereinigtes JSON", - "negotiate": "Verhandeln", - "negotiating": "Verhandeln...", - "no_description": "Keine Beschreibung", - "no_transfer": "Kein Übertragungsprozess bisher gestartet.", - "organization": "Organisation", - "oth_connector": "Gegenpart", - "participant_id": "Teilnehmer ID", - "policy_details": "Zeige Richtlinien Details", - "show_less": "Zeige weniger", - "show_more": "Zeige mehr", - "succ_negotiating": "Erfolgreich verhandelt", - "t_history": "Übertragungshistorie", - "transfer": "Übertragung", - "up_at": "Aktualisiert am" - }, - "services": { - "curator_org": "Name der Kurator Organisation", - "curator_url": "Kurator-URL", - "env_version": "Umgebungs Version", - "failed_loading": "Fehler beim Laden von Verbindungsinformationen", - "main_url": "URL betreuende Organisation", - "maintainer": "Name der betreuenden Organisation" - }, - "asset_page": { - "add_file": "Referenzdatei hinzufügen", - "add_loc": "Füge Ort hinzu", - "add_sample": "Füge Beispieldaten hinzu", - "asset_id": "Datenbestand-ID", - "create_asset": " Erstelle neuen Datenbestand", - "create_assets": "Erstelle Datenbestände", - "datasource_config": "Benutzerdefinierte Datenquellenkonfiguration (JSON)", - "datasource_info": "Datenquellen Information", - "datasource": "Datenquelle", - "default_query": "Wenn die Parametrisierung von Abfrageparametern aktiviert ist, werden die Standardabfrageparameter und die vom Verbraucher bereitgestellten Abfrageparameter zusammengeführt.", - "descrip": "Die Beschreibung nutzt", - "edit_asset": "Bearbeite Datenbestand", - "file_des": "Beschreibung der Referenzdateien", - "http_subpath": "Die konsumierende Seite muss einen benutzerdefinierten HTTP-Unterpfad bereitstellen, bei dem die Methodenparametrisierung aktiviert ist. Der benutzerdefinierte HTTP-Teilpfad wird an den Basispfad angehängt.", - "info_body": "Der Anfragekörper kann nur von der Verbraucherseite aus festgelegt werden, wenn die Parametrisierung aktiviert ist.", - "info_file": "Zusätzliche Informationen zu den Referenzdateien", - "information": "Generelle Informationen", - "instructions": "Zusätzliche, rechtlich nicht relevante Nutzungshinweise (z. B. wie der Datensatz zu zitieren ist)", - "keywords": "Passwort", - "legal_name": "Rechtlicher Name des Dateninhabers", - "no_assets": "Keine Datenbestände mit gegebenem Filter gefunden.", - "path_para": "Pfadparametrisierung", - "provide": "Die konsumierende Seite muss eine benutzerdefinierte HTTP-Methode mit aktivierter Methodenparametrisierung bereitstellen.", - "query_name": "Abfrage Parametername", - "query_para": "Abfrageparameter", - "query_parameter": " Parametrisierung von Abfrageparametern", - "request_body": "Anfragekörper", - "request_para": "Parametrisierung des Anfragekörpers", - "search_assets": "Durchsuche Datenbestände" - }, - "catalog_browser_page": { - "con_endpoints": "Konnektor Endpunkte", - "contract": "Vertragsangebot", - "endpoint_catalogs": "Andere Kataloge für Verbindungs-Endpunkte", - "enter_endpoints": "Bitte geben Sie andere Connector-Endpunkte an, um Kataloge zu holen.", - "fetch": "Status abrufen", - "no_contract_offers": "Keine Vertragsangebote mit diesem Filter gefunden", - "search": "Katalogssuche", - "usage": "Bereits verwendet" - }, - "contract_agreement_page": { - "add_cus_query": "Benutzerdefinierten Abfrage-Parameter hinzufügen", - "con_agree": "Verbrauchen von Vertragsvereinbarungen", - "con_def": "Keine Vertragsdefinition mit gegebenem Filter gefunden.", - "create_def": "Vertragsdefinition erstellen", - "cus_datasink": "Benutzerdefinierte Datasenke-Konfiguration (JSON)", - "cus_meth": "Benutzerdefinierte Methode", - "cus_query": "Benutzerdefinierte Abfrage Parameter Name", - "cus_sub": "Benutzerdefinierter Unterpfad", - "cus_transfer": "Benutzerdefinierte Übertragungsprozess-Anforderung (JSON)", - "datasink": "Datasenke", - "http_fields": "Http-Datenquellenparametrisierung Felder", - "http_message": "Wenn das Datenangebot auf der Anbieterseite vom Typ HttpData ist und bestimmte Datenquellenfelder gesetzt sind, können bestimmte Teile der Anfrage an die Datenquelle von der Verbraucherseite aus angepasst werden und werden bei der Einleitung der Übertragung an den anderen Konnektor übergeben. Dadurch kann ein Asset mehr als nur eine Art von Daten enthalten, was zusätzliche Filterung oder sogar die gemeinsame Nutzung ganzer APIs mit mehreren Datensätzen über ein einziges Asset und einen einzigen Vertrag ermöglicht.", - "http_para": "Http-Datenquellen-Parametrisierung", - "ini_transfer": "Übertragung einleiten", - "json_hint": "JSON-LD Werte für edc:connectorId, edc:contractId, edc:connectorId und edc:connectorAddress werden überschrieben.", - "new_def": "Erstelle neue Vertragsdefinition", - "no_agree_found": "Keine Vertragsvereinbarungen mit gegebenem Filter gefunden.", - "no_agree": "Noch keine vertraglichen Vereinbarungen.", - "prov_agree": "Bereitstellung von Vertragsvereinbarungen", - "proxy_body": "Erfordert, dass Anfragekörper wahr ist.", - "proxy_method": "Erfordert, dass Anfragemethode wahr ist. ", - "proxy_path": "Erfordert, dass Anfragepfad wahr ist.", - "proxy_query": "Erfordert, dass Anfrageparameter wahr sind.", - "req_body": "Anfragekörper", - "req_cont": "Benutzerdefinierter Inhaltstyp für Anfragen", - "res_url": "Die resultierende URL sieht wie folgt aus", - "search_agree": "Suche nach Vertragsvereinbarungen...", - "search_def": "Suche Vertragsdefinition" - }, - "dashboard_page": { - "about_ui": "Über EDC UI", - "about": "Über EDC", - "add_prop": "Zusätzliche Eigenschaften", - "api_url": "Management API URL", - "catalog": "Datenkatalog", - "completed": "Abgeschlossen", - "con_agree": "Vertragliche Vereinbarungen", - "con_def": "Vertragsefinitions", - "conn_end": "Konnektor Endpunkte", - "conn_prop": "Konnektor Eigenschaften", - "conn_service": "Konnektor als Dienstleistung", - "contact": "Kontaktieren Sie uns", - "contracts": "Verträge", - "data_dashboard": "Daten Dashboard", - "descrip": "Geben Sie den folgenden Konnektor-Endpunkt frei, um anderen den Zugriff auf den Katalog Ihres EDC Konnektors zu ermöglichen. Dies ist vor allem bei der Verwendung von Datenangeboten mit eingeschränktem Konnektor nützlich, die in Brokern nicht angezeigt werden.", - "eclipse": "Eclipse-Datenraum-Komponenten", - "edc_conn": "EDC Konnektor", - "edition_edc": "Basisausgabe EDC", - "error": "Fehler", - "failed_dashboard": "Abruf von Dashboard-Seitendaten fehlgeschlagen", - "failed_env": "Abruf von Env und Jar letzten Commit Daten fehlgeschlagen", - "failed_offers": "DATENÜBERTRAGUNG FEHLGESCHLAGEN", - "failed_ui_build": "Abruf der Daten des letzten Baudatums der Benutzeroberfläche fehlgeschlagen", - "failed_ui": "Abruf der letzten UI Commit Daten fehlgeschlagen", - "inc_data": "Eingehende Daten", - "managed_edc": "Managed EDC", - "marketing_about_ui_assets_view_and_create": "Betrachten und erstellen Sie Datenbstände indem Sie auf", - "marketing_about_ui_catalog_negotiate": "Verhandeln Sie einen Vertrag für die gemeinsame Nutzung von Daten in Ihrem Datenraum unter", - "marketing_about_ui_catalog_view_offers": "Zeigen Sie den Datenbestands-Katalog an, der Ihnen in Ihrem Datenraum zur Verfügung steht, unter", - "marketing_about_ui_contract_definitions_view_and_create": "Veröffentlichen Sie ein neues Element in Ihrem Datenraum unter", - "marketing_about_ui_contracts_transfer": "Übertragen Sie ein Element in Ihren Datenraum indem Sie auf ", - "marketing_about_ui_contracts_view_existing": "Betrachten Sie ihre existierenden Verträge, indem Sie auf", - "marketing_about_ui_policies_view_and_create": "Betrachten und erstellen Sie Richtlinien und wenden Sie diese auf Datenbestände in Ihrem Datenraum an, indem Sie auf", - "marketing_about_ui_transfer_history_view": "Sehen Sie sich an, welche Datenbestände in Ihrem Datenraum übertragen wurden, indem Sie auf", - "marketing_about_ui": "Beispielhafte Anwendungsfälle, die Sie mit dieser Anwendung ausprobieren können, sind:", - "marketing_about": "Das Eclipse Dataspace Components Framework ermöglicht einen souveränen, organisationsübergreifenden Datenaustausch.", - "marketing_about2": "Es implementiert den internationalen Datenraumstandard (IDS) sowie die mit GAIA-X verbundenen relevanten Protokolle.", - "marketing_about3": "Der Aufbau ist so erweiterbar wie möglich gestaltet, um die Integration in verschiedene Datenökosysteme zu fördern.", - "marketing_ce_intro": "Um Datenräume wie Mobility Data Space oder Catena-X innerhalb weniger Minuten zu verbinden, betrachten Sie die verwaltete Lösung von", - "marketing_ce_intro2": "- den Connector-as-a-Service (CaaS), der auf Open-Source-Software basiert und mit wichtigen Unternehmensfunktionen angereichert ist.", - "marketing_mds_basic_intro": "Dieser EDC Konnektor auf der Abo-Ebene Basic wird von sovity bereitgestellt, um Ihre ersten Schritte im Mobility Data Space (MDS) zu ermöglichen.", - "marketing_mds_basic_intro2": "Für zusätzliche Funktionen und erweiterte Kapazitäten können Sie uns gerne kontaktieren.", - "no_transfer": "Keine ausgehenden Übertragungen", - "no_transfer2": "Keine eingehenden Übertragungen", - "num_transfer": "Anzahl der Übertragungsvorgänge", - "out_data": "Ausgehende Daten", - "page": "klicken.", - "pre_cat": "Vorkonfigurierte Kataloge", - "progress": "In Arbeit", - "provided": "Provided by", - "trans_pro": "Übertragungsvorgänge", - "transfer": "Übertragungshistorie", - "your_assets": "Deine Datenbestände", - "your_def": "Deine Vertragsdefinitionen", - "your_pol": "Deine Richtlinien" - }, - "policy_definition_page": { - "conn_res": "Anschluss mit vom Konnektor eingeschränkter Nutzung", - "create_pol": "Erstelle eine neue Richtlinie", - "create_policy": "Erstelle eine Richtlinie", - "date_range": "Datumsbereich", - "no_pol": "Keine Richtlinie mit gegebenem Filter gefunden.", - "search_pol": "Durchsuche Richtlinien", - "time_res": "Zeitlich begrenzter Zeitraum" - }, - "transfer_history_page": { - "counter_endpoint": "Gegenpart Konnektorendpunkt", - "counter_id": "Gegenpart Teilnehmer ID", - "no_trans": "Keine Übertragungshistorie gefunden.", - "subtitle": "Übertragungshistorie Details" - }, - "connector_ui": { - "assets": "Datenbestände", - "catalog": "Katalogssuche", - "contract": "Vertragsdefinition", - "contracts": "Verträge", - "dashboard": "Übersicht", - "logout": "Ausloggen", - "policies": "Richtlinien", - "transfer": "Übertragungshistorie" - } -} diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json deleted file mode 100644 index c699fbb19..000000000 --- a/src/assets/i18n/en.json +++ /dev/null @@ -1,480 +0,0 @@ -{ - "asset_detail_dialog.limit_exceeded_tooltip": "You have reached the maximum number of consuming contracts. Please terminate one of the existing contracts to negotiate a new one.", - "asset_detail_dialog.on_request_data_offer_description_html": "This data offer is not available for immediate consumption. However, the creator left an email address to contact them if interested.
Click Contact to email the data offer provider. Alternatively, you can also copy the contact email address from the Contact Information section above.", - "asset_detail_dialog.on_request_data_offer_title": "On Request Data Offer", - "asset_list_page.add_file": "Add reference file", - "asset_list_page.add_keyword": "Add keyword...", - "asset_list_page.add_loc": "Add location", - "asset_list_page.add_sample": "Add data sample", - "asset_list_page.asset_id": "Asset ID", - "asset_list_page.create_asset": " Create New Asset", - "asset_list_page.datasource_config": "Custom Datasource Config (JSON)", - "asset_list_page.datasource_info": "Datasource Information", - "asset_list_page.datasource": "Datasource", - "asset_list_page.default_query": "With query param parameterization enabled, the default query params and the query params provided by the consumer will be merged.", - "asset_list_page.descrip": "The description uses", - "asset_list_page.edit_asset": "Edit Asset", - "asset_list_page.file_des_hint1": "Additional information regarding the reference files.", - "asset_list_page.file_des_hint2": "Supports", - "asset_list_page.file_des": "Reference files description", - "asset_list_page.general_information_description": "Fill out general information about the asset.", - "asset_list_page.general_information": "General Information", - "asset_list_page.http_subpath": "The consuming side must provide a Custom HTTP Subpath with method parameterization is enabled. The Custom HTTP Subpath will be appended to the base path.", - "asset_list_page.info_body": "The request body can only be set from the consumer side, if parameterization is enabled.", - "asset_list_page.info_file": "Additional information regarding the reference files", - "asset_list_page.instructions": "Additional not legally relevant usage instructions (e.g. how to cite the dataset)", - "asset_list_page.keywords": "Keywords", - "asset_list_page.legal_name": "Legal name of the data owner", - "asset_list_page.method_para": "Method Parameterization", - "asset_list_page.my_asset": "My Asset", - "asset_list_page.name": "Title", - "asset_list_page.no_assets": "No assets found with given filter.", - "asset_list_page.page": "Asset Page", - "asset_list_page.path_para": "Path Parameterization", - "asset_list_page.provide": "The consuming side must provide a Custom HTTP Method with method parameterization enabled.", - "asset_list_page.query_name": "Query Param Name", - "asset_list_page.query_para_single": "Query Param", - "asset_list_page.query_para": "Query Params", - "asset_list_page.query_parameter": " Query Param Parameterization", - "asset_list_page.request_body": "Request Body", - "asset_list_page.request_para": "Request Body Parameterization", - "asset_list_page.search_assets": "Search assets", - "asset_list_page.title": "Assets", - "asset_list_page.version": "Version", - "catalog_browser_page.con_endpoints": "Connector Endpoints", - "catalog_browser_page.contract": "Contract Offer", - "catalog_browser_page.endpoint_catalogs": "Other Connector Endpoint Catalogs", - "catalog_browser_page.enter_endpoints": "Please enter other connector endpoints to fetch catalogs.", - "catalog_browser_page.fetch": "Fetch Status", - "catalog_browser_page.no_contract_offers": "No contract offers found with this filter", - "catalog_browser_page.page": "Catalog Browser", - "catalog_browser_page.search": "Search catalog", - "catalog_browser_page.title": "Catalog Browser", - "catalog_browser_page.usage": "Already using", - "component_library.accept_licence": "Hereby I agree that by pressing the 'Confirm' button, I accept the license\n terms, policies, and additional conditions for use, including any copyright\n notices, associated with the provider's offer.", - "component_library.agree": "I agree to the Data Offer Terms & Conditions", - "component_library.at": "Created At", - "component_library.connector_id_plural": "Connector IDs", - "component_library.connector_id": "Connector ID", - "component_library.content_type": "Content Type", - "component_library.data_offer": "Data Offer Terms & Conditions", - "component_library.delete_one": "Please confirm you want to delete", - "component_library.delete_title": "Deletion confirmation", - "component_library.delete_two": "This action cannot be undone.", - "component_library.http_param": "HTTP Data Source Parameterization", - "component_library.json_ld": "Show JSON-LD", - "component_library.json": "Cleaned JSON", - "component_library.negotiate": "Negotiate", - "component_library.negotiating": "Negotiating...", - "component_library.no_description": "No Description", - "component_library.no_transfer": "No transfer processes started yet.", - "component_library.organization": "Organization", - "component_library.oth_connector": "Other Connector", - "component_library.participant_id_plural": "Participant IDs", - "component_library.participant_id": "Participant ID", - "component_library.policy_details": "Show Policy Details", - "component_library.show_less": "Show less", - "component_library.show_more": "Show more", - "component_library.succ_negotiating": "Successfully Negotiated", - "component_library.t_history": "Transfer History", - "component_library.transfer": "Transfer", - "component_library.up_at": "Updated At", - "connector_ui.assets": "Assets", - "connector_ui.catalog": "Catalog Browser", - "connector_ui.contract": "Contract Definitions", - "connector_ui.contracts": "Contracts", - "connector_ui.dashboard": "Dashboard", - "connector_ui.logout": "Logout", - "connector_ui.policies": "Policies", - "connector_ui.transfer": "Transfer History", - "contract_agreement_page.active_contracts": "Active Contracts", - "contract_agreement_page.add_cus_query": "Add Custom Query Param", - "contract_agreement_page.all_contracts": "All Contracts", - "contract_agreement_page.con_agree": "Consuming Contract Agreements", - "contract_agreement_page.con_def": "No data offer found with given filter.", - "contract_agreement_page.create_def": "Publish Data Offer", - "contract_agreement_page.cus_datasink": "Custom Datasink Config (JSON)", - "contract_agreement_page.cus_meth": "Custom Method", - "contract_agreement_page.cus_query": "Custom Query Param Name", - "contract_agreement_page.cus_sub": "Custom Subpath", - "contract_agreement_page.cus_transfer": "Custom Transfer Process Request (JSON)", - "contract_agreement_page.datasink": "Datasink", - "contract_agreement_page.http_fields": "Http Datasource Parameterization Fields", - "contract_agreement_page.http_message": "When the data offer on the provider side is of the type HttpData and certain data source fields are set, certain parts of the request to the data source can be customized from the consumer side and will be passed to the other connector when initiating the transfer. This allows an asset to contain more than just one kind of data, allowing additional filtering or even sharing of entire APIs with multiple data sets via a single asset and a single contract.", - "contract_agreement_page.http_para": "Http Datasource Parameterization", - "contract_agreement_page.ini_transfer": "Initiate Transfer", - "contract_agreement_page.json_hint": "JSON-LD values for edc:connectorId, edc:contractId, edc:connectorId and edc:connectorAddress will be overridden.", - "contract_agreement_page.new_def": "Publish New Data Offer", - "contract_agreement_page.no_agree_found": "No contract agreements found with given filter.", - "contract_agreement_page.no_agree": "No contract agreements yet.", - "contract_agreement_page.page": "Contract Page", - "contract_agreement_page.prov_agree": "Providing Contract Agreements", - "contract_agreement_page.proxy_body": "Requires proxyBody to be true.", - "contract_agreement_page.proxy_method": "Requires proxyMethod to be true. ", - "contract_agreement_page.proxy_path": "Requires proxyPath to be true. ", - "contract_agreement_page.proxy_query": "Requires proxyQueryParams to be true", - "contract_agreement_page.req_body": "Custom Request Body", - "contract_agreement_page.req_cont": "Custom Request Body Content Type", - "contract_agreement_page.res_url": "The resulting URL will look like", - "contract_agreement_page.search_agree": "Search contract agreements...", - "contract_agreement_page.search_def": "Search data offer", - "contract_agreement_page.terminated_contracts": "Terminated Contracts", - "contract_agreement_page.title": "Contracts", - "contract_definition_page.page": "Data Offer Page", - "contract_definition_page.title": "Data Offers", - "create_asset.asset_id_tooltip": "Asset ID, used internally, is an auto-generated string in a URL-compatible format, combining the asset name and version with a urn:artifact: prefix. You can customize it if needed.", - "create_asset.content_type_hint": "Describes the content type of the data as a MIME type, see", - "create_asset.data_model_tooltip": "Model for data exchange, e.g. DATEX II, TPEG for traffic and travel information, etc.", - "create_asset.email_tooltip": "This email address will be offered to potential consumers for contacting you. This is done in place of having an actual data source connected.", - "create_asset.endpoint_documentation_tooltip": "URL to the technical documentation about the data to be received.", - "create_asset.prefered_email_subject_tooltip": "When potential customers reach out to you via email, you’ll receive messages with this subject line.", - "create_asset.prefered_email_subject": "Preferred E-Mail Subject", - "create_asset.standard_license_tooltip": "URL of the license under which the data is offered", - "create_asset.title_tooltip": "The main title of your asset. It will also be the title of the data offering displayed in the catalog.", - "create_asset.version_tooltip": "The version of your asset. Especially useful if you have iterations of the same asset.", - "create_data_offer_page.accept_placeholder": "Accept", - "create_data_offer_page.add_data_sample": "Add data sample", - "create_data_offer_page.add_location": "Add location", - "create_data_offer_page.add_reference_file": "Add reference file", - "create_data_offer_page.additional_headers": "Additional Headers", - "create_data_offer_page.asset_id_label": "Asset ID", - "create_data_offer_page.asset_id_tooltip": "Asset ID, used internally, is an auto-generated string in a URL-compatible format, combining the asset name and version with a urn:artifact: prefix. You can customize it if needed.", - "create_data_offer_page.asset_id": "Asset ID", - "create_data_offer_page.auth_header_name": "Auth Header Name", - "create_data_offer_page.auth_header_value": "Auth Header Value", - "create_data_offer_page.authorization_header_placeholder": "Authorization", - "create_data_offer_page.bearer_placeholder": "Bearer ...", - "create_data_offer_page.conditions_for_use_description_hint": "Additional not legally relevant usage instructions (e.g. how to cite the dataset). The field supports", - "create_data_offer_page.conditions_for_use_label": "Conditions for use", - "create_data_offer_page.conditions_for_use_placeholder": "Please cite the dataset as...", - "create_data_offer_page.contact_email_placeholder": "Contact E-Mail", - "create_data_offer_page.contact_email_tooltip": "This email address will be offered to potential consumers for contacting you. This is done in place of having an actual data source connected.", - "create_data_offer_page.contact_email": "Contact E-Mail", - "create_data_offer_page.content_type": "Content Type", - "create_data_offer_page.context_information_description": "Provide context information about the datasource", - "create_data_offer_page.custom_datasource_config_json_label": "Custom Datasource Config (JSON)", - "create_data_offer_page.custom_http_method_hint": "The consuming side must provide a Custom HTTP Method with method parameterization enabled.", - "create_data_offer_page.custom_http_subpath_hint": "The consuming side must provide a Custom HTTP Subpath with method parameterization is enabled. The Custom HTTP Subpath will be appended to the base path.", - "create_data_offer_page.data_category": "Data Category", - "create_data_offer_page.data_model_placeholder": "proprietary", - "create_data_offer_page.data_model_tooltip": "Model for data exchange, e.g. DATEX II, TPEG for traffic and travel information, etc.", - "create_data_offer_page.data_model": "Data Model", - "create_data_offer_page.data_offer_type": "Data offer type", - "create_data_offer_page.data_samples_tooltip": "URLs of Dataset samples if available", - "create_data_offer_page.data_samples": "Data samples", - "create_data_offer_page.data_subcategory": "Data Subcategory", - "create_data_offer_page.data_update_frequency_label": "Data update frequency", - "create_data_offer_page.data_update_frequency_placeholder": "every month", - "create_data_offer_page.data_update_frequency_tooltip": "How often is the dataset updated, e.g\t'Every 5 min.", - "create_data_offer_page.datasource_information": "Datasource Information", - "create_data_offer_page.datasource": "Datasource", - "create_data_offer_page.define_data_offer": "Define the type of your offer", - "create_data_offer_page.description_supports": "The description supports", - "create_data_offer_page.description_uses": "The description uses", - "create_data_offer_page.description": "Description", - "create_data_offer_page.documentation": "Documentation", - "create_data_offer_page.email_subject_placeholder": "Preferred E-Mail Subject", - "create_data_offer_page.email_subject_tooltip": "When potential customers reach out to you via email, you’ll receive messages with this subject line.", - "create_data_offer_page.email_subject": "Preferred E-Mail Subject", - "create_data_offer_page.end_date_inclusive": "End date (inclusive)", - "create_data_offer_page.endpoint_documentation_tooltip": "URL to the technical documentation about the data to be received.", - "create_data_offer_page.endpoint_documentation": "Endpoint Documentation", - "create_data_offer_page.general_information_description": "Fill out general information about the asset.", - "create_data_offer_page.general_information": "General Information", - "create_data_offer_page.geo_location_description": "Simple description of the relevant geolocation, e.g. Hamburg and vicinity.", - "create_data_offer_page.geo_location_label": "Geo location", - "create_data_offer_page.geo_location_tooltip": "Simple description of the relevant geolocation, e.g. Hamburg and vicinity.", - "create_data_offer_page.geo_reference_method": "Geo reference method", - "create_data_offer_page.geo_reference_placeholder": "Lat/Lon", - "create_data_offer_page.geo_reference_tooltip": "The method used for representing of geographical data, e.g GeoJSON, OpenLR, etc.", - "create_data_offer_page.header_name": "Header Name", - "create_data_offer_page.header_value": "Header Value", - "create_data_offer_page.header_with_value": "Header with Value", - "create_data_offer_page.header_with_vault_secret": "Header with Vault Secret", - "create_data_offer_page.header": "Header", - "create_data_offer_page.keywords": "Keywords", - "create_data_offer_page.language": "Language", - "create_data_offer_page.legal_information_description": "Provide legal information and define the conditions for use", - "create_data_offer_page.legal_information_title": "Legal Information", - "create_data_offer_page.location_time_description": "Fill out location and time information about the asset", - "create_data_offer_page.location_time_title": "Location / Time", - "create_data_offer_page.method_parameterization": "Method Parameterization", - "create_data_offer_page.method": "Method", - "create_data_offer_page.mobility_information_description": "Fill out the asset's mobility information", - "create_data_offer_page.mobility_information_my_title": "Mobility Information", - "create_data_offer_page.nuts_location": "NUTS location", - "create_data_offer_page.nuts_locations_label": "NUTS locations", - "create_data_offer_page.nuts_locations_tooltip": "NUTS codes are regional identifiers in Germany used for statistical and administrative purposes, covering states, districts, and municipalities. (e.g DE60)", - "create_data_offer_page.offer_type": "Offer Type", - "create_data_offer_page.on_request": "On Request (without data source)", - "create_data_offer_page.parameterization": "Parameterization", - "create_data_offer_page.path_parameterization": "Path Parameterization", - "create_data_offer_page.publish_asset_only_tooltip": "Create the asset but do not publish your data offer. You can do it later.", - "create_data_offer_page.publish_asset_only": "Create asset only (without data offer)", - "create_data_offer_page.publish_restricted_tooltip": "Your data offer is published with restrictions of your choice.", - "create_data_offer_page.publish_restricted": "Publish restricted", - "create_data_offer_page.publish_unrestricted_tooltip": "Your data offer is published and can be accessed by everyone.", - "create_data_offer_page.publish_unrestricted": "Publish unrestricted", - "create_data_offer_page.publisher_label": "Publisher", - "create_data_offer_page.publisher_tooltip": "URL of the original publisher of the data", - "create_data_offer_page.publisher": "Publisher", - "create_data_offer_page.publishing_description": "Publish data offer to other data space participants", - "create_data_offer_page.publishing_mode_label": "Publishing Mode", - "create_data_offer_page.publishing": "Publishing", - "create_data_offer_page.query_param_enabled_hint": "With query param parameterization enabled, the default query params and the query params provided by the consumer will be merged.", - "create_data_offer_page.query_param_name": "Query Param Name", - "create_data_offer_page.query_param_parametrization": "Query Param Parameterization", - "create_data_offer_page.query_param": "Query Param", - "create_data_offer_page.query_params": "Query Params", - "create_data_offer_page.readily_available": "Available (with data source)", - "create_data_offer_page.ref_files_description_placeholder": "# My Asset\\n\\nAt vero eos et accusam et justo duo dolores et ea rebum.\\n\\n## Details\\n\\nAt vero eos et accusam et justo duo dolores et ea **rebum**.", - "create_data_offer_page.reference_files_description_label": "Reference files description", - "create_data_offer_page.reference_files_description_title": "Reference files description", - "create_data_offer_page.reference_files_description": "Additional information regarding the reference files. Supports", - "create_data_offer_page.reference_files_tooltip": "URLs of Dataset schemas or other references", - "create_data_offer_page.reference_files": "Reference files", - "create_data_offer_page.request_body_hint": "The request body can only be set from the consumer side, if parameterization is enabled.", - "create_data_offer_page.request_body_parameterization": "Request Body Parameterization", - "create_data_offer_page.request_body": "Request Body", - "create_data_offer_page.show_advanced_fields": "Show Advanced Fields", - "create_data_offer_page.sovereign_label": "Sovereign", - "create_data_offer_page.sovereign_placeholder": "Data Owning Company GMBH", - "create_data_offer_page.sovereign_tooltip": "Legal name of the data owner", - "create_data_offer_page.standard_license_label": "Standard License", - "create_data_offer_page.standard_license_tooltip": "URL of the license under which the data is offered.", - "create_data_offer_page.start_date": "Start date", - "create_data_offer_page.temporal_coverage_hint": "Start and/or end date when the dataset is available for consumption. DD/MM/YYYY (optional) – DD/MM/YYYY (optional)", - "create_data_offer_page.temporal_coverage": "Temporal coverage", - "create_data_offer_page.title_label": "Title", - "create_data_offer_page.title_placeholder": "My Asset", - "create_data_offer_page.title_tooltip": "The main title of your asset. It will also be the title of the data offering displayed in the catalog.", - "create_data_offer_page.title": "Create Data Offer", - "create_data_offer_page.transport_mode": "Transport Mode", - "create_data_offer_page.type": "Type", - "create_data_offer_page.unchanged": "Keep the datasource unchanged.", - "create_data_offer_page.vault_secret_name": "Vault Secret Name", - "create_data_offer_page.version_tooltip": "The version of your asset. Especially useful if you have iterations of the same asset.", - "create_data_offer_page.version": "Version", - "create_policy_page.title": "Create Policy", - "dashboard_page.about_ui": "About EDC UI", - "dashboard_page.about": "About EDC", - "dashboard_page.add_prop": "Additional Properties", - "dashboard_page.api_url": "Management API URL", - "dashboard_page.catalog_browser": "Catalog Browser", - "dashboard_page.catalog": "Catalog Browser", - "dashboard_page.completed": "Completed", - "dashboard_page.con_agree": "Contract Agreements", - "dashboard_page.con_def": "Contract Definitions", - "dashboard_page.conn_end": "Connector Endpoint", - "dashboard_page.conn_prop": "Connector Properties", - "dashboard_page.conn_service": "Connector-as-a-Service", - "dashboard_page.contact_us": "Contact Us", - "dashboard_page.contact": "Contact", - "dashboard_page.contracts": "Contracts", - "dashboard_page.data_dashboard": "Data Dashboard", - "dashboard_page.descrip": "Share the following Connector Endpoint to let others access your EDC Connector's catalog. This is especially useful when using connector-restricted data offers which won't show up in brokers.", - "dashboard_page.eclipse": "Eclipse Dataspace Components", - "dashboard_page.edc_conn": "EDC Connector", - "dashboard_page.edition_edc": "Basic Edition EDC", - "dashboard_page.error": "Error", - "dashboard_page.failed_dashboard": "Failed fetching Dashboard Page Data", - "dashboard_page.failed_env": "Failed fetching Env and Jar Last Commit Data", - "dashboard_page.failed_offers": "Failed fetching data offers.", - "dashboard_page.failed_ui_build": "Failed fetching UI Last Build Date Data", - "dashboard_page.failed_ui": "Failed fetching UI Last Commit Data", - "dashboard_page.inc_data": "Incoming Data", - "dashboard_page.managed_edc": "Get Managed EDC", - "dashboard_page.marketing_about_ui_assets_view_and_create": "View and create assets using the {}", - "dashboard_page.marketing_about_ui_catalog_negotiate": "Negotiate a contract for data sharing in your Dataspace using the {}", - "dashboard_page.marketing_about_ui_catalog_view_offers": "View the asset catalog available to you in your Dataspace using the {}", - "dashboard_page.marketing_about_ui_contract_definitions_view_and_create": "Publish an asset into your Dataspace using the {}", - "dashboard_page.marketing_about_ui_contracts_transfer": "Transfer an asset in your Dataspace using the {}", - "dashboard_page.marketing_about_ui_contracts_view_existing": "View your existing contracts in the {}", - "dashboard_page.marketing_about_ui_policies_view_and_create": "View and create policies and apply these to assets in your Dataspace using the {}", - "dashboard_page.marketing_about_ui_transfer_history_view": "View which assets have been transferred in your Dataspace in the {}", - "dashboard_page.marketing_about_ui": "Example use cases, that you can try out with this application, are:", - "dashboard_page.marketing_about": "The Eclipse Dataspace Components framework facilitates sovereign, inter-organizational data exchange.", - "dashboard_page.marketing_about2": "It implements the International Data Spaces standard (IDS) as well as relevant protocols associated with GAIA-X.", - "dashboard_page.marketing_about3": "The framework is designed as extensible as possible to encourage integrations into various data ecosystems.", - "dashboard_page.marketing_ce_intro": "To join data spaces like Mobility Data Space or Catena-X within minutes, consider the managed solution by {}.", - "dashboard_page.marketing_ce_intro2": "- the Connector-as-a-Service (CaaS) based on open-source software enriched with key enterprise features.", - "dashboard_page.marketing_mds_basic_intro": "This EDC Connector on the subscription level Basic is provided by sovity to enable your first steps in the Mobility Data Space (MDS).", - "dashboard_page.marketing_mds_basic_intro2": "For additional features and advanced capacities, please feel free to contact us.", - "dashboard_page.no_transfer": "NO PROVIDING TRANSFER PROCESSES", - "dashboard_page.no_transfer2": "NO CONSUMING TRANSFER PROCESSES", - "dashboard_page.num_transfer": "Number of Transfer Processes", - "dashboard_page.out_data": "Outgoing Data", - "dashboard_page.page": "Dashboard Page", - "dashboard_page.pre_cat": "Preconfigured Catalogs", - "dashboard_page.progress": "In Progress", - "dashboard_page.provided": "Provided by", - "dashboard_page.title": "Dashboard", - "dashboard_page.trans_pro": "Transfer Processes", - "dashboard_page.transfer": "Transfer History", - "dashboard_page.your_assets": "Your Assets", - "dashboard_page.your_data_offers": "Your Data Offers", - "dashboard_page.your_def": "Your Contract Definitions", - "dashboard_page.your_pol": "Your Policies", - "edit_asset_page.title": "Edit Asset", - "general.accept": "Accept", - "general.access_pol": "Access Policy", - "general.ad_inf": "Advanced Information", - "general.ad_info": "Advanced Information", - "general.add_add_header": "Add Additional Header", - "general.add_auth": "Add Authentication", - "general.add_header": "Additional Headers", - "general.add": "Add", - "general.additional_properties": "Additional Properties", - "general.asset": "Asset", - "general.assets": "Assets", - "general.auth_header": "Auth Header Name", - "general.auth_value": "Auth Header Value", - "general.auth": "Authentication", - "general.body": "Body", - "general.cancel": "Cancel", - "general.close": "Close", - "general.combine": "Combine", - "general.con_def": "Data Offer", - "general.conditions": "Conditions For Use", - "general.confirm": "Confirm", - "general.cons": "Constraints", - "general.consuming": "Consuming", - "general.contact": "Contact", - "general.content_type": "Content Type", - "general.contract_offer": "Contract Offer", - "general.contract_policy": "Contract Policy", - "general.contract": "Contract Agreement", - "general.copy_to_clipboard_tooltip": "Copy to clipboard", - "general.coverage": "Temporal Coverage", - "general.create": "Create", - "general.data_category": "Data Category", - "general.data_model": "Data Model", - "general.data_subcategory": "Data Subcategory", - "general.data": "Data Samples", - "general.date": "Date", - "general.delete": "Delete", - "general.description": "Description", - "general.details": "Show Details", - "general.direction": "Direction", - "general.disable": "Disable", - "general.doc": "Documentation", - "general.edit": "Edit", - "general.enable": "Enable", - "general.end_date": "End date", - "general.endpoint_doc": "Endpoint Documentation", - "general.endpoint": "Connector Endpoint", - "general.error": "Error", - "general.files": "Reference Files", - "general.frequency": "Data Update Frequency", - "general.geo_location": "Geo Location", - "general.geo_reference_method_tooltip": "The method used for representing of geographical data, e.g GeoJSON, OpenLR, etc.", - "general.geo_reference_method": "Geo reference method", - "general.header_name": "Header Name", - "general.header_sec": "Header with Vault Secret", - "general.header_val": "Header with Value", - "general.header_value": "Header Value", - "general.hide": "Hide", - "general.id": "Contract Offer ID", - "general.irr_pol": "Irregular Policy", - "general.language": "Language", - "general.limit_reached": "You have reached the maximum number of consuming contracts. Please terminate one of the existing contracts to negotiate a new one.", - "general.loading": "Loading...", - "general.loading1": "Loading", - "general.method_para": "Method Parameterization", - "general.method": "Method", - "general.name": "Name", - "general.nuts": "NUTS Locations", - "general.operator": "Operator", - "general.oth_connector": "Other Connector", - "general.page": "Page", - "general.parametrization": "Parameterization", - "general.params": "Query Params", - "general.path": "Path", - "general.policies": "Policies", - "general.policy": "Policy", - "general.providing": "Providing", - "general.pub_asset_only_tooltip": "Create the asset but do not publish your data offer. You can do it later.", - "general.pub_asset_only": "Create asset only (without data offer)", - "general.pub_desc": "Publish data offer to other data space participants", - "general.pub_mode": "Publishing Mode", - "general.pub_restr_tooltip": "Your data offer is published with restrictions of your choice.", - "general.pub_restr": "Publish restricted", - "general.pub_unrestr_tooltip": "Your data offer is published and can be accessed by everyone.", - "general.pub_unrestr": "Publish unrestricted", - "general.publish": "Publish", - "general.publisher": "Publisher", - "general.publishing": "Publishing", - "general.refresh": "Refresh", - "general.rem_auth": "Remove Authentication", - "general.remove": "Remove", - "general.select_an_option": "Select an option", - "general.show_adv_fields": "Show Advanced Fields", - "general.show_data": "Show Data Samples", - "general.show_files": "Show Reference Files", - "general.show": "Show", - "general.signed": "Signed", - "general.sovereign": "Sovereign", - "general.standard_license": "Standard License", - "general.start_date": "Start date", - "general.state": "State", - "general.still_loading": "Still Loading...", - "general.tags": "Tags", - "general.terminate": "Terminate", - "general.terminated_by": "terminated by", - "general.title": "Title", - "general.total": "Total", - "general.transport_mode": "Transport Mode", - "general.type": "Type", - "general.update": "Update", - "general.updated": "Last updated", - "general.value": "Value", - "general.vault_secret": "Vault Secret Name", - "general.warn": "Warn", - "logout_page.title": "Logout", - "notification.asset": "Successfully saved asset.", - "notification.compl_negotiation": "Contract Negotiation complete!", - "notification.failed_asset": "Failed saving asset!", - "notification.failed_create_policy": "Failed creating Policy!", - "notification.failed_refresh": "Failed refreshing asset list!", - "notification.failed_transfer_detail_fetch": "Failed to fetch asset details!", - "notification.negotiation": "Failed negotiating contract.", - "notification.starting_neg": "Failure starting negotiation.", - "notification.succ_pol": "Successfully created policy.", - "policy_definition_page.conn_res": "Connector-Restricted-Usage", - "policy_definition_page.create_pol": "Create New Policy", - "policy_definition_page.create_policy": "Create Policy", - "policy_definition_page.date_range": "Date Range", - "policy_definition_page.expression": "Policy Expression", - "policy_definition_page.metadata": "Policy Metadata", - "policy_definition_page.no_pol": "No policy found with given filter.", - "policy_definition_page.page": "Policy Page", - "policy_definition_page.search_pol": "Search policies", - "policy_definition_page.time_res": "Time-Period-Restricted", - "policy_definition_page.title": "Policies", - "policy_expression.add_tooltip": "Conjunction of several expressions. Evaluates to true if and only if all child expressions are true", - "policy_expression.or_tooltip": "Disjunction of several expressions. Evaluates to true if and only if at least one child expression is true", - "policy_expression.participant_id_description": "Consumer's Participant ID, also called Connector ID, of the counter-party connector.", - "policy_expression.participant_id_hint": "Multiple values can be joined by comma", - "policy_expression.participant_id_title": "Consumer's Participant ID", - "policy_expression.time_restriction_description": "Time at which the policy is evaluated. This can be used to restrict the data offer to certain time periods", - "policy_expression.time_restriction_title": "Time Restriction", - "policy_expression.timespan_restriction_title": "Timespan Restriction", - "policy_expression.timespan_restriction_tooltip": "Timespan at which the policy is evaluated. This can be used to restrict the data offer to certain time periods", - "policy_expression.xone_tooltip": "XONE operation. Evaluates to true if and only if exactly one child expression is true", - "services.curator_org": "Curator Organization Name", - "services.curator_url": "Curator URL", - "services.env_version": "Environment Version", - "services.failed_loading": "Failed loading connector information", - "services.main_url": "Maintainer URL", - "services.maintainer": "Maintainer Organization Name", - "tooltip.clipboard": "Copy to clipboard", - "tooltip.details": "Click for details", - "tooltip.failed_details": "Click for failed catalog details", - "tooltip.negotiate": "Cannot negotiate contracts with your own connector.", - "transfer_history_page.counter_endpoint": "Counterparty Connector Endpoint", - "transfer_history_page.counter_id": "Counterparty Participant ID", - "transfer_history_page.no_trans": "No transfer history found.", - "transfer_history_page.page": "Transfer History Page", - "transfer_history_page.subtitle": "Transfer History Details", - "transfer_history_page.title": "Transfer History" -} diff --git a/src/assets/images/flags/de.svg b/src/assets/images/flags/de.svg deleted file mode 100644 index 442047028..000000000 --- a/src/assets/images/flags/de.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - Flag of Germany - - - - diff --git a/src/assets/images/flags/en.svg b/src/assets/images/flags/en.svg deleted file mode 100644 index c52d43125..000000000 --- a/src/assets/images/flags/en.svg +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/assets/images/mds_favicon.ico b/src/assets/images/mds_favicon.ico deleted file mode 100644 index 4642ce589c972e482d1cd6184bc3c93f2825a01b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32038 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 diff --git a/src/assets/images/mds_logo.svg b/src/assets/images/mds_logo.svg deleted file mode 100644 index 79ea4ad7f..000000000 --- a/src/assets/images/mds_logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/environments/edc-ui-environment.ts b/src/environments/edc-ui-environment.ts deleted file mode 100644 index 09d75a4ba..000000000 --- a/src/environments/edc-ui-environment.ts +++ /dev/null @@ -1,6 +0,0 @@ -/** - * We have multiple environment files that will replace environment.ts depending on active angular configuration. - */ -export interface EdcUiEnvironment { - production: boolean; -} diff --git a/src/environments/environment.prod.ts b/src/environments/environment.prod.ts deleted file mode 100644 index c99109fea..000000000 --- a/src/environments/environment.prod.ts +++ /dev/null @@ -1,5 +0,0 @@ -import {EdcUiEnvironment} from './edc-ui-environment'; - -export const environment: EdcUiEnvironment = { - production: true, -}; diff --git a/src/environments/environment.ts b/src/environments/environment.ts deleted file mode 100644 index bb42b3c31..000000000 --- a/src/environments/environment.ts +++ /dev/null @@ -1,19 +0,0 @@ -// This file can be replaced during build by using the `fileReplacements` array. -// `ng build` replaces `environment.ts` with `environment.prod.ts`. -// The list of file replacements can be found in `angular.json`. - -/* - * For easier debugging in development mode, you can import the following file - * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. - * - * This import should be commented out in production mode because it will have a negative impact - * on performance if an error is thrown. - */ -import 'zone.js/plugins/zone-error'; -import {EdcUiEnvironment} from './edc-ui-environment'; - -export const environment: EdcUiEnvironment = { - production: false, -}; - -// Included with Angular CLI. diff --git a/src/index.html b/src/index.html deleted file mode 100644 index f07329fee..000000000 --- a/src/index.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - EDC Demo - - - - - - - diff --git a/src/main.ts b/src/main.ts deleted file mode 100644 index 61a73957a..000000000 --- a/src/main.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {enableProdMode} from '@angular/core'; -import {platformBrowserDynamic} from '@angular/platform-browser-dynamic'; -import {AppModule} from './app/app.module'; -import {loadAppConfig} from './app/core/config/app-config-initializer'; -import {environment} from './environments/environment'; - -if (environment.production) { - enableProdMode(); -} - -// We fetch the config here, because we need the config before APP_INITIALIZER, -// because we want to decide our routes based on our config, and ROUTES needs -// to be provided before APP_INITIALIZER. -loadAppConfig() - .then(() => platformBrowserDynamic().bootstrapModule(AppModule)) - .catch((err) => console.error(err)); diff --git a/src/polyfills.ts b/src/polyfills.ts deleted file mode 100644 index cbe685175..000000000 --- a/src/polyfills.ts +++ /dev/null @@ -1,66 +0,0 @@ -/** - * This file includes polyfills needed by Angular and is loaded before the app. - * You can add your own extra polyfills to this file. - * - * This file is divided into 2 sections: - * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. - * 2. Application imports. Files imported after ZoneJS that should be loaded before your main - * file. - * - * The current setup is for so-called "evergreen" browsers; the last versions of browsers that - * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera), - * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile. - * - * Learn more in https://angular.io/guide/browser-support - */ - -/*************************************************************************************************** - * BROWSER POLYFILLS - */ - -/** - * IE11 requires the following for NgClass support on SVG elements - */ -// import 'classlist.js'; // Run `npm install --save classlist.js`. - -/** - * Web Animations `@angular/platform-browser/animations` - * Only required if AnimationBuilder is used within the application and using IE/Edge or Safari. - * Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0). - */ -// import 'web-animations-js'; // Run `npm install --save web-animations-js`. - -/** - * By default, zone.js will patch all possible macroTask and DomEvents - * user can disable parts of macroTask/DomEvents patch by setting following flags - * because those flags need to be set before `zone.js` being loaded, and webpack - * will put import in the top of bundle, so user need to create a separate file - * in this directory (for example: zone-flags.ts), and put the following flags - * into that file, and then add the following code before importing zone.js. - * import './zone-flags'; - * - * The flags allowed in zone-flags.ts are listed here. - * - * The following flags will work for all browsers. - * - * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame - * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick - * (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames - * - * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js - * with the following flag, it will bypass `zone.js` patch for IE/Edge - * - * (window as any).__Zone_enable_cross_context_check = true; - * - */ - -/*************************************************************************************************** - * Zone JS is required by default for Angular itself. - */ -import 'zone.js'; - -// Included with Angular CLI. - -/*************************************************************************************************** - * APPLICATION IMPORTS - */ diff --git a/src/styles.scss b/src/styles.scss deleted file mode 100644 index 464185a7e..000000000 --- a/src/styles.scss +++ /dev/null @@ -1,320 +0,0 @@ -@forward 'theme'; -@forward 'tailwind'; - -html, -body { - height: 100%; -} - -body { - margin: 0; -} - -.snackbar-info-style { - background-color: orange; - color: black; -} - -.snackbar-error-style { - background-color: crimson; - color: black; -} - -.code { - font-family: monospace; - font-size: larger; -} - -.text-ellipsis { - text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; -} - -.mat-hint-text-ellipsis { - mat-hint { - text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; - } -} - -.asset-card { - width: 300px; -} - -.list-style-material-icons-check { - list-style-type: none; - padding-inline-start: 8px; - - li { - margin-top: 8px; - - &:before { - margin-right: 8px; - content: 'check'; - font-family: 'Material Icons'; - } - } -} - -.form-section-title { - margin: 16px 3px; - text-transform: uppercase; - color: #373737; - font-size: 14px; - letter-spacing: 0.04em; -} - -.property-grid-group-title { - margin: 30px 3px 15px 3px; - text-transform: uppercase; - color: #373737; - font-size: 14px; - letter-spacing: 0.05em; -} - -.mat-form-field-any-size-hint .mat-form-field-subscript-wrapper { - position: unset !important; -} - -// hrefs -.link { - color: var(--link-color); - text-decoration: none; - - &:hover, - &:focus { - text-decoration: underline; - } -} - -.flex-even-sized { - flex: 1 1 0; -} - -.text-slate { - color: rgba(0, 0, 0, 0.54); -} - -.text-warn { - color: var(--warn-color); -} - -.bg-muted { - background: rgba(0, 0, 0, 0.12); -} - -.text-sm { - font-size: 0.8em; -} - -.mat-icon-\[80px\] { - font-size: 80px !important; - width: 80px !important; - height: 80px !important; - line-height: 80px !important; -} - -.mat-icon-\[40px\] { - font-size: 40px !important; - width: 40px !important; - height: 40px !important; - line-height: 40px !important; -} - -.mat-icon-\[10px\] { - font-size: 10px !important; - width: 10px !important; - height: 10px !important; - line-height: 10px !important; -} - -.mat-icon-\[14px\] { - margin-right: 5px; - font-size: 14px !important; - width: 14px !important; - height: 14px !important; - line-height: 14px !important; -} - -.mat-icon-\[16px\] { - font-size: 16px !important; - width: 16px !important; - height: 16px !important; - line-height: 16px !important; -} - -.mat-icon-\[12px\] { - font-size: 12px !important; - width: 12px !important; - height: 12px !important; - line-height: 12px !important; -} - -.mat-icon-\[18px\] { - margin-top: 5px; - font-size: 18px !important; - width: 18px !important; - height: 18px !important; - line-height: 18px !important; -} - -.mat-icon-\[22px\] { - font-size: 22px !important; - width: 22px !important; - height: 22px !important; - line-height: 22px !important; -} - -.mat-icon-\[24px\] { - font-size: 24px !important; - width: 24px !important; - height: 24px !important; - line-height: 24px !important; -} - -.mat-icon-\[28px\] { - margin-top: 8px; - font-size: 28px !important; - width: 28px !important; - height: 28px !important; - line-height: 28px !important; -} - -.mat-icon-\[17px\] { - font-size: 17px !important; - line-height: 17px !important; - width: 17px !important; - height: 17px !important; -} - -.mat-card-header-text { - overflow-wrap: break-word; - overflow: hidden; -} - -.mat-expansion-panel-flex-col .mat-expansion-panel-body { - display: flex; - flex-direction: column; -} - -.mat-form-field-without-margin-bottom { - .mat-form-field-wrapper { - margin-bottom: 0 !important; - margin-top: 0 !important; - padding-bottom: 0 !important; - } - .mat-form-field-subscript-wrapper { - top: unset !important; - } -} - -.max-two-lines-list-item .mat-list-text { - display: -webkit-box !important; - -webkit-line-clamp: 2; - line-clamp: 2; - -webkit-box-orient: vertical; - text-overflow: ellipsis; - overflow: hidden !important; -} - -.mat-drawer-inner-container { - display: flex; - flex-direction: column; - overflow-x: hidden !important; -} - -.markdown-description { - @apply prose whitespace-normal max-w-none; - @apply prose-img:rounded-lg prose-img:my-3 prose-img:object-contain prose-img:max-w-full prose-img:max-h-[250px]; - @apply prose-a:text-[--link-color]; - @apply prose-blockquote:mx-0; - @apply prose-code:rounded-lg; - @apply prose-blockquote:border-solid prose-blockquote:border-t-0 prose-blockquote:border-r-0 prose-blockquote:border-b-0; - @apply prose-table:border-collapse prose-table:text-[13px]; - @apply prose-th:px-[13px] prose-th:py-[6px] prose-th:border prose-th:border-[--tw-prose-td-borders] prose-th:align-middle prose-th:border-solid; - @apply prose-td:px-[13px] prose-td:py-[6px] prose-td:border prose-td:border-[--tw-prose-td-borders] prose-td:align-middle prose-td:border-solid; - - font: 400 14px / 20px Sans; - letter-spacing: normal; - - h1, - h2, - h3, - h4, - h5 { - font-weight: 500; - } - h1 { - font-size: 19px; - } - - h2 { - font-size: 17px; - } - - h3 { - font-size: 15px; - } - - h4 { - font-size: 14px; - } - - h5 { - font-size: 12px; - } - - pre code { - @apply p-0; - border: initial; - line-height: 1.5; - } - - a:has(> img) { - @apply w-fit; - } - - p:has(> a > img) { - @apply flex flex-col; - } - - :last-child { - margin: 0px; - } -} - -.mat-menu-content { - padding: 0 !important; -} - -.mat-menu-panel { - min-height: 0 !important; -} - -.mat-icon-button { - &:hover { - background: #ededed !important; - } - - mat-icon { - margin-top: -1px; - } -} - -#edit-asset-form .mat-form-field-infix { - border-top: 4.8px solid transparent !important; -} - -.normal-form-field .mat-form-field-infix { - border-top: 13.6px solid transparent !important; -} - -#edit-asset-form .mat-form-field-subscript-wrapper { - font-size: 100%; -} - -#edit-asset-form .mat-hint { - font-size: 0.75rem; -} diff --git a/src/tailwind.scss b/src/tailwind.scss deleted file mode 100644 index 7eed5d6e7..000000000 --- a/src/tailwind.scss +++ /dev/null @@ -1,26 +0,0 @@ -/** - * This injects Tailwind's base styles and any base styles registered by - * plugins. - */ -@tailwind base; - -/** - * This injects Tailwind's component classes and any component classes - * registered by plugins. - */ -@tailwind components; - -/** - * This injects Tailwind's utility classes and any utility classes registered - * by plugins. - */ -@tailwind utilities; - -/** - * Use this directive to control where Tailwind injects the hover, focus, - * responsive, dark mode, and other variants of each class. - * - * If omitted, Tailwind will append these classes to the very end of - * your stylesheet by default. - */ -// @tailwind variants; diff --git a/src/test.ts b/src/test.ts deleted file mode 100644 index 22f342169..000000000 --- a/src/test.ts +++ /dev/null @@ -1,29 +0,0 @@ -// This file is required by karma.conf.js and loads recursively all the .spec and framework files -import 'zone.js/testing'; -import {getTestBed} from '@angular/core/testing'; -import { - BrowserDynamicTestingModule, - platformBrowserDynamicTesting, -} from '@angular/platform-browser-dynamic/testing'; - -declare const require: { - context( - path: string, - deep?: boolean, - filter?: RegExp, - ): { - (id: string): T; - keys(): string[]; - }; -}; - -// First, initialize the Angular testing environment. -getTestBed().initTestEnvironment( - BrowserDynamicTestingModule, - platformBrowserDynamicTesting(), -); - -// Then we find all the tests. -const context = require.context('./', true, /\.spec\.ts$/); -// And load the modules. -context.keys().forEach(context); diff --git a/src/theme-colors.mds.scss b/src/theme-colors.mds.scss deleted file mode 100644 index 50c938a39..000000000 --- a/src/theme-colors.mds.scss +++ /dev/null @@ -1,88 +0,0 @@ -@use '@angular/material' as mat; -@use 'sass:map'; - -/* Theming (MDS EDC UI) */ - -// theme set as per http://mcg.mbitson.com/#!?mcgpalette0=%23ffff00&themename=mds -$theme-colors-primary: ( - 50: #ffffe0, - 100: #ffffb3, - 200: #ffff80, - 300: #ffff4d, - 400: #ffff26, - 500: #ffff00, - 600: #ffff00, - 700: #ffff00, - 800: #ffff00, - 900: #ffff00, - A100: #ffffff, - A200: #fffff2, - A400: #ffffbf, - A700: #ffffa6, - contrast: ( - 50: #000000, - 100: #000000, - 200: #000000, - 300: #000000, - 400: #000000, - 500: #000000, - 600: #000000, - 700: #000000, - 800: #000000, - 900: #000000, - A100: #000000, - A200: #000000, - A400: #000000, - A700: #000000, - ), -); - -$link-color: darken (map.get($theme-colors-primary, 500), 15%); - -$theme-colors-accent: ( - 50: #ffffff, - 100: #000000, - 200: #000000, - 300: #000000, - 400: #000000, - 500: #000000, - 600: #000000, - 700: #000000, - 800: #000000, - 900: #000000, - A100: #000000, - A200: #000000, - A400: #000000, - A700: #000000, - contrast: ( - 50: #000000, - 100: #000000, - 200: #000000, - 300: #ffffff, - 400: #ffffff, - 500: #ffffff, - 600: #ffffff, - 700: #ffffff, - 800: #ffffff, - 900: #ffffff, - A100: #000000, - A200: #ffffff, - A400: #ffffff, - A700: #ffffff, - ), -); - -$theme-palette-primary: mat.define-palette($theme-colors-primary); -$theme-palette-accent: mat.define-palette( - $theme-colors-accent, - A200, - A100, - A400 -); -$theme-palette-warn: mat.define-palette(mat.$red-palette); - -$theme: mat.define-light-theme( - $theme-palette-primary, - $theme-palette-accent, - $theme-palette-warn -); diff --git a/src/theme-colors.scss b/src/theme-colors.scss deleted file mode 100644 index 186fd888f..000000000 --- a/src/theme-colors.scss +++ /dev/null @@ -1,82 +0,0 @@ -@use '@angular/material' as mat; -@use 'sass:map'; - -/* Theming (Sovity Stock EDC UI) */ - -$theme-colors-primary: ( - 50: #e0e5ec, - 100: #b3bed0, - 200: #8092b1, - 300: #4d6691, - 400: #26467a, - 500: #002562, - 600: #00215a, - 700: #001b50, - 800: #001646, - 900: #000d34, - A100: #6c80ff, - A200: #3954ff, - A400: #0628ff, - A700: #0020eb, - contrast: ( - 50: #000000, - 100: #000000, - 200: #000000, - 300: #ffffff, - 400: #ffffff, - 500: #ffffff, - 600: #ffffff, - 700: #ffffff, - 800: #ffffff, - 900: #ffffff, - A100: #000000, - A200: #ffffff, - A400: #ffffff, - A700: #ffffff, - ), -); - -$link-color: lighten(map.get($theme-colors-primary, 500), 5%); - -$theme-colors-accent: ( - 50: #ffffff, - 100: #000000, - 200: #000000, - 300: #000000, - 400: #000000, - 500: #000000, - 600: #000000, - 700: #000000, - 800: #000000, - 900: #000000, - A100: #000000, - A200: #000000, - A400: #000000, - A700: #000000, - contrast: ( - 50: #000000, - 100: #000000, - 200: #000000, - 300: #ffffff, - 400: #ffffff, - 500: #ffffff, - 600: #ffffff, - 700: #ffffff, - 800: #ffffff, - 900: #ffffff, - A100: #000000, - A200: #ffffff, - A400: #ffffff, - A700: #ffffff, - ), -); - -$theme-palette-primary: mat.define-palette($theme-colors-primary); -$theme-palette-accent: mat.define-palette($theme-colors-accent); -$theme-palette-warn: mat.define-palette(mat.$red-palette); - -$theme: mat.define-light-theme( - $theme-palette-primary, - $theme-palette-accent, - $theme-palette-warn -); diff --git a/src/theme-generated-variables.scss b/src/theme-generated-variables.scss deleted file mode 100644 index ddec267ac..000000000 --- a/src/theme-generated-variables.scss +++ /dev/null @@ -1,25 +0,0 @@ -@use 'sass:map'; -@use '@angular/material' as mat; - -@mixin theme-vars($theme, $link-color) { - --link-color: #{$link-color}; - --warn-color: #{mat.get-color-from-palette(map-get($theme, warn))}; - - --ngx-json-string: black; // color of string values - --ngx-json-number: black; // color of number values - --ngx-json-boolean: black; // color of boolean values - --ngx-json-date: black; // color of date values - // --ngx-json-array: ; // color of array values - // --ngx-json-object: ; // color of object values - // --ngx-json-function: ; // color of function values - --ngx-json-null: black; // color of null values - --ngx-json-null-bg: transparent; // background color of null values - // --ngx-json-undefined: ; // color of undefined values - // --ngx-json-toggler: ; // color of toggler - --ngx-json-key: #002562; // color of keys - // --ngx-json-separator: ; // color of separators - // --ngx-json-value: ; // color of values - // --ngx-json-undefined-key: ; // color for key of undefined values - // --ngx-json-font-family: ; // font-family - // --ngx-json-font-size: ; // font-size -} diff --git a/src/theme.scss b/src/theme.scss deleted file mode 100644 index f89e157c5..000000000 --- a/src/theme.scss +++ /dev/null @@ -1,124 +0,0 @@ -@use '@angular/material' as mat; -@use 'theme-colors' as sovityColors; -@use 'theme-colors.mds' as mdsColors; -@use 'theme-generated-variables' as themeGeneratedVars; - -// Import styles that aren't theme dependant (including typography) - -@font-face { - font-display: swap; - font-family: 'Sans'; - font-style: normal; - font-weight: 300; - src: url('assets/fonts/Inter-Light.woff2') format('woff2'); -} - -@font-face { - font-display: swap; - font-family: 'Sans'; - font-style: normal; - font-weight: 400; - src: url('assets/fonts/Inter-Regular.woff2') format('woff2'); -} - -@font-face { - font-display: swap; - font-family: 'Sans'; - font-style: normal; - font-weight: 500; - src: url('assets/fonts/Inter-Medium.woff2') format('woff2'); -} - -@font-face { - font-display: swap; - font-family: 'Sans'; - font-style: normal; - font-weight: 600; - src: url('assets/fonts/Inter-SemiBold.woff2') format('woff2'); -} - -@font-face { - font-display: swap; - font-family: 'Sans'; - font-style: normal; - font-weight: 700; - src: url('assets/fonts/Inter-Bold.woff2') format('woff2'); -} - -/* material-icons-regular - latin */ -@font-face { - font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ - font-family: 'Material Icons'; - font-style: normal; - font-weight: 400; - src: url('assets/fonts/material-icons-v140-latin-regular.woff2') - format('woff2'); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ -} - -.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; - -webkit-font-feature-settings: 'liga'; - -webkit-font-smoothing: antialiased; -} - -$custom-typography: mat.define-typography-config( - $font-family: 'Sans', -); -@include mat.core($custom-typography); - -// Import theme and theme-dependant styles -.theme-sovity { - @include mat.all-component-themes(sovityColors.$theme); - @include themeGeneratedVars.theme-vars( - sovityColors.$theme, - sovityColors.$link-color - ); -} - -.theme-mds { - @include mat.all-component-themes(mdsColors.$theme); - @include themeGeneratedVars.theme-vars( - mdsColors.$theme, - mdsColors.$link-color - ); -} - -// fix paginator background, it was white before, but our background is gray -mat-paginator { - background: transparent !important; -} - -// Fix Icon sizes used in card avatars -mat-icon[mat-card-avatar], -.mat-card-avatar-icon { - font-size: 40px !important; - width: 40px !important; - height: 40px !important; - line-height: 40px !important; - margin-top: 1px; - margin-right: -3px; - margin-left: 2px; -} - -// Fix mat-chips exploding out and/or having multiline exploding strings -mat-chip { - max-width: 100%; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -// Fix Date range second-date-text being "higher" than first-date-text -.mat-date-range-input-container { - align-items: unset !important; -} diff --git a/src/types.d.ts b/src/types.d.ts deleted file mode 100644 index d334b3156..000000000 --- a/src/types.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -// Required since this dependency does not have a types.d.ts file -declare module 'json-stable-stringify'; diff --git a/tailwind.config.js b/tailwind.config.js deleted file mode 100644 index 0312164eb..000000000 --- a/tailwind.config.js +++ /dev/null @@ -1,22 +0,0 @@ -module.exports = { - prefix: '', - purge: { - content: ['./src/**/*.{html,ts}'], - }, - darkMode: 'class', // or 'media' or 'class' - theme: { - container: { - center: true, - padding: '0.5rem', - screens: { - '2xl': '87.5rem', - '3xl': '100rem', - }, - }, - extend: {}, - }, - variants: { - extend: {}, - }, - plugins: [require('@tailwindcss/typography')], -}; diff --git a/tsconfig.app.json b/tsconfig.app.json deleted file mode 100644 index ff396d4ce..000000000 --- a/tsconfig.app.json +++ /dev/null @@ -1,10 +0,0 @@ -/* To learn more about this file see: https://angular.io/config/tsconfig. */ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "./out-tsc/app", - "types": [] - }, - "files": ["src/main.ts", "src/polyfills.ts"], - "include": ["src/**/*.d.ts"] -} diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index a00f06927..000000000 --- a/tsconfig.json +++ /dev/null @@ -1,30 +0,0 @@ -/* To learn more about this file see: https://angular.io/config/tsconfig. */ -{ - "compileOnSave": false, - "compilerOptions": { - "baseUrl": "./", - "outDir": "./dist/out-tsc", - "forceConsistentCasingInFileNames": true, - "strict": true, - "noUnusedLocals": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true, - "sourceMap": true, - "declaration": false, - "downlevelIteration": true, - "experimentalDecorators": true, - "moduleResolution": "node", - "importHelpers": true, - "target": "es2020", - "module": "es2020", - "lib": ["es2021", "dom"], - "skipLibCheck": true - }, - "angularCompilerOptions": { - "enableI18nLegacyMessageIdFormat": false, - "strictInjectionParameters": true, - "strictInputAccessModifiers": true, - "strictTemplates": true, - "fullTemplateTypeCheck": true - } -} diff --git a/tsconfig.spec.json b/tsconfig.spec.json deleted file mode 100644 index 669344f8d..000000000 --- a/tsconfig.spec.json +++ /dev/null @@ -1,10 +0,0 @@ -/* To learn more about this file see: https://angular.io/config/tsconfig. */ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "./out-tsc/spec", - "types": ["jasmine"] - }, - "files": ["src/test.ts", "src/polyfills.ts"], - "include": ["src/**/*.spec.ts", "src/**/*.d.ts"] -} diff --git a/webpack.config.js b/webpack.config.js deleted file mode 100644 index 3c2e58f02..000000000 --- a/webpack.config.js +++ /dev/null @@ -1,22 +0,0 @@ -module.exports = { - module: { - rules: [ - // Add PostCSS Loader fir Tailwind Utilities - { - test: /\.scss$/, - loader: 'postcss-loader', - options: { - postcssOptions: { - ident: 'postcss', - syntax: 'postcss-scss', - plugins: [ - require('postcss-import'), - require('tailwindcss'), - require('autoprefixer'), - ], - }, - }, - }, - ], - }, -};