From 8767a55370d7c5cacdb0b97934ea1a463584bbff Mon Sep 17 00:00:00 2001 From: David Whittaker <84562015+whitdog47@users.noreply.github.com> Date: Tue, 12 Sep 2023 10:11:27 -0700 Subject: [PATCH 1/7] Allow a restricted incident priority for stable status (#3751) --- .../versions/2023-09-07_0356472ea980.py | 29 ++++++++++ src/dispatch/incident/models.py | 1 + src/dispatch/incident/priority/models.py | 6 +- src/dispatch/incident/service.py | 6 +- src/dispatch/project/models.py | 13 +++++ .../dispatch/src/incident/DetailsTab.vue | 50 +++++++++++++--- .../priority/IncidentPrioritySelect.vue | 16 +++++- .../dispatch/src/incident/priority/Table.vue | 57 ++++++++++++++++++- .../dispatch/src/incident/priority/store.js | 45 +++++++++++++++ 9 files changed, 209 insertions(+), 14 deletions(-) create mode 100644 src/dispatch/database/revisions/tenant/versions/2023-09-07_0356472ea980.py diff --git a/src/dispatch/database/revisions/tenant/versions/2023-09-07_0356472ea980.py b/src/dispatch/database/revisions/tenant/versions/2023-09-07_0356472ea980.py new file mode 100644 index 000000000000..01a90e835da2 --- /dev/null +++ b/src/dispatch/database/revisions/tenant/versions/2023-09-07_0356472ea980.py @@ -0,0 +1,29 @@ +"""Adds new restrict to stable incident priority id + +Revision ID: 0356472ea980 +Revises: 4e57f5b1f3f3 +Create Date: 2023-09-01 15:30:52.512886 + +""" +from alembic import op +import sqlalchemy as sa + +# revision identifiers, used by Alembic. +revision = "0356472ea980" +down_revision = "4e57f5b1f3f3" +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.add_column("project", sa.Column("stable_priority_id", sa.Integer(), nullable=True)) + op.create_foreign_key(None, "project", "incident_priority", ["stable_priority_id"], ["id"]) + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_constraint(None, "project", type_="foreignkey") + op.drop_column("project", "stable_priority_id") + # ### end Alembic commands ### diff --git a/src/dispatch/incident/models.py b/src/dispatch/incident/models.py index 4be0ce20ef9e..4b2ee2d5b3d4 100644 --- a/src/dispatch/incident/models.py +++ b/src/dispatch/incident/models.py @@ -239,6 +239,7 @@ class ProjectRead(DispatchBase): id: Optional[PrimaryKey] name: NameStr color: Optional[str] + stable_priority: Optional[IncidentPriorityRead] = None class CaseRead(DispatchBase): diff --git a/src/dispatch/incident/priority/models.py b/src/dispatch/incident/priority/models.py index 91ff59e303c8..4920201e7281 100644 --- a/src/dispatch/incident/priority/models.py +++ b/src/dispatch/incident/priority/models.py @@ -9,7 +9,6 @@ from dispatch.database.core import Base, ensure_unique_default_per_project from dispatch.models import DispatchBase, NameStr, ProjectMixin, PrimaryKey, Pagination -from dispatch.project.models import ProjectRead class IncidentPriority(Base, ProjectMixin): @@ -36,6 +35,11 @@ class IncidentPriority(Base, ProjectMixin): listen(IncidentPriority.default, "set", ensure_unique_default_per_project) +class ProjectRead(DispatchBase): + id: Optional[PrimaryKey] + name: NameStr + + # Pydantic models... class IncidentPriorityBase(DispatchBase): name: NameStr diff --git a/src/dispatch/incident/service.py b/src/dispatch/incident/service.py index 5868444da64b..3c6d06d06433 100644 --- a/src/dispatch/incident/service.py +++ b/src/dispatch/incident/service.py @@ -290,10 +290,8 @@ def update(*, db_session, incident: Incident, incident_in: IncidentUpdate) -> In ) if incident_in.status == IncidentStatus.stable: - incident_priority = incident_priority_service.get_default( - db_session=db_session, - project_id=incident.project.id, - ) + if incident.project.stable_priority: + incident_priority = incident.project.stable_priority else: incident_priority = incident_priority_service.get_by_name_or_default( db_session=db_session, diff --git a/src/dispatch/project/models.py b/src/dispatch/project/models.py index 1d6d54188be2..235043676464 100644 --- a/src/dispatch/project/models.py +++ b/src/dispatch/project/models.py @@ -12,6 +12,10 @@ from dispatch.models import DispatchBase, NameStr, PrimaryKey, Pagination from dispatch.organization.models import Organization, OrganizationRead +from dispatch.incident.priority.models import ( + IncidentPriority, + IncidentPriorityRead, +) class Project(Base): @@ -37,6 +41,13 @@ class Project(Base): send_daily_reports = Column(Boolean) + stable_priority_id = Column(Integer, nullable=True) + stable_priority = relationship( + IncidentPriority, + foreign_keys=[stable_priority_id], + primaryjoin="IncidentPriority.id == Project.stable_priority_id", + ) + @hybrid_property def slug(self): return slugify(self.name) @@ -65,10 +76,12 @@ class ProjectCreate(ProjectBase): class ProjectUpdate(ProjectBase): send_daily_reports: Optional[bool] = Field(True, nullable=True) + stable_priority_id: Optional[int] class ProjectRead(ProjectBase): id: Optional[PrimaryKey] + stable_priority: Optional[IncidentPriorityRead] = None class ProjectPagination(Pagination): diff --git a/src/dispatch/static/dispatch/src/incident/DetailsTab.vue b/src/dispatch/static/dispatch/src/incident/DetailsTab.vue index fe85c2a69e9c..0acf6bec7fac 100644 --- a/src/dispatch/static/dispatch/src/incident/DetailsTab.vue +++ b/src/dispatch/static/dispatch/src/incident/DetailsTab.vue @@ -77,15 +77,27 @@ - + + + - + + + + + + + + @@ -144,6 +161,25 @@ extend("required", { message: "This field is required", }) +extend("stableRestrictedPriority", { + params: ["status", "project"], + validate(value, { status, project }) { + if (!project) return true + const stablePriority = project.stable_priority + if (!stablePriority) return true + if (status == "Stable" && value.name != stablePriority.name) { + return false + } + return true + }, +}) + +extend("alwaysTrue", { + validate() { + return true + }, +}) + export default { name: "IncidentDetailsTab", diff --git a/src/dispatch/static/dispatch/src/incident/priority/IncidentPrioritySelect.vue b/src/dispatch/static/dispatch/src/incident/priority/IncidentPrioritySelect.vue index ae1ff06170bc..4b51569f8f06 100644 --- a/src/dispatch/static/dispatch/src/incident/priority/IncidentPrioritySelect.vue +++ b/src/dispatch/static/dispatch/src/incident/priority/IncidentPrioritySelect.vue @@ -7,6 +7,7 @@ label="Priority" return-object :loading="loading" + :error-messages="show_error" > @@ -38,6 +39,10 @@ export default { type: [Object], default: null, }, + status: { + type: String, + default: "", + }, }, data() { @@ -56,6 +61,15 @@ export default { this.$emit("input", value) }, }, + show_error() { + if (!this.project) return null + const stablePriority = this.project.stable_priority + if (!stablePriority) return null + if (this.status == "Stable" && this.value.name != stablePriority.name) { + return `Priority must be ${stablePriority.name} for Stable incidents` + } + return null + }, }, methods: { @@ -101,7 +115,7 @@ export default { created() { this.fetchData() this.$watch( - (vm) => [vm.project], + (vm) => [vm.project, vm.status], () => { this.fetchData() } diff --git a/src/dispatch/static/dispatch/src/incident/priority/Table.vue b/src/dispatch/static/dispatch/src/incident/priority/Table.vue index 9e1cbd939f8a..8fb722493e41 100644 --- a/src/dispatch/static/dispatch/src/incident/priority/Table.vue +++ b/src/dispatch/static/dispatch/src/incident/priority/Table.vue @@ -17,6 +17,9 @@ New + + Incident priority types + @@ -68,6 +71,39 @@ + + + + Incident priority settings + + + + + + mdi-information + + + If activated, Dispatch will automatically change Stable incidents to this priority. + Also, users will not be permitted to change the priority on Stable incidents. + + + + + + + + + @@ -77,6 +113,7 @@ import { mapActions } from "vuex" import NewEditSheet from "@/incident/priority/NewEditSheet.vue" import SettingsBreadcrumbs from "@/components/SettingsBreadcrumbs.vue" +import IncidentPrioritySelect from "@/incident/priority/IncidentPrioritySelect.vue" export default { name: "IncidentPriorityTable", @@ -84,6 +121,7 @@ export default { components: { NewEditSheet, SettingsBreadcrumbs, + IncidentPrioritySelect, }, data() { return { @@ -98,6 +136,7 @@ export default { { text: "View Order", value: "view_order", sortable: true }, { text: "", value: "data-table-actions", sortable: false, align: "end" }, ], + restrictStable: false, } }, @@ -112,6 +151,7 @@ export default { "table.loading", "table.rows.items", "table.rows.total", + "stablePriority", ]), ...mapFields("route", ["query", "params"]), }, @@ -120,6 +160,7 @@ export default { this.project = [{ name: this.query.project }] this.getAll() + this.restrictStable = this.stablePriority != null this.$watch( (vm) => [vm.q, vm.itemsPerPage, vm.sortBy, vm.descending, vm.project], @@ -127,12 +168,26 @@ export default { this.page = 1 this.$router.push({ query: { project: this.project[0].name } }) this.getAll() + this.restrictStable = this.stablePriority != null + } + ) + + this.$watch( + (vm) => [vm.stablePriority], + () => { + this.restrictStable = this.stablePriority != null + this.updateStablePriority(this.restrictStable) } ) }, methods: { - ...mapActions("incident_priority", ["getAll", "createEditShow", "removeShow"]), + ...mapActions("incident_priority", [ + "getAll", + "createEditShow", + "removeShow", + "updateStablePriority", + ]), }, } diff --git a/src/dispatch/static/dispatch/src/incident/priority/store.js b/src/dispatch/static/dispatch/src/incident/priority/store.js index c2e4a231930d..c60fe35ccebc 100644 --- a/src/dispatch/static/dispatch/src/incident/priority/store.js +++ b/src/dispatch/static/dispatch/src/incident/priority/store.js @@ -3,6 +3,7 @@ import { debounce } from "lodash" import SearchUtils from "@/search/utils" import IncidentPriorityApi from "@/incident/priority/api" +import ProjectApi from "@/project/api" const getDefaultSelectedState = () => { return { @@ -46,12 +47,35 @@ const state = { }, loading: false, }, + stablePriority: null, } const getters = { getField, } +// debounce setting changes +var oldStablePriority = undefined + +function commitStablePriority(commit, value) { + ProjectApi.getAll({ q: state.table.options.filters.project[0].name }).then((response) => { + const project = response.data.items[0] + if (project) { + project.stable_priority_id = value + ProjectApi.update(project.id, project).then(() => { + commit( + "notification_backend/addBeNotification", + { + text: `Setting updated.`, + type: "success", + }, + { root: true } + ) + }) + } + }) +} + const actions = { getAll: debounce(({ commit, state }) => { commit("SET_TABLE_LOADING", "primary") @@ -61,6 +85,12 @@ const actions = { ) return IncidentPriorityApi.getAll(params) .then((response) => { + if (response.data.items[0]) { + ProjectApi.get(response.data.items[0].project.id).then((response) => { + state.stablePriority = response.data.stable_priority + oldStablePriority = state.stablePriority + }) + } commit("SET_TABLE_LOADING", false) commit("SET_TABLE_ROWS", response.data) }) @@ -132,6 +162,21 @@ const actions = { ) }) }, + updateStablePriority({ commit }, value) { + if (!value) state.stablePriority = null + if (oldStablePriority === undefined) { + oldStablePriority = state.stablePriority + return + } + if (oldStablePriority?.name !== state.stablePriority?.name) { + oldStablePriority = state.stablePriority + if (value) { + commitStablePriority(commit, state.stablePriority.id) + } else { + commitStablePriority(commit, null) + } + } + }, } const mutations = { From d36ec54cba8825519b794dea5cca89559b9e75e6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Sep 2023 10:13:09 -0700 Subject: [PATCH 2/7] Bump google-auth-oauthlib from 1.0.0 to 1.1.0 (#3778) Bumps [google-auth-oauthlib](https://github.com/GoogleCloudPlatform/google-auth-library-python-oauthlib) from 1.0.0 to 1.1.0. - [Release notes](https://github.com/GoogleCloudPlatform/google-auth-library-python-oauthlib/releases) - [Changelog](https://github.com/googleapis/google-auth-library-python-oauthlib/blob/main/CHANGELOG.md) - [Commits](https://github.com/GoogleCloudPlatform/google-auth-library-python-oauthlib/compare/v1.0.0...v1.1.0) --- updated-dependencies: - dependency-name: google-auth-oauthlib dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements-base.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-base.txt b/requirements-base.txt index 2cde15f02d2f..d42bfa4a2d56 100644 --- a/requirements-base.txt +++ b/requirements-base.txt @@ -134,7 +134,7 @@ google-auth==2.22.0 # google-auth-oauthlib google-auth-httplib2==0.1.0 # via google-api-python-client -google-auth-oauthlib==1.0.0 +google-auth-oauthlib==1.1.0 # via -r requirements-base.in googleapis-common-protos==1.60.0 # via google-api-core From b23758b8015b23d6d1b7ae48f9d1f00d83d6d9f0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Sep 2023 10:13:17 -0700 Subject: [PATCH 3/7] Bump slack-sdk from 3.21.3 to 3.22.0 (#3777) Bumps [slack-sdk](https://github.com/slackapi/python-slack-sdk) from 3.21.3 to 3.22.0. - [Release notes](https://github.com/slackapi/python-slack-sdk/releases) - [Changelog](https://github.com/slackapi/python-slack-sdk/blob/main/docs-v2/changelog.html) - [Commits](https://github.com/slackapi/python-slack-sdk/compare/v3.21.3...v3.22.0) --- updated-dependencies: - dependency-name: slack-sdk dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements-base.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-base.txt b/requirements-base.txt index d42bfa4a2d56..736c93befb82 100644 --- a/requirements-base.txt +++ b/requirements-base.txt @@ -391,7 +391,7 @@ six==1.16.0 # validators slack-bolt==1.18.0 # via -r requirements-base.in -slack-sdk==3.21.3 +slack-sdk==3.22.0 # via # -r requirements-base.in # slack-bolt From e4d8bc16bbd01e8c7b49d01783c975956a335bed Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Sep 2023 10:13:25 -0700 Subject: [PATCH 4/7] Bump faker from 19.4.0 to 19.6.1 (#3776) Bumps [faker](https://github.com/joke2k/faker) from 19.4.0 to 19.6.1. - [Release notes](https://github.com/joke2k/faker/releases) - [Changelog](https://github.com/joke2k/faker/blob/master/CHANGELOG.md) - [Commits](https://github.com/joke2k/faker/compare/v19.4.0...v19.6.1) --- updated-dependencies: - dependency-name: faker dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements-dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-dev.txt b/requirements-dev.txt index 6d1af776d602..9701d9c5d163 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -34,7 +34,7 @@ executing==1.2.0 # stack-data factory-boy==3.3.0 # via -r requirements-dev.in -faker==19.4.0 +faker==19.6.1 # via # -r requirements-dev.in # factory-boy From a4c8c67c8ac5a0991b30b73018bcbee9e6135904 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Sep 2023 10:13:32 -0700 Subject: [PATCH 5/7] Bump ruff from 0.0.287 to 0.0.288 (#3775) Bumps [ruff](https://github.com/astral-sh/ruff) from 0.0.287 to 0.0.288. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/BREAKING_CHANGES.md) - [Commits](https://github.com/astral-sh/ruff/compare/v0.0.287...v0.0.288) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements-dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-dev.txt b/requirements-dev.txt index 9701d9c5d163..cde8144d6626 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -90,7 +90,7 @@ python-dateutil==2.8.2 # via faker pyyaml==6.0.1 # via pre-commit -ruff==0.0.287 +ruff==0.0.288 # via -r requirements-dev.in six==1.16.0 # via From ef9b1dc2e89d17a55b96d06231556d99e00f5846 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Sep 2023 10:13:40 -0700 Subject: [PATCH 6/7] Bump black from 23.7.0 to 23.9.1 (#3768) Bumps [black](https://github.com/psf/black) from 23.7.0 to 23.9.1. - [Release notes](https://github.com/psf/black/releases) - [Changelog](https://github.com/psf/black/blob/main/CHANGES.md) - [Commits](https://github.com/psf/black/compare/23.7.0...23.9.1) --- updated-dependencies: - dependency-name: black dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements-dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-dev.txt b/requirements-dev.txt index cde8144d6626..7f66dd100e53 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -12,7 +12,7 @@ attrs==22.1.0 # via -r requirements-dev.in backcall==0.2.0 # via ipython -black==23.7.0 +black==23.9.1 # via -r requirements-dev.in cfgv==3.4.0 # via pre-commit From d10e174ecd2d1b6ecc4ef86477994f99ce5750b3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Sep 2023 10:13:48 -0700 Subject: [PATCH 7/7] Bump eslint from 8.48.0 to 8.49.0 in /src/dispatch/static/dispatch (#3767) Bumps [eslint](https://github.com/eslint/eslint) from 8.48.0 to 8.49.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v8.48.0...v8.49.0) --- updated-dependencies: - dependency-name: eslint dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .../static/dispatch/package-lock.json | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/dispatch/static/dispatch/package-lock.json b/src/dispatch/static/dispatch/package-lock.json index 62d4493bbd9d..bd905bfa9868 100644 --- a/src/dispatch/static/dispatch/package-lock.json +++ b/src/dispatch/static/dispatch/package-lock.json @@ -584,18 +584,18 @@ "dev": true }, "node_modules/@eslint/js": { - "version": "8.48.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.48.0.tgz", - "integrity": "sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.49.0.tgz", + "integrity": "sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", + "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", @@ -2598,16 +2598,16 @@ } }, "node_modules/eslint": { - "version": "8.48.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.48.0.tgz", - "integrity": "sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.49.0.tgz", + "integrity": "sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.48.0", - "@humanwhocodes/config-array": "^0.11.10", + "@eslint/js": "8.49.0", + "@humanwhocodes/config-array": "^0.11.11", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.12.4", @@ -7038,15 +7038,15 @@ } }, "@eslint/js": { - "version": "8.48.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.48.0.tgz", - "integrity": "sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.49.0.tgz", + "integrity": "sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==", "dev": true }, "@humanwhocodes/config-array": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", + "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", @@ -8526,16 +8526,16 @@ } }, "eslint": { - "version": "8.48.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.48.0.tgz", - "integrity": "sha512-sb6DLeIuRXxeM1YljSe1KEx9/YYeZFQWcV8Rq9HfigmdDEugjLEVEa1ozDjL6YDjBpQHPJxJzze+alxi4T3OLg==", + "version": "8.49.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.49.0.tgz", + "integrity": "sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.48.0", - "@humanwhocodes/config-array": "^0.11.10", + "@eslint/js": "8.49.0", + "@humanwhocodes/config-array": "^0.11.11", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.12.4",