From 90acef8f2254fe129b47cd21237e28212a446fd6 Mon Sep 17 00:00:00 2001 From: Konstantin Markov Date: Tue, 26 Nov 2024 11:37:20 +0200 Subject: [PATCH 1/8] Fix parent selection for custom vocabs (#2139) --- client/components/fields/editor/CustomVocabularies.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/client/components/fields/editor/CustomVocabularies.tsx b/client/components/fields/editor/CustomVocabularies.tsx index 927dae8b8..9361d4beb 100644 --- a/client/components/fields/editor/CustomVocabularies.tsx +++ b/client/components/fields/editor/CustomVocabularies.tsx @@ -53,6 +53,7 @@ class CustomVocabulariesComponent extends React.PureComponent { data-test-id={testId?.length ? `${testId}.${cv._id}` : cv._id} > Date: Mon, 25 Nov 2024 15:41:40 +0530 Subject: [PATCH 2/8] Add config to disable automatic assignment assignee reassignment [SDCP-860] (#2132) * add config to disable automatic assignment reassignment * handle assignor_user * add behave tests --- README.md | 3 + server/features/assignments.feature | 248 ++++++++++++++++++ server/features/steps/steps.py | 5 + server/planning/assignments/assignments.py | 9 +- .../assignments/assignments_history.py | 50 ++-- server/planning/common.py | 4 + server/settings.py | 2 + 7 files changed, 294 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index 0c12b9e8e..4940dfebf 100644 --- a/README.md +++ b/README.md @@ -204,6 +204,9 @@ Below sections include the config options that can be defined in settings.py. * PLANNING_JSON_ASSIGNED_INFO_EXTENDED * Defaults to `false` * If `true`, it will add to planning JSON output additional info for coverages like assigned desk name/email and assigned user name/email. +* ASSIGNMENT_MANUAL_REASSIGNMENT_ONLY + * Default: False (preserves the current behavior where automatic user assignment occurs) + * If true, Disables automatic user assignment for coverage, ensuring that assignments are updated only through explicit manual reassignment ### Authoring Config * PLANNING_CHECK_FOR_ASSIGNMENT_ON_PUBLISH diff --git a/server/features/assignments.feature b/server/features/assignments.feature index 67ad25d85..624576b57 100644 --- a/server/features/assignments.feature +++ b/server/features/assignments.feature @@ -2084,3 +2084,251 @@ Feature: Assignments ] } """ + + @auth + @vocabularies + Scenario: Reassignment to In-Progress but User Restricted by Manual Config instead of null + When we post to "/archive" + """ + [{ + "type": "text", + "headline": "test headline", + "slugline": "test slugline", + "task": { + "desk": "#desks._id#", + "stage": "#desks.incoming_stage#" + } + }] + """ + When we post to "/planning" + """ + [{ + "item_class": "item class value", + "slugline": "test slugline", + "planning_date": "2016-01-02" + }] + """ + Then we get OK response + When we patch "/planning/#planning._id#" + """ + { + "coverages": [{ + "planning": { + "ednote": "test coverage, I want 250 words", + "slugline": "test slugline" + }, + "assigned_to": { + "desk": "#desks._id#", + "user": "#CONTEXT_USER_ID#", + "assignor_user": "#CONTEXT_USER_ID#" + }, + "workflow_status": "active" + }] + } + """ + Then we get OK response + Then we store assignment id in "firstassignment" from coverage 0 + When we post to "assignments/link" + """ + [{ + "assignment_id": "#firstassignment#", + "item_id": "#archive._id#", + "reassign": true + }] + """ + Then we get OK response + When we get "/archive/#archive._id#" + When we get "/assignments/#firstassignment#" + Then we get OK response + Then we get existing resource + """ + { + "_id": "#firstassignment#", + "planning": { + "ednote": "test coverage, I want 250 words", + "slugline": "test slugline" + }, + "assigned_to": { + "desk": "#desks._id#", + "user": "#CONTEXT_USER_ID#", + "state": "in_progress", + "assignor_user": "#CONTEXT_USER_ID#" + } + } + """ + When we post to "/desks" with "FINANCE_DESK_ID" and success + """ + [{"name": "Finance", "desk_type": "production" }] + """ + And we set config assignment manual reassignment only to True + And we post to "/archive/#archive._id#/move" + """ + [{"task": {"desk": "#desks._id#", "stage": "#desks.incoming_stage#"}}] + """ + Then we get OK response + When we get "/assignments/#firstassignment#" + Then we get OK response + Then we get existing resource + """ + { + "_id": "#firstassignment#", + "planning": { + "ednote": "test coverage, I want 250 words", + "slugline": "test slugline" + }, + "assigned_to": { + "desk": "#desks._id#", + "user": "#CONTEXT_USER_ID#", + "state": "submitted", + "assignor_user": "#CONTEXT_USER_ID#" + } + } + """ + + @auth + @vocabularies + @notification + Scenario: Assignee can not changed as the author of content changes based on Manual config + Given empty "assignments_history" + When we post to "/archive" + """ + [{ + "type": "text", + "headline": "test headline", + "slugline": "test slugline", + "task": { + "desk": "#desks._id#", + "stage": "#desks.incoming_stage#" + } + }] + """ + When we post to "/planning" + """ + [{ + "item_class": "item class value", + "slugline": "test slugline", + "planning_date": "2016-01-02" + }] + """ + Then we get OK response + When we reset notifications + When we patch "/planning/#planning._id#" + """ + { + "coverages": [{ + "planning": { + "ednote": "test coverage, I want 250 words", + "slugline": "test slugline" + }, + "assigned_to": { + "desk": "#desks._id#", + "user": "#CONTEXT_USER_ID#" + }, + "workflow_status": "active" + }] + } + """ + Then we get OK response + Then we store coverage id in "firstcoverage" from coverage 0 + Then we store assignment id in "firstassignment" from coverage 0 + And we get notifications + """ + [{ + "event": "assignments:created", + "extra": { + "item": "#firstassignment#", + "coverage": "#firstcoverage#", + "planning": "#planning._id#", + "assignment_state": "assigned", + "assigned_user": "#CONTEXT_USER_ID#", + "assigned_desk": "#desks._id#", + "lock_user": null, + "user": "#CONTEXT_USER_ID#", + "original_assigned_desk": null, + "original_assigned_user": null + } + }] + """ + Then we store assignment id in "firstassignment" from coverage 0 + When we patch "/archive/#archive._id#" + """ + {"headline": "test headline 2"} + """ + Then we get OK response + When we reset notifications + When we post to "assignments/link" + """ + [{ + "assignment_id": "#firstassignment#", + "item_id": "#archive._id#", + "reassign": true + }] + """ + Then we get OK response + And we get notifications + """ + [{ + "event": "assignments:updated", + "extra": { + "item": "#firstassignment#", + "coverage": "#firstcoverage#", + "planning": "#planning._id#", + "assignment_state": "in_progress", + "assigned_user": "#CONTEXT_USER_ID#", + "assigned_desk": "#desks._id#", + "lock_user": null, + "user": "#CONTEXT_USER_ID#", + "original_assigned_desk": "#desks._id#", + "original_assigned_user": "#CONTEXT_USER_ID#" + } + }] + """ + When we get "/archive/#archive._id#" + Then we get existing resource + """ + { + "assignment_id": "#firstassignment#" + } + """ + When we get "/assignments/#firstassignment#" + Then we get OK response + Then we get existing resource + """ + { + "_id": "#firstassignment#", + "planning": { + "ednote": "test coverage, I want 250 words", + "slugline": "test slugline" + }, + "assigned_to": { + "desk": "#desks._id#", + "user": "#CONTEXT_USER_ID#", + "state": "in_progress" + } + } + """ + When we set config assignment manual reassignment only to True + Then we store "old_assignee_id" with value "#CONTEXT_USER_ID#" to context + When we switch user + When we patch "/archive/#archive._id#" + """ + {"slugline": "I'm changing the user"} + """ + Then we get OK response + When we get "/assignments/#firstassignment#" + Then we get OK response + Then we get existing resource + """ + { + "_id": "#firstassignment#", + "planning": { + "ednote": "test coverage, I want 250 words", + "slugline": "test slugline" + }, + "assigned_to": { + "desk": "#desks._id#", + "state": "in_progress", + "user": "#old_assignee_id#" + } + } + """ diff --git a/server/features/steps/steps.py b/server/features/steps/steps.py index ee9ac5541..9b745dccf 100644 --- a/server/features/steps/steps.py +++ b/server/features/steps/steps.py @@ -399,6 +399,11 @@ def then_set_auto_workflow(context): context.app.config["PLANNING_AUTO_ASSIGN_TO_WORKFLOW"] = True +@when("we set config assignment manual reassignment only to True") +def then_set_assignment_manual_reassignment_only(context): + context.app.config["ASSIGNMENT_MANUAL_REASSIGNMENT_ONLY"] = True + + @when("we set PLANNING_USE_XMP_FOR_PIC_ASSIGNMENTS") def then_set_use_xmp_for_pic_assignments(context): ABS_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), "../")) diff --git a/server/planning/assignments/assignments.py b/server/planning/assignments/assignments.py index f285f6f41..b53df0be9 100644 --- a/server/planning/assignments/assignments.py +++ b/server/planning/assignments/assignments.py @@ -60,6 +60,7 @@ update_assignment_on_link_unlink, get_notify_self_on_assignment, planning_auto_assign_to_workflow, + get_config_assignment_manual_reassignment_only, ) from icalendar import Calendar, Event from flask import request, json, current_app as app @@ -862,10 +863,12 @@ def _get_empty_updates_for_assignment(self, assignment): def _set_user_for_assignment(self, assignment, assignee, assignor=None): updates = self._get_empty_updates_for_assignment(assignment) - updates["assigned_to"]["user"] = assignee - if assignor: - updates["assigned_to"]["assignor_user"] = assignor + if not get_config_assignment_manual_reassignment_only(): + updates["assigned_to"]["user"] = assignee + + if assignor: + updates["assigned_to"]["assignor_user"] = assignor return updates diff --git a/server/planning/assignments/assignments_history.py b/server/planning/assignments/assignments_history.py index 51198a9d5..2f184ccb5 100644 --- a/server/planning/assignments/assignments_history.py +++ b/server/planning/assignments/assignments_history.py @@ -108,30 +108,32 @@ def on_item_updated(self, updates, original, operation=None): self._save_history(item, diff, operation) return - # Split an update to two actions if needed - planning_history_service = get_resource_service("planning_history") - cov_diff = {"coverage_id": original.get("coverage_item"), "assigned_to": {}} - if "priority" in diff.keys(): - cov_diff["assigned_to"]["priority"] = diff.pop("priority") - self._save_history( - item, - {"priority": cov_diff["assigned_to"]["priority"]}, - ASSIGNMENT_HISTORY_ACTIONS.EDIT_PRIORITY, - ) - planning_history_service._save_history( - {"_id": original.get("planning_item")}, - cov_diff, - ASSIGNMENT_HISTORY_ACTIONS.EDIT_PRIORITY, - ) - - if "assigned_to" in diff.keys(): - cov_diff["assigned_to"] = diff["assigned_to"] - self._save_history(item, diff, ASSIGNMENT_HISTORY_ACTIONS.REASSIGNED) - planning_history_service._save_history( - {"_id": original.get("planning_item")}, - cov_diff, - ASSIGNMENT_HISTORY_ACTIONS.REASSIGNED, - ) + if diff: + # Split an update to two actions if needed + planning_history_service = get_resource_service("planning_history") + cov_diff = {"coverage_id": original.get("coverage_item"), "assigned_to": {}} + + if "priority" in diff.keys(): + cov_diff["assigned_to"]["priority"] = diff.pop("priority") + self._save_history( + item, + {"priority": cov_diff["assigned_to"]["priority"]}, + ASSIGNMENT_HISTORY_ACTIONS.EDIT_PRIORITY, + ) + planning_history_service._save_history( + {"_id": original.get("planning_item")}, + cov_diff, + ASSIGNMENT_HISTORY_ACTIONS.EDIT_PRIORITY, + ) + + if "assigned_to" in diff.keys(): + cov_diff["assigned_to"] = diff["assigned_to"] + self._save_history(item, diff, ASSIGNMENT_HISTORY_ACTIONS.REASSIGNED) + planning_history_service._save_history( + {"_id": original.get("planning_item")}, + cov_diff, + ASSIGNMENT_HISTORY_ACTIONS.REASSIGNED, + ) def on_item_deleted(self, doc): planning = {"_id": doc.get("planning_item")} diff --git a/server/planning/common.py b/server/planning/common.py index 717dcbdc0..d98e04793 100644 --- a/server/planning/common.py +++ b/server/planning/common.py @@ -271,6 +271,10 @@ def get_config_planning_duplicate_retain_assignee_details(current_app=None): return (current_app or app).config.get("PLANNING_DUPLICATE_RETAIN_ASSIGNEE_DETAILS", False) +def get_config_assignment_manual_reassignment_only(current_app=None): + return (current_app or app).config.get("ASSIGNMENT_MANUAL_REASSIGNMENT_ONLY", False) + + def get_coverage_status_from_cv(qcode: str): coverage_states = get_resource_service("vocabularies").find_one(req=None, _id="newscoveragestatus") diff --git a/server/settings.py b/server/settings.py index 4c1064807..1f787439a 100644 --- a/server/settings.py +++ b/server/settings.py @@ -191,3 +191,5 @@ def env(variable, fallback_value=None): PLANNING_DEFAULT_COVERAGE_STATUS_ON_INGEST = "ncostat:int" PLANNING_DUPLICATE_RETAIN_ASSIGNEE_DETAILS = False + +ASSIGNMENT_MANUAL_REASSIGNMENT_ONLY = False From cb5853ae1de7c703947d9bc3db9df3f071c5fb9a Mon Sep 17 00:00:00 2001 From: Ketan <73937490+devketanpro@users.noreply.github.com> Date: Mon, 25 Nov 2024 15:08:47 +0530 Subject: [PATCH 3/8] Fix behave tests (#2138) * check tests * Fix behave tests --- .../recurring_event_and_planning.feature | 102 +++++++++--------- 1 file changed, 51 insertions(+), 51 deletions(-) diff --git a/server/features/recurring_event_and_planning.feature b/server/features/recurring_event_and_planning.feature index 012091b0a..1530b3471 100644 --- a/server/features/recurring_event_and_planning.feature +++ b/server/features/recurring_event_and_planning.feature @@ -5,8 +5,8 @@ Feature: Recurring Events & Planning [{ "name": "Daily Club", "dates": { - "start": "2024-11-21T12:00:00.000Z", - "end": "2024-11-21T14:00:00.000Z", + "start": "2050-11-21T12:00:00.000Z", + "end": "2050-11-21T14:00:00.000Z", "tz": "Australia/Sydney", "recurring_rule": { "frequency": "DAILY", @@ -28,17 +28,17 @@ Feature: Recurring Events & Planning "_id": "#EVENT1._id#", "recurrence_id": "#EVENT1.recurrence_id#", "name": "Daily Club", - "dates": {"start": "2024-11-21T12:00:00+0000", "end": "2024-11-21T14:00:00+0000"} + "dates": {"start": "2050-11-21T12:00:00+0000", "end": "2050-11-21T14:00:00+0000"} }, { "_id": "#EVENT2._id#", "recurrence_id": "#EVENT1.recurrence_id#", "name": "Daily Club", - "dates": {"start": "2024-11-22T12:00:00+0000", "end": "2024-11-22T14:00:00+0000"} + "dates": {"start": "2050-11-22T12:00:00+0000", "end": "2050-11-22T14:00:00+0000"} }, { "_id": "#EVENT3._id#", "recurrence_id": "#EVENT1.recurrence_id#", "name": "Daily Club", - "dates": {"start": "2024-11-23T12:00:00+0000", "end": "2024-11-23T14:00:00+0000"} + "dates": {"start": "2050-11-23T12:00:00+0000", "end": "2050-11-23T14:00:00+0000"} }]} """ @@ -49,7 +49,7 @@ Feature: Recurring Events & Planning [{ "headline": "test headline", "event_item": "#EVENT1._id#", - "planning_date": "2024-11-21T12:00:00.000Z", + "planning_date": "2050-11-21T12:00:00.000Z", "coverages": [{ "workflow_status": "draft", "news_coverage_status": {"qcode": "ncostat:int"}, @@ -57,7 +57,7 @@ Feature: Recurring Events & Planning "headline": "test headline", "slugline": "test slugline", "g2_content_type": "text", - "scheduled": "2024-11-21T15:00:00.000Z" + "scheduled": "2050-11-21T15:00:00.000Z" } }, { "workflow_status": "draft", @@ -66,7 +66,7 @@ Feature: Recurring Events & Planning "headline": "test headline", "slugline": "test slugline", "g2_content_type": "picture", - "scheduled": "2024-11-21T16:00:00.000Z" + "scheduled": "2050-11-21T16:00:00.000Z" } }] }] @@ -79,12 +79,12 @@ Feature: Recurring Events & Planning "guid": "__any_value__", "type": "planning", "headline": "test headline", - "planning_date": "2024-11-21T12:00:00+0000", + "planning_date": "2050-11-21T12:00:00+0000", "event_item": "#EVENT1._id#", "recurrence_id": "#EVENT1.recurrence_id#", "coverages": [ - {"planning": {"g2_content_type": "text", "scheduled": "2024-11-21T15:00:00+0000"}}, - {"planning": {"g2_content_type": "picture", "scheduled": "2024-11-21T16:00:00+0000"}} + {"planning": {"g2_content_type": "text", "scheduled": "2050-11-21T15:00:00+0000"}}, + {"planning": {"g2_content_type": "picture", "scheduled": "2050-11-21T16:00:00+0000"}} ] }]} """ @@ -96,7 +96,7 @@ Feature: Recurring Events & Planning [{ "headline": "test headline", "event_item": "#EVENT2._id#", - "planning_date": "2024-11-22T12:00:00.000Z", + "planning_date": "2050-11-22T12:00:00.000Z", "update_method": "future", "coverages": [{ "workflow_status": "draft", @@ -105,7 +105,7 @@ Feature: Recurring Events & Planning "headline": "test headline", "slugline": "test slugline", "g2_content_type": "text", - "scheduled": "2024-11-22T15:00:00.000Z" + "scheduled": "2050-11-22T15:00:00.000Z" } }, { "workflow_status": "draft", @@ -114,7 +114,7 @@ Feature: Recurring Events & Planning "headline": "test headline", "slugline": "test slugline", "g2_content_type": "picture", - "scheduled": "2024-11-22T16:00:00.000Z" + "scheduled": "2050-11-22T16:00:00.000Z" } }] }] @@ -127,23 +127,23 @@ Feature: Recurring Events & Planning "guid": "__any_value__", "type": "planning", "headline": "test headline", - "planning_date": "2024-11-22T12:00:00+0000", + "planning_date": "2050-11-22T12:00:00+0000", "event_item": "#EVENT2._id#", "recurrence_id": "#EVENT1.recurrence_id#", "coverages": [ - {"planning": {"g2_content_type": "text", "scheduled": "2024-11-22T15:00:00+0000"}}, - {"planning": {"g2_content_type": "picture", "scheduled": "2024-11-22T16:00:00+0000"}} + {"planning": {"g2_content_type": "text", "scheduled": "2050-11-22T15:00:00+0000"}}, + {"planning": {"g2_content_type": "picture", "scheduled": "2050-11-22T16:00:00+0000"}} ] }, { "guid": "__any_value__", "type": "planning", "headline": "test headline", - "planning_date": "2024-11-23T12:00:00+0000", + "planning_date": "2050-11-23T12:00:00+0000", "event_item": "#EVENT3._id#", "recurrence_id": "#EVENT1.recurrence_id#", "coverages": [ - {"planning": {"g2_content_type": "text", "scheduled": "2024-11-23T15:00:00+0000"}}, - {"planning": {"g2_content_type": "picture", "scheduled": "2024-11-23T16:00:00+0000"}} + {"planning": {"g2_content_type": "text", "scheduled": "2050-11-23T15:00:00+0000"}}, + {"planning": {"g2_content_type": "picture", "scheduled": "2050-11-23T16:00:00+0000"}} ] }]} """ @@ -155,7 +155,7 @@ Feature: Recurring Events & Planning [{ "headline": "test headline", "event_item": "#EVENT1._id#", - "planning_date": "2024-11-21T12:00:00.000Z", + "planning_date": "2050-11-21T12:00:00.000Z", "update_method": "all", "coverages": [{ "workflow_status": "draft", @@ -164,7 +164,7 @@ Feature: Recurring Events & Planning "headline": "test headline", "slugline": "test slugline", "g2_content_type": "text", - "scheduled": "2024-11-21T15:00:00.000Z" + "scheduled": "2050-11-21T15:00:00.000Z" } }, { "workflow_status": "draft", @@ -173,7 +173,7 @@ Feature: Recurring Events & Planning "headline": "test headline", "slugline": "test slugline", "g2_content_type": "picture", - "scheduled": "2024-11-21T16:00:00.000Z" + "scheduled": "2050-11-21T16:00:00.000Z" } }] }] @@ -186,34 +186,34 @@ Feature: Recurring Events & Planning "guid": "__any_value__", "type": "planning", "headline": "test headline", - "planning_date": "2024-11-21T12:00:00+0000", + "planning_date": "2050-11-21T12:00:00+0000", "event_item": "#EVENT1._id#", "recurrence_id": "#EVENT1.recurrence_id#", "coverages": [ - {"planning": {"g2_content_type": "text", "scheduled": "2024-11-21T15:00:00+0000"}}, - {"planning": {"g2_content_type": "picture", "scheduled": "2024-11-21T16:00:00+0000"}} + {"planning": {"g2_content_type": "text", "scheduled": "2050-11-21T15:00:00+0000"}}, + {"planning": {"g2_content_type": "picture", "scheduled": "2050-11-21T16:00:00+0000"}} ] }, { "guid": "__any_value__", "type": "planning", "headline": "test headline", - "planning_date": "2024-11-22T12:00:00+0000", + "planning_date": "2050-11-22T12:00:00+0000", "event_item": "#EVENT2._id#", "recurrence_id": "#EVENT1.recurrence_id#", "coverages": [ - {"planning": {"g2_content_type": "text", "scheduled": "2024-11-22T15:00:00+0000"}}, - {"planning": {"g2_content_type": "picture", "scheduled": "2024-11-22T16:00:00+0000"}} + {"planning": {"g2_content_type": "text", "scheduled": "2050-11-22T15:00:00+0000"}}, + {"planning": {"g2_content_type": "picture", "scheduled": "2050-11-22T16:00:00+0000"}} ] }, { "guid": "__any_value__", "type": "planning", "headline": "test headline", - "planning_date": "2024-11-23T12:00:00+0000", + "planning_date": "2050-11-23T12:00:00+0000", "event_item": "#EVENT3._id#", "recurrence_id": "#EVENT1.recurrence_id#", "coverages": [ - {"planning": {"g2_content_type": "text", "scheduled": "2024-11-23T15:00:00+0000"}}, - {"planning": {"g2_content_type": "picture", "scheduled": "2024-11-23T16:00:00+0000"}} + {"planning": {"g2_content_type": "text", "scheduled": "2050-11-23T15:00:00+0000"}}, + {"planning": {"g2_content_type": "picture", "scheduled": "2050-11-23T16:00:00+0000"}} ] }]} """ @@ -228,13 +228,13 @@ Feature: Recurring Events & Planning "coverages": [{ "g2_content_type": "text", "news_coverage_status": "ncostat:int", - "scheduled": "2024-11-22T15:00:00.000Z", + "scheduled": "2050-11-22T15:00:00.000Z", "slugline": "test slugline", "headline": "test headline" }, { "g2_content_type": "picture", "news_coverage_status": "ncostat:int", - "scheduled": "2024-11-22T16:00:00.000Z", + "scheduled": "2050-11-22T16:00:00.000Z", "slugline": "test slugline", "headline": "test headline" }] @@ -248,22 +248,22 @@ Feature: Recurring Events & Planning {"_items": [{ "guid": "__any_value__", "type": "planning", - "planning_date": "2024-11-22T12:00:00+0000", + "planning_date": "2050-11-22T12:00:00+0000", "event_item": "#EVENT2._id#", "recurrence_id": "#EVENT1.recurrence_id#", "coverages": [ - {"planning": {"g2_content_type": "text", "scheduled": "2024-11-22T15:00:00+0000"}}, - {"planning": {"g2_content_type": "picture", "scheduled": "2024-11-22T16:00:00+0000"}} + {"planning": {"g2_content_type": "text", "scheduled": "2050-11-22T15:00:00+0000"}}, + {"planning": {"g2_content_type": "picture", "scheduled": "2050-11-22T16:00:00+0000"}} ] }, { "guid": "__any_value__", "type": "planning", - "planning_date": "2024-11-23T12:00:00+0000", + "planning_date": "2050-11-23T12:00:00+0000", "event_item": "#EVENT3._id#", "recurrence_id": "#EVENT1.recurrence_id#", "coverages": [ - {"planning": {"g2_content_type": "text", "scheduled": "2024-11-23T15:00:00+0000"}}, - {"planning": {"g2_content_type": "picture", "scheduled": "2024-11-23T16:00:00+0000"}} + {"planning": {"g2_content_type": "text", "scheduled": "2050-11-23T15:00:00+0000"}}, + {"planning": {"g2_content_type": "picture", "scheduled": "2050-11-23T16:00:00+0000"}} ] }]} """ @@ -278,13 +278,13 @@ Feature: Recurring Events & Planning "coverages": [{ "g2_content_type": "text", "news_coverage_status": "ncostat:int", - "scheduled": "2024-11-22T15:00:00.000Z", + "scheduled": "2050-11-22T15:00:00.000Z", "slugline": "test slugline", "headline": "test headline" }, { "g2_content_type": "picture", "news_coverage_status": "ncostat:int", - "scheduled": "2024-11-22T16:00:00.000Z", + "scheduled": "2050-11-22T16:00:00.000Z", "slugline": "test slugline", "headline": "test headline" }] @@ -298,32 +298,32 @@ Feature: Recurring Events & Planning {"_items": [{ "guid": "__any_value__", "type": "planning", - "planning_date": "2024-11-21T12:00:00+0000", + "planning_date": "2050-11-21T12:00:00+0000", "event_item": "#EVENT1._id#", "recurrence_id": "#EVENT1.recurrence_id#", "coverages": [ - {"planning": {"g2_content_type": "text", "scheduled": "2024-11-21T15:00:00+0000"}}, - {"planning": {"g2_content_type": "picture", "scheduled": "2024-11-21T16:00:00+0000"}} + {"planning": {"g2_content_type": "text", "scheduled": "2050-11-21T15:00:00+0000"}}, + {"planning": {"g2_content_type": "picture", "scheduled": "2050-11-21T16:00:00+0000"}} ] }, { "guid": "__any_value__", "type": "planning", - "planning_date": "2024-11-22T12:00:00+0000", + "planning_date": "2050-11-22T12:00:00+0000", "event_item": "#EVENT2._id#", "recurrence_id": "#EVENT1.recurrence_id#", "coverages": [ - {"planning": {"g2_content_type": "text", "scheduled": "2024-11-22T15:00:00+0000"}}, - {"planning": {"g2_content_type": "picture", "scheduled": "2024-11-22T16:00:00+0000"}} + {"planning": {"g2_content_type": "text", "scheduled": "2050-11-22T15:00:00+0000"}}, + {"planning": {"g2_content_type": "picture", "scheduled": "2050-11-22T16:00:00+0000"}} ] }, { "guid": "__any_value__", "type": "planning", - "planning_date": "2024-11-23T12:00:00+0000", + "planning_date": "2050-11-23T12:00:00+0000", "event_item": "#EVENT3._id#", "recurrence_id": "#EVENT1.recurrence_id#", "coverages": [ - {"planning": {"g2_content_type": "text", "scheduled": "2024-11-23T15:00:00+0000"}}, - {"planning": {"g2_content_type": "picture", "scheduled": "2024-11-23T16:00:00+0000"}} + {"planning": {"g2_content_type": "text", "scheduled": "2050-11-23T15:00:00+0000"}}, + {"planning": {"g2_content_type": "picture", "scheduled": "2050-11-23T16:00:00+0000"}} ] }]} """ From 963d60af67d7136949cb4bdeae6c4d4f2de5c4e0 Mon Sep 17 00:00:00 2001 From: Nikola Stojanovic <68916411+dzonidoo@users.noreply.github.com> Date: Mon, 2 Dec 2024 09:16:40 +0100 Subject: [PATCH 4/8] fix zindex for activiry modal (#2133) --- index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/index.ts b/index.ts index acb81d7f0..64cebf9e3 100644 --- a/index.ts +++ b/index.ts @@ -44,6 +44,7 @@ function configurePlanning(superdesk) { .activity('planning.addto', { label: gettext('Add to Planning'), modal: true, + zIndex: '1050', icon: 'calendar-list', priority: 3000, controller: ctrl.AddToPlanningController, From 685e86fd02b0cd80e30786f7c57956e8b86558c8 Mon Sep 17 00:00:00 2001 From: Konstantin Markov Date: Tue, 3 Dec 2024 13:39:41 +0200 Subject: [PATCH 5/8] Fix coverage data saving/rendering from embed plan (#2143) (#2145) --- client/api/events.ts | 3 + .../Assignments/AssignmentEditor.tsx | 168 +-- .../EditCoverageAssignmentModal.tsx | 77 +- .../Contacts/ContactsPreviewList.tsx | 1 - .../SelectSearchContactsField/index.tsx | 39 +- client/components/Modal/Footer.tsx | 15 +- client/components/Modal/Header.tsx | 14 +- .../UI/Form/ColouredValueInput/index.tsx | 2 +- client/validators/index.ts | 4 +- package-lock.json | 1221 +++++++++-------- 10 files changed, 806 insertions(+), 738 deletions(-) diff --git a/client/api/events.ts b/client/api/events.ts index 398f0dac1..703a6cc3b 100644 --- a/client/api/events.ts +++ b/client/api/events.ts @@ -192,6 +192,7 @@ function update(original: IEventItem, updates: Partial): Promise): Promise { const events = modifySaveResponseForClient(response); + events[0].associated_plannings = updates.associated_plannings; + return planningApi.planning.searchGetAll({ recurrence_id: events[0].recurrence_id, event_item: events[0].recurrence_id != null ? null : events.map((event) => event._id), diff --git a/client/components/Assignments/AssignmentEditor.tsx b/client/components/Assignments/AssignmentEditor.tsx index 543f2bbf4..47ed1033b 100644 --- a/client/components/Assignments/AssignmentEditor.tsx +++ b/client/components/Assignments/AssignmentEditor.tsx @@ -1,9 +1,8 @@ import React from 'react'; -import PropTypes from 'prop-types'; import {connect} from 'react-redux'; import {get, cloneDeep, isEqual} from 'lodash'; -import {getItemInArrayById, getUsersForDesk, getDesksForUser, gettext} from '../../utils'; +import {getUsersForDesk, getDesksForUser, gettext} from '../../utils'; import {getUserInterfaceLanguageFromCV} from '../../utils/users'; import {validateItem} from '../../validators'; import {ASSIGNMENTS, ITEM_TYPE} from '../../constants'; @@ -17,33 +16,71 @@ import { } from '../UI/Form'; import {ContactsPreviewList, SelectSearchContactsField} from '../Contacts'; import {superdeskApi} from '../../superdeskApi'; +import {IDesk, IUser} from 'superdesk-api'; +import {IAssignmentPriority} from 'interfaces'; + +interface IProps { + value: any; + onChange?: (...args: any) => any; + users: Array; + desks?: Array; + coverageProviders?: Array; + priorities?: Array; + priorityPrefix?: string; + disableDeskSelection?: boolean; + disableUserSelection?: boolean; + popupContainer?: () => HTMLElement; + showDesk?: boolean; + showPriority?: boolean; + className?: string; + onValidate?: (diff: any, errors: any) => void; + setValid?: (valid: boolean) => void; + contactTypes?: Array; +} + +interface IState { + userId: string; + user: IUser; + deskId: string; + desk: IDesk; + filteredUsers: Array; + filteredDesks: Array; + priorityQcode: string; + priority: any; + errors: any; + providerQcode: string | null; + contactType: {qcode?: string; assignable?: string; name?: string} | null; + contactId: string; + contact?: any | null; +} + +export class AssignmentEditorComponent extends React.Component { + FIELDS: {[key: string]: string}; -export class AssignmentEditorComponent extends React.Component { constructor(props) { super(props); this.FIELDS = { USER: 'assigned_to.user', DESK: 'assigned_to.desk', - PRIORITY: `${props.priorityPrefix}priority`, + PRIORITY: `${props.priorityPrefix ?? ''}priority`, PROVIDER: 'assigned_to.coverage_provider', CONTACT: 'assigned_to.contact', }; const userId = get(props.value, this.FIELDS.USER); - const user = getItemInArrayById(props.users, userId); + const user = props.users.find((x) => x._id === userId); const deskId = get(props.value, this.FIELDS.DESK); - const desk = getItemInArrayById(props.desks, deskId); + const desk = props.desks.find((x) => x._id === deskId); const filteredUsers = getUsersForDesk(desk, props.users); const filteredDesks = getDesksForUser(user, props.desks); const priorityQcode = get(props.value, this.FIELDS.PRIORITY); - const priority = getItemInArrayById(props.priorities, priorityQcode, 'qcode'); + const priority = props.priorities.find((x) => x.qcode === priorityQcode); const contactId = get(props.value, this.FIELDS.CONTACT); - const errors = {}; this.state = { @@ -75,15 +112,13 @@ export class AssignmentEditorComponent extends React.Component { this.onChange(null, null); if (!this.state.priorityQcode) { this.onPriorityChange( - this.FIELDS.PRIORITY, - getItemInArrayById(this.props.priorities, ASSIGNMENTS.DEFAULT_PRIORITY, 'qcode') + this.props.priorities.find((x) => x.qcode === ASSIGNMENTS.DEFAULT_PRIORITY), ); } - if (get(this.props.value, this.FIELDS.PROVIDER)) { - this.setContactTypeAndId(get( - this.props.value, - `${this.FIELDS.PROVIDER}.contact_type`) + if (this.props.value[this.FIELDS.PROVIDER]) { + this.setContactTypeAndId( + this.props.value[`${this.FIELDS.PROVIDER}.contact_type`], ); } } @@ -94,21 +129,21 @@ export class AssignmentEditorComponent extends React.Component { const priorityQcode = get(nextProps.value, this.FIELDS.PRIORITY); if (userId !== this.state.userId) { - this.onUserChange(null, getItemInArrayById(nextProps.users, userId)); + this.onUserChange(nextProps.users.find((x) => x._id === userId)); } if (deskId !== this.state.deskId) { - this.onDeskChange(null, getItemInArrayById(nextProps.desks, deskId)); + this.onDeskChange(nextProps.desks.find((x) => x._id === deskId)); } if (priorityQcode && priorityQcode !== this.state.priorityQcode) { - this.onPriorityChange(null, getItemInArrayById(nextProps.priorities, priorityQcode, 'qcode')); + this.onPriorityChange(nextProps.priorities.find((x) => x.qcode === priorityQcode)); } } - componentDidUpdate(prevProps, prevState) { - const currentContactType = get(this.state, 'contactType') || {}; - const prevContactType = get(prevState, 'contactType') || {}; + componentDidUpdate(_prevProps, prevState) { + const currentContactType = this.state.contactType ?? {}; + const prevContactType = prevState.contactType ?? {}; if (currentContactType.qcode !== prevContactType.qcode) { if (currentContactType.assignable) { @@ -119,13 +154,14 @@ export class AssignmentEditorComponent extends React.Component { } } - onChange(field, value, state = {}) { + onChange(field, value, state: Partial = {}) { const errors = cloneDeep(this.state.errors); const combinedState = { ...this.state, ...state, }; - const newState = cloneDeep(state); + + const newState = cloneDeep(state as IState); this.props.onValidate(combinedState, errors); newState.errors = errors; @@ -142,11 +178,11 @@ export class AssignmentEditorComponent extends React.Component { this.props.setValid(isEqual(errors, {})); } - onUserChange(field, value) { - const userId = get(value, '_id'); + onUserChange(value) { + const userId = value?._id; if (userId !== this.state.userId) { - this.onChange(this.FIELDS.USER, get(value, '_id'), { + this.onChange(this.FIELDS.USER, userId, { userId: userId, user: value, filteredDesks: getDesksForUser(value, this.props.desks), @@ -155,7 +191,7 @@ export class AssignmentEditorComponent extends React.Component { } onContactChange(contact) { - const contactId = get(contact, '_id'); + const contactId = contact?._id; if (contactId !== this.state.contactId) { this.onChange( @@ -173,11 +209,11 @@ export class AssignmentEditorComponent extends React.Component { }); } - onDeskChange(field, value) { - const deskId = get(value, '_id'); + onDeskChange(value) { + const deskId = value?._id; if (deskId !== this.state.deskId) { - this.onChange(this.FIELDS.DESK, get(value, '_id'), { + this.onChange(this.FIELDS.DESK, deskId, { deskId: deskId, desk: value, filteredUsers: getUsersForDesk(value, this.props.users), @@ -185,11 +221,11 @@ export class AssignmentEditorComponent extends React.Component { } } - onPriorityChange(field, value) { - const priorityQcode = get(value, 'qcode'); + onPriorityChange(value) { + const priorityQcode = value?.qcode; if (priorityQcode !== this.state.priorityQcode) { - this.onChange(this.FIELDS.PRIORITY, get(value, 'qcode'), { + this.onChange(this.FIELDS.PRIORITY, priorityQcode, { priorityQcode: priorityQcode, priority: value, }); @@ -206,11 +242,7 @@ export class AssignmentEditorComponent extends React.Component { } let contactId = this.state.contactId; - let contactType = getItemInArrayById( - this.props.contactTypes, - contactTypeQcode, - 'qcode' - ) || null; + const contactType = this.props.contactTypes.find((x) => x.qcode === contactTypeQcode) ?? null; if (this.state.contactType && contactTypeQcode !== this.state.contactType.qcode) { contactId = null; @@ -222,11 +254,11 @@ export class AssignmentEditorComponent extends React.Component { }); } - onProviderChange(field, value) { - const providerQcode = get(value, 'qcode'); + onProviderChange(value) { + const providerQcode = value.qcode; if (providerQcode !== this.state.providerQcode) { - this.setContactTypeAndId(get(value, 'contact_type')); + this.setContactTypeAndId(value.contact_type); this.onChange(this.FIELDS.PROVIDER, value); } } @@ -239,8 +271,8 @@ export class AssignmentEditorComponent extends React.Component { popupContainer, disableDeskSelection, disableUserSelection, - showDesk, - showPriority, + showDesk = true, + showPriority = true, className, } = this.props; const {SelectUser} = superdeskApi.components; @@ -253,7 +285,9 @@ export class AssignmentEditorComponent extends React.Component { field={this.FIELDS.DESK} label={gettext('Desk')} value={this.state.desk} - onChange={this.onDeskChange} + onChange={(_field, val) => { + this.onDeskChange(val); + }} options={this.state.filteredDesks} labelField="name" keyField="_id" @@ -270,8 +304,10 @@ export class AssignmentEditorComponent extends React.Component { { + this.onProviderChange(val); + }} options={coverageProviders} labelField="name" keyField="qcode" @@ -289,7 +325,6 @@ export class AssignmentEditorComponent extends React.Component { /> )}
{ - this.onUserChange(null, user); + this.onUserChange(user); }} autoFocus={false} horizontalSpacing={true} @@ -320,7 +356,9 @@ export class AssignmentEditorComponent extends React.Component { field={this.FIELDS.PRIORITY} label={gettext('Assignment Priority')} value={this.state.priority} - onChange={this.onPriorityChange} + onChange={(_field, val) => { + this.onPriorityChange(val); + }} options={priorities} iconName="priority-label" noMargin={true} @@ -335,38 +373,6 @@ export class AssignmentEditorComponent extends React.Component { } } -AssignmentEditorComponent.propTypes = { - value: PropTypes.object, - onChange: PropTypes.func, - onClose: PropTypes.func, - users: PropTypes.array, - desks: PropTypes.array, - coverageProviders: PropTypes.array, - priorities: PropTypes.array, - priorityPrefix: PropTypes.string, - fromCoverage: PropTypes.bool, - disableDeskSelection: PropTypes.bool, - disableUserSelection: PropTypes.bool, - popupContainer: PropTypes.func, - showDesk: PropTypes.bool, - showPriority: PropTypes.bool, - className: PropTypes.string, - onValidate: PropTypes.func, - setValid: PropTypes.func, - contactTypes: PropTypes.arrayOf(PropTypes.shape({ - qcode: PropTypes.string, - name: PropTypes.string, - assignable: PropTypes.bool, - })), -}; - -AssignmentEditorComponent.defaultProps = { - priorityPrefix: '', - fromCoverage: false, - showDesk: true, - showPriority: true, -}; - const mapStateToProps = (state) => ({ contactTypes: getContactTypes(state), }); diff --git a/client/components/Assignments/EditCoverageAssignmentModal.tsx b/client/components/Assignments/EditCoverageAssignmentModal.tsx index 0367175ea..a31385d2a 100644 --- a/client/components/Assignments/EditCoverageAssignmentModal.tsx +++ b/client/components/Assignments/EditCoverageAssignmentModal.tsx @@ -1,5 +1,4 @@ import React from 'react'; -import PropTypes from 'prop-types'; import {connect} from 'react-redux'; import {cloneDeep, set} from 'lodash'; @@ -10,14 +9,39 @@ import * as selectors from '../../selectors'; import {Modal} from '../'; import {Button} from '../UI'; import {AssignmentEditor} from './AssignmentEditor'; +import {IDesk, IUser} from 'superdesk-api'; +import {ICoverageProvider} from 'interfaces'; + +interface IProps { + handleHide: () => void; + modalProps: { + field?: string; + value?: any; + onChange?: (...args: any) => any; + priorityPrefix?: string; + disableDeskSelection?: boolean; + disableUserSelection?: boolean; + setCoverageDefaultDesk?: (...args: any) => void; + }; + users?: Array; + desks?: Array; + coverageProviders?: Array; + priorities?: Array; +} + +interface IState { + valid?: boolean; + submitting?: boolean; + diff?: any; +} -export class EditCoverageAssignmentModalComponent extends React.Component { +export class EditCoverageAssignmentModalComponent extends React.Component { constructor(props) { super(props); this.state = { submitting: false, - diff: cloneDeep(props.modalProps.value) || {}, + diff: cloneDeep(props.modalProps.value) ?? {}, valid: true, }; @@ -27,10 +51,10 @@ export class EditCoverageAssignmentModalComponent extends React.Component { } onChange(field, value) { - const diff = cloneDeep(this.state.diff); + const diffCopy = cloneDeep(this.state.diff); - set(diff, field, value); - this.setState({diff}); + set(diffCopy, field, value); + this.setState({diff: diffCopy}); } onSubmit() { @@ -46,24 +70,9 @@ export class EditCoverageAssignmentModalComponent extends React.Component { } render() { - const { - handleHide, - users, - desks, - coverageProviders, - priorities, - } = this.props; - const { - priorityPrefix, - disableDeskSelection, - disableUserSelection, - } = this.props.modalProps; - - const { - valid, - submitting, - diff, - } = this.state; + const {handleHide, users, desks, coverageProviders, priorities} = this.props; + const {priorityPrefix = '', disableDeskSelection, disableUserSelection} = this.props.modalProps; + const {valid, submitting, diff} = this.state; return ( ({ users: selectors.general.users(state), desks: selectors.general.desks(state), diff --git a/client/components/Contacts/ContactsPreviewList.tsx b/client/components/Contacts/ContactsPreviewList.tsx index 27c75e594..2fe947c4c 100644 --- a/client/components/Contacts/ContactsPreviewList.tsx +++ b/client/components/Contacts/ContactsPreviewList.tsx @@ -14,7 +14,6 @@ interface IProps { contacts?: {[key: string]: IContactItem}; contactIds: Array; scrollInView?: boolean; - scrollIntoViewOptions: any; tabEnabled?: boolean; readOnly?: boolean; inner?: boolean; diff --git a/client/components/Contacts/SelectSearchContactsField/index.tsx b/client/components/Contacts/SelectSearchContactsField/index.tsx index 9a8b37700..ee9392305 100644 --- a/client/components/Contacts/SelectSearchContactsField/index.tsx +++ b/client/components/Contacts/SelectSearchContactsField/index.tsx @@ -1,12 +1,24 @@ import React from 'react'; -import PropTypes from 'prop-types'; import {SelectListPopup} from './SelectListPopup'; import {LineInput, Label} from '../../UI/Form'; import './style.scss'; +interface IProps { + value: Array; + label?: string; + readOnly?: boolean; + onChange: (field: string, value: any) => void; + required?: boolean; + onAdd?: (...args: any) => void; + onAddText?: string; + onFocus?: (...args: any) => void; + contactType?: string; + minLengthPopup?: number; + placeholder?: string; +} -export class SelectSearchContactsField extends React.Component { +export class SelectSearchContactsField extends React.Component { constructor(props) { super(props); this.state = {openSelectPopup: true}; @@ -33,7 +45,7 @@ export class SelectSearchContactsField extends React.Component { onFocus, readOnly, contactType, - minLengthPopup, + minLengthPopup = 1, placeholder, ...props } = this.props; @@ -61,24 +73,3 @@ export class SelectSearchContactsField extends React.Component { ); } } - -SelectSearchContactsField.propTypes = { - value: PropTypes.arrayOf(PropTypes.string), - label: PropTypes.string, - readOnly: PropTypes.bool, - onChange: PropTypes.func, - required: PropTypes.bool, - field: PropTypes.string.isRequired, - onAdd: PropTypes.func, - onAddText: PropTypes.string, - onFocus: PropTypes.func, - contactType: PropTypes.string, - minLengthPopup: PropTypes.number, - placeholder: PropTypes.string, -}; - -SelectSearchContactsField.defaultProps = { - required: false, - readOnly: false, - minLengthPopup: 1, -}; diff --git a/client/components/Modal/Footer.tsx b/client/components/Modal/Footer.tsx index c1aba0f93..a16fffd83 100644 --- a/client/components/Modal/Footer.tsx +++ b/client/components/Modal/Footer.tsx @@ -1,9 +1,13 @@ import React from 'react'; -import PropTypes from 'prop-types'; import {Modal as _Modal} from 'react-bootstrap'; import classNames from 'classnames'; -export default function Footer({children, flex}) { +interface IProps { + children: React.ReactNode; + flex?: boolean; +} + +export default function Footer({children, flex}: IProps) { return ( <_Modal.Footer className={classNames( @@ -16,10 +20,3 @@ export default function Footer({children, flex}) { ); } -Footer.propTypes = { - children: PropTypes.oneOfType([ - PropTypes.element, - PropTypes.arrayOf(PropTypes.element), - ]), - flex: PropTypes.bool, -}; diff --git a/client/components/Modal/Header.tsx b/client/components/Modal/Header.tsx index 363e37295..24aaf7052 100644 --- a/client/components/Modal/Header.tsx +++ b/client/components/Modal/Header.tsx @@ -1,18 +1,14 @@ import React from 'react'; -import PropTypes from 'prop-types'; import {Modal as _Modal} from 'react-bootstrap'; -export default function Header({children}) { +interface IProps { + children: React.ReactNode; +} + +export default function Header({children}: IProps) { return ( <_Modal.Header className="modal__header modal__header--flex"> {children} ); } - -Header.propTypes = { - children: PropTypes.oneOfType([ - PropTypes.element, - PropTypes.arrayOf(PropTypes.element), - ]), -}; diff --git a/client/components/UI/Form/ColouredValueInput/index.tsx b/client/components/UI/Form/ColouredValueInput/index.tsx index 85f383e3d..83c713685 100644 --- a/client/components/UI/Form/ColouredValueInput/index.tsx +++ b/client/components/UI/Form/ColouredValueInput/index.tsx @@ -18,7 +18,7 @@ interface IProps { required?: boolean; labelLeft?: boolean; clearable?: boolean; - noMargin?: string; + noMargin?: boolean; iconName: string; row?: boolean; noValueString?: string diff --git a/client/validators/index.ts b/client/validators/index.ts index 0d77b7797..3d5a35940 100644 --- a/client/validators/index.ts +++ b/client/validators/index.ts @@ -45,12 +45,12 @@ export const validateItem = ({ profileName, diff, item = {}, - formProfiles, + formProfiles = null, errors, messages = [], fields = null, ignoreDateValidation = false, - fieldsToValidate, + fieldsToValidate = null, }) => ( (dispatch, getState) => { const profiles = formProfiles ? formProfiles : selectors.forms.profiles(getState()); diff --git a/package-lock.json b/package-lock.json index 002e55fa1..abfa2cf7c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,52 +5,53 @@ "requires": true, "dependencies": { "@babel/code-frame": { - "version": "7.24.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", - "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "dev": true, "requires": { - "@babel/highlight": "^7.24.2", + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", "picocolors": "^1.0.0" } }, + "@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "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==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", "dev": true }, - "@babel/highlight": { - "version": "7.24.2", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", - "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", + "@babel/parser": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", + "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "@babel/types": "^7.26.0" } }, - "@babel/parser": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", - "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==", - "dev": true - }, "@babel/runtime": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.4.tgz", - "integrity": "sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", + "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", "requires": { "regenerator-runtime": "^0.14.0" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" - } + } + }, + "@babel/types": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" } }, "@colors/colors": { @@ -109,6 +110,14 @@ "dev": true, "requires": { "type-detect": "4.0.8" + }, + "dependencies": { + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + } } }, "@sinonjs/formatio": { @@ -132,9 +141,9 @@ } }, "@sinonjs/text-encoding": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz", - "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==", + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.3.tgz", + "integrity": "sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA==", "dev": true }, "@socket.io/component-emitter": { @@ -155,11 +164,6 @@ "react-sortable-hoc": "^1.11.0" }, "dependencies": { - "date-fns": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.7.0.tgz", - "integrity": "sha512-wxYp2PGoUDN5ZEACc61aOtYFvSsJUylIvCjpjDOqM1UDaKIIuMJ9fAnMYFHV3TQaDpfTVxhwNK/GiCaHKuemTA==" - }, "lodash": { "version": "4.17.19", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", @@ -332,18 +336,18 @@ "dev": true }, "@types/node": { - "version": "20.12.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", - "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==", + "version": "22.10.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.1.tgz", + "integrity": "sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==", "dev": true, "requires": { - "undici-types": "~5.26.4" + "undici-types": "~6.20.0" } }, "@types/prop-types": { - "version": "15.7.12", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", - "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", + "version": "15.7.13", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", + "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==", "dev": true }, "@types/react": { @@ -414,18 +418,18 @@ }, "dependencies": { "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, "requires": { - "ms": "2.1.2" + "ms": "^2.1.3" } }, "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true } } @@ -462,28 +466,25 @@ }, "dependencies": { "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, "requires": { - "ms": "2.1.2" + "ms": "^2.1.3" } }, "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, "semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true } } }, @@ -1059,9 +1060,9 @@ }, "dependencies": { "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", "dev": true } } @@ -1257,6 +1258,13 @@ "requires": { "core-js": "^2.4.0", "regenerator-runtime": "^0.11.0" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + } } }, "balanced-match": { @@ -1304,6 +1312,12 @@ "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", "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", @@ -1546,16 +1560,6 @@ "safe-buffer": "^5.2.1" }, "dependencies": { - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -1727,9 +1731,9 @@ } }, "caniuse-db": { - "version": "1.0.30001639", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30001639.tgz", - "integrity": "sha512-Y4Ewb9g+3jQXeWXoe5c5nMtzrAl49d9ffxe+PANiSpjCWLkPTMsW56vCW1xYKqLOLt/IO3HCEOaMPpq5F7BqOw==", + "version": "1.0.30001685", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30001685.tgz", + "integrity": "sha512-GEmYIzUxhOOWCWNAPzSG28u0vTYjWpxLwtjj9eelxB+RbRa3ChE/N/pz3jL4QPHIHhct4yr9Ml9JQjqaEpCZhg==", "dev": true }, "caseless": { @@ -1835,9 +1839,9 @@ }, "dependencies": { "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true } } @@ -1913,15 +1917,29 @@ "dev": true }, "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.6.tgz", + "integrity": "sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==", "dev": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1" + }, + "dependencies": { + "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 + } } }, + "circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", + "dev": true + }, "clap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz", @@ -2211,18 +2229,32 @@ } }, "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.5.tgz", + "integrity": "sha512-bQJ0YRck5ak3LgtnpKkiabX5pNF7tMUh1BSy2ZBOTh0Dim0BUu6aPPwByIns6/A5Prh8PufSPerMDUklpzes2Q==", "dev": true, "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", + "bytes": "3.1.2", + "compressible": "~2.0.18", "debug": "2.6.9", + "negotiator": "~0.6.4", "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", + "safe-buffer": "5.2.1", "vary": "~1.1.2" + }, + "dependencies": { + "negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "dev": true + }, + "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 + } } }, "concat-map": { @@ -2253,38 +2285,6 @@ "finalhandler": "1.1.2", "parseurl": "~1.3.3", "utils-merge": "1.0.1" - }, - "dependencies": { - "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" - } - }, - "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 - } } }, "connect-history-api-fallback": { @@ -2351,9 +2351,9 @@ "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==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", "dev": true }, "cookie-signature": { @@ -2398,9 +2398,9 @@ }, "dependencies": { "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", "dev": true } } @@ -2433,9 +2433,9 @@ } }, "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", "dev": true, "requires": { "nice-try": "^1.0.4", @@ -2446,22 +2446,23 @@ } }, "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.1.tgz", + "integrity": "sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==", "dev": true, "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" + "browserify-cipher": "^1.0.1", + "browserify-sign": "^4.2.3", + "create-ecdh": "^4.0.4", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "diffie-hellman": "^5.0.3", + "hash-base": "~3.0.4", + "inherits": "^2.0.4", + "pbkdf2": "^3.1.2", + "public-encrypt": "^4.0.3", + "randombytes": "^2.1.0", + "randomfill": "^1.0.4" } }, "cson": { @@ -2704,13 +2705,15 @@ } }, "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==", - "dev": true, - "requires": { - "@babel/runtime": "^7.21.0" - } + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.7.0.tgz", + "integrity": "sha512-wxYp2PGoUDN5ZEACc61aOtYFvSsJUylIvCjpjDOqM1UDaKIIuMJ9fAnMYFHV3TQaDpfTVxhwNK/GiCaHKuemTA==" + }, + "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 }, "dateformat": { "version": "1.0.12", @@ -2946,9 +2949,9 @@ }, "dependencies": { "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", "dev": true } } @@ -3184,15 +3187,15 @@ "dev": true }, "electron-to-chromium": { - "version": "1.4.816", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.816.tgz", - "integrity": "sha512-EKH5X5oqC6hLmiS7/vYtZHZFTNdhsYG5NVPRN6Yn0kQHNBlT59+xSM8HBy66P5fxWpKgZbPqb+diC64ng295Jw==", + "version": "1.5.67", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.67.tgz", + "integrity": "sha512-nz88NNBsD7kQSAGGJyp8hS6xSPtWwqNogA0mjtc2nUYeEf3nURK9qpV18TuBdDmEDgVWotS8Wkzf+V52dSQ/LQ==", "dev": true }, "elliptic": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.5.tgz", - "integrity": "sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==", + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", "dev": true, "requires": { "bn.js": "^4.11.9", @@ -3205,9 +3208,9 @@ }, "dependencies": { "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", "dev": true } } @@ -3239,9 +3242,9 @@ } }, "engine.io": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.4.tgz", - "integrity": "sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg==", + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.2.tgz", + "integrity": "sha512-gmNvsYi9C8iErnZdVcJnvCpSKbWTt1E8+JZo8b+daLninywUWi5NQ5STSHZ9rFjFO7imNcvb8Pc5pe/wMR5xEw==", "dev": true, "requires": { "@types/cookie": "^0.4.1", @@ -3249,42 +3252,34 @@ "@types/node": ">=10.0.0", "accepts": "~1.3.4", "base64id": "2.0.0", - "cookie": "~0.4.1", + "cookie": "~0.7.2", "cors": "~2.8.5", "debug": "~4.3.1", "engine.io-parser": "~5.2.1", - "ws": "~8.11.0" + "ws": "~8.17.1" }, "dependencies": { - "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 - }, "debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } + "ms": "^2.1.3" } + }, + "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 } } }, "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==", + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", + "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", "dev": true }, "enhanced-resolve": { @@ -3414,9 +3409,9 @@ } }, "es-abstract": { - "version": "1.23.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", - "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "version": "1.23.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.5.tgz", + "integrity": "sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ==", "dev": true, "requires": { "array-buffer-byte-length": "^1.0.1", @@ -3434,7 +3429,7 @@ "function.prototype.name": "^1.1.6", "get-intrinsic": "^1.2.4", "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.3", + "globalthis": "^1.0.4", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2", "has-proto": "^1.0.3", @@ -3450,10 +3445,10 @@ "is-string": "^1.0.7", "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", + "object-inspect": "^1.13.3", "object-keys": "^1.1.1", "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.2", + "regexp.prototype.flags": "^1.5.3", "safe-array-concat": "^1.1.2", "safe-regex-test": "^1.0.3", "string.prototype.trim": "^1.2.9", @@ -3518,14 +3513,14 @@ } }, "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dev": true, "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" } }, "es5-ext": { @@ -3612,9 +3607,9 @@ } }, "escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true }, "escape-html": { @@ -3686,12 +3681,12 @@ }, "dependencies": { "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, "requires": { - "ms": "2.1.2" + "ms": "^2.1.3" } }, "eslint-visitor-keys": { @@ -3707,9 +3702,9 @@ "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==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, "semver": { @@ -3831,9 +3826,9 @@ "dev": true }, "esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, "requires": { "estraverse": "^5.1.0" @@ -3899,9 +3894,9 @@ "dev": true }, "eventemitter3": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", - "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true }, "events": { @@ -3954,22 +3949,6 @@ "shebang-command": "^1.2.0", "which": "^1.2.9" } - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", - "dev": true } } }, @@ -4063,9 +4042,9 @@ } }, "express": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", + "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", "dev": true, "requires": { "accepts": "~1.3.8", @@ -4073,7 +4052,7 @@ "body-parser": "1.20.2", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.6.0", + "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -4108,11 +4087,32 @@ "dev": true }, "cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "dev": true }, + "encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true + }, + "finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + } + }, "path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", @@ -4283,18 +4283,18 @@ }, "dependencies": { "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" } }, "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "requires": { "to-regex-range": "^5.0.1" @@ -4307,12 +4307,12 @@ "dev": true }, "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "requires": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" } }, @@ -4479,18 +4479,35 @@ } }, "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "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.4.1", + "on-finished": "~2.3.0", "parseurl": "~1.3.3", - "statuses": "2.0.1", + "statuses": "~1.5.0", "unpipe": "~1.0.0" + }, + "dependencies": { + "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-up": { @@ -4990,6 +5007,12 @@ "path-is-absolute": "^1.0.0" } }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, "minimatch": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", @@ -5002,12 +5025,12 @@ } }, "gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.1.0.tgz", + "integrity": "sha512-FQoVQnqcdk4hVM4JN1eromaun4iuS34oStkdlLENLdpULsuQcTyXj8w7ayhuUfPwEYZ1ZOooOTT6fdA9Vmx/RA==", "dev": true, "requires": { - "get-intrinsic": "^1.1.3" + "get-intrinsic": "^1.2.4" } }, "graceful-fs": { @@ -5535,10 +5558,13 @@ } }, "has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "dev": true + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.1.0.tgz", + "integrity": "sha512-QLdzI9IIO1Jg7f9GT1gXpPpXArAn6cS31R1eEZqz08Gc+uQ8/XiqHWt17Fiw+2p6oTTIq5GXEpQkAlA88YRl/Q==", + "dev": true, + "requires": { + "call-bind": "^1.0.7" + } }, "has-symbols": { "version": "1.0.3", @@ -5591,27 +5617,15 @@ } }, "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.5.tgz", + "integrity": "sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==", "dev": true, "requires": { "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" + "safe-buffer": "^5.2.1" }, "dependencies": { - "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" - } - }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -5662,6 +5676,14 @@ "requires": { "eventemitter3": "3.1.0", "url-toolkit": "^2.1.6" + }, + "dependencies": { + "eventemitter3": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", + "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==", + "dev": true + } } }, "hmac-drbg": { @@ -5882,14 +5904,6 @@ "eventemitter3": "^4.0.0", "follow-redirects": "^1.0.0", "requires-port": "^1.0.0" - }, - "dependencies": { - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - } } }, "http-proxy-middleware": { @@ -6090,9 +6104,9 @@ "dev": true }, "ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true }, "immutable": { @@ -6342,6 +6356,15 @@ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, + "is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, "is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", @@ -6361,13 +6384,13 @@ } }, "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.0.tgz", + "integrity": "sha512-kR5g0+dXf/+kXnqI+lu0URKYPKgICtHGGNCDSB10AaUFj3o/HkB3u7WfpRBJGFopxxY0oH3ux7ZsDjLtK7xqvw==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bind": "^1.0.7", + "has-tostringtag": "^1.0.2" } }, "is-buffer": { @@ -6391,12 +6414,12 @@ } }, "is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "dev": true, "requires": { - "hasown": "^2.0.0" + "hasown": "^2.0.2" } }, "is-data-descriptor": { @@ -6460,6 +6483,15 @@ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true }, + "is-finalizationregistry": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.0.tgz", + "integrity": "sha512-qfMdqbAQEwBw78ZyReKnlA8ezmPdb9BemzIIip/JkjaZUhitfXDkkr+3QTboW0JrSXT1QWyYShpvnNHGZ4c4yA==", + "dev": true, + "requires": { + "call-bind": "^1.0.7" + } + }, "is-finite": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", @@ -6472,6 +6504,15 @@ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, + "is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, "is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -6490,6 +6531,12 @@ "lower-case": "^1.1.0" } }, + "is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true + }, "is-negative-zero": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", @@ -6515,12 +6562,13 @@ } }, "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.0.tgz", + "integrity": "sha512-KVSZV0Dunv9DTPkhXwcZ3Q+tUc9TsaE1ZwX5J2WMvsSGS6Md8TFPun5uwh0yRdrNerI6vf/tbJxqSx4c1ZI1Lw==", "dev": true, "requires": { - "has-tostringtag": "^1.0.0" + "call-bind": "^1.0.7", + "has-tostringtag": "^1.0.2" } }, "is-path-cwd": { @@ -6574,13 +6622,15 @@ "dev": true }, "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.0.tgz", + "integrity": "sha512-B6ohK4ZmoftlUe+uvenXSbPJFo6U37BH7oO1B3nQH8f/7h27N56s85MhUtbFJAziz5dcmuR3i8ovUl35zp8pFA==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bind": "^1.0.7", + "gopd": "^1.1.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" } }, "is-resolvable": { @@ -6589,6 +6639,12 @@ "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", "dev": true }, + "is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true + }, "is-shared-array-buffer": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", @@ -6605,12 +6661,13 @@ "dev": true }, "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.0.tgz", + "integrity": "sha512-PlfzajuF9vSo5wErv3MJAKD/nqf9ngAs1NFQYm16nUYFO2IzxJ2hcm+IOCg+EEopdykNNUhVq5cz35cAUxU8+g==", "dev": true, "requires": { - "has-tostringtag": "^1.0.0" + "call-bind": "^1.0.7", + "has-tostringtag": "^1.0.2" } }, "is-subset": { @@ -6667,6 +6724,12 @@ "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", "dev": true }, + "is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true + }, "is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -6676,6 +6739,16 @@ "call-bind": "^1.0.2" } }, + "is-weakset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + } + }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -6907,9 +6980,9 @@ "dev": true }, "karma": { - "version": "6.4.3", - "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.3.tgz", - "integrity": "sha512-LuucC/RE92tJ8mlCwqEoRWXP38UMAqpnq98vktmS9SznSoUPPUJQbc91dHcxcunROvfQjdORVA/YFviH+Xci9Q==", + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.4.tgz", + "integrity": "sha512-LrtUxbdvt1gOpo3gxG+VAJlJAEMhbWlM4YrFQgql98FwF7+K8K12LYO4hnDdUkNjeztYrOXEMqgTajSWgmtI/w==", "dev": true, "requires": { "@colors/colors": "1.5.0", @@ -6938,12 +7011,6 @@ "yargs": "^16.1.1" }, "dependencies": { - "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 - }, "braces": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", @@ -6953,15 +7020,6 @@ "fill-range": "^7.1.1" } }, - "debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, "fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -6977,10 +7035,10 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "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==", + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, "rimraf": { @@ -6992,31 +7050,6 @@ "glob": "^7.1.3" } }, - "socket.io": { - "version": "4.7.5", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.5.tgz", - "integrity": "sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA==", - "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" - } - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -7037,12 +7070,6 @@ "requires": { "is-number": "^7.0.0" } - }, - "ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", - "dev": true } } }, @@ -7445,31 +7472,25 @@ "streamroller": "^3.1.5" }, "dependencies": { - "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==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, "requires": { - "ms": "2.1.2" + "ms": "^2.1.3" } }, "flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", "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==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true } } @@ -7526,12 +7547,13 @@ } }, "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==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, "requires": { - "yallist": "^4.0.0" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, "make-error": { @@ -7693,9 +7715,9 @@ }, "dependencies": { "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", "dev": true } } @@ -7805,9 +7827,9 @@ "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==" }, "moment-timezone": { - "version": "0.5.45", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.45.tgz", - "integrity": "sha512-HIWmqA86KcmCAhnMAN0wuDOARV/525R2+lOLotuGFzn4HO+FH+/645z2wx0Dt3iDv6/p61SIvKnDstISainhLQ==", + "version": "0.5.46", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.46.tgz", + "integrity": "sha512-ZXm9b36esbe7OmdABqIWJuBBiLLwAjrN7CE+7sYdCCx82Nabt1wHDj8TVseS59QIlfFPbOoiBPm6ca9BioG4hw==", "requires": { "moment": "^2.29.4" } @@ -7869,9 +7891,9 @@ "dev": true }, "nan": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.20.0.tgz", - "integrity": "sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==", + "version": "2.22.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.22.0.tgz", + "integrity": "sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw==", "dev": true }, "nanomatch": { @@ -8135,16 +8157,6 @@ "which": "^1.2.9" } }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -8159,12 +8171,6 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", - "dev": true } } }, @@ -8345,9 +8351,9 @@ } }, "object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", "dev": true }, "object-is": { @@ -8640,16 +8646,6 @@ "safe-buffer": "^5.2.1" }, "dependencies": { - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -8826,9 +8822,9 @@ "dev": true }, "path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz", + "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==", "dev": true, "requires": { "isarray": "0.0.1" @@ -8868,9 +8864,9 @@ "dev": true }, "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "dev": true }, "picomatch": { @@ -9559,14 +9555,25 @@ } }, "prop-types-exact": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/prop-types-exact/-/prop-types-exact-1.2.0.tgz", - "integrity": "sha512-K+Tk3Kd9V0odiXFP9fwDHUYRyvK3Nun3GVyPapSIs5OBkITAm15W0CPFD/YKTkMUAbc0b9CUwRQp2ybiBIq+eA==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/prop-types-exact/-/prop-types-exact-1.2.5.tgz", + "integrity": "sha512-wHDhA5TSSvU07gdzsdeT/FZg6zay94K4Y7swSK4YsRG3moWB0Qsp9g1Y5BBausP1HF8K4UeVe2Xt7ZFJByKp6A==", "dev": true, "requires": { - "has": "^1.0.3", - "object.assign": "^4.1.0", - "reflect.ownkeys": "^0.2.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "isarray": "^2.0.5", + "object.assign": "^4.1.5", + "reflect.ownkeys": "^1.1.4" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + } } }, "prop-types-extra": { @@ -9610,10 +9617,13 @@ "dev": true }, "psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.14.0.tgz", + "integrity": "sha512-Syk1bnf6fRZ9wQs03AtKJHcM12cKbOLo9L8JtCCdYj5/DTsHmTyXM4BK5ouWeG2P6kZ4nmFvuNTdtaqfobCOCg==", + "dev": true, + "requires": { + "punycode": "^2.3.1" + } }, "public-encrypt": { "version": "4.0.3", @@ -9630,9 +9640,9 @@ }, "dependencies": { "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", "dev": true } } @@ -9788,12 +9798,6 @@ "unpipe": "1.0.0" }, "dependencies": { - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true - }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -10198,6 +10202,21 @@ "integrity": "sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q==", "dev": true }, + "reflect.getprototypeof": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.7.tgz", + "integrity": "sha512-bMvFGIUKlc/eSfXNX+aZ+EL95/EgZzuwA0OBPTbZZDEJw/0AkentjMuM1oiRfwHrshqk4RzdgiTg5CcDalXN5g==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "which-builtin-type": "^1.1.4" + } + }, "reflect.ownkeys": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz", @@ -10205,9 +10224,9 @@ "dev": true }, "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, "regex-cache": { "version": "0.4.4", @@ -10228,15 +10247,15 @@ } }, "regexp.prototype.flags": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", - "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", + "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", "dev": true, "requires": { - "call-bind": "^1.0.6", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-errors": "^1.3.0", - "set-function-name": "^2.0.1" + "set-function-name": "^2.0.2" } }, "regexpp": { @@ -10440,9 +10459,9 @@ "dev": true }, "rfdc": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", - "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", "dev": true }, "right-align": { @@ -10699,6 +10718,16 @@ "y18n": "^3.2.1", "yargs-parser": "^5.0.1" } + }, + "yargs-parser": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", + "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "object.assign": "^4.1.0" + } } } }, @@ -11213,6 +11242,65 @@ } } }, + "socket.io": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.1.tgz", + "integrity": "sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "cors": "~2.8.5", + "debug": "~4.3.2", + "engine.io": "~6.6.0", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" + }, + "dependencies": { + "debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "requires": { + "ms": "^2.1.3" + } + }, + "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 + } + } + }, + "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" + }, + "dependencies": { + "debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "requires": { + "ms": "^2.1.3" + } + }, + "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 + } + } + }, "socket.io-parser": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", @@ -11223,29 +11311,19 @@ "debug": "~4.3.1" }, "dependencies": { - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha512-jPatnhd33viNplKjqXKRkGU345p263OIWzDL2wH3LGIGp5Kojo+uXizHmOADRvhGFFTnJqX3jBAKP6vvmSDKcA==" - }, "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, "requires": { - "ms": "2.1.2" + "ms": "^2.1.3" } }, - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha512-c2cu3UxbI+b6kR3fy0nRnAhodsvR9dx7U5+znCOzdj6IfP3upFURTr0Xl5BlQZNKZjEtxrmVyfSdeE3O57smoQ==" - }, "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true } } @@ -11508,25 +11586,19 @@ "fs-extra": "^8.1.0" }, "dependencies": { - "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==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, "requires": { - "ms": "2.1.2" + "ms": "^2.1.3" } }, "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true } } @@ -11983,16 +12055,6 @@ "integrity": "sha512-4JD/Ivzg7PoW8NzdrBSr3UFwC9mHgvI7Z6z3QGBsSHgKaRTUDmyZAAKJo2UbG1kUVfS9WS8bi36N49U1xw43DA==", "dev": true }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, "mimic-fn": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", @@ -12092,17 +12154,11 @@ "requires": { "mkdirp": "^0.5.1" } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", - "dev": true } } }, "superdesk-core": { - "version": "github:superdesk/superdesk-client-core#be5cb155334b485016df9eb9dea78e8e9848dedf", + "version": "github:superdesk/superdesk-client-core#10b6b862c550260b1248fcd6eeec730a29a300f9", "from": "github:superdesk/superdesk-client-core#develop", "dev": true, "requires": { @@ -12227,6 +12283,15 @@ "integrity": "sha512-DTt3GhOUDKhh4ONwIJW4lmhyotQmV2LjNlGK/J2hkwUcqcbKkCLAdJPtxQnxnlc7SR3f1CEXCyMmc7WLUsWbNA==", "dev": true }, + "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==", + "dev": true, + "requires": { + "@babel/runtime": "^7.21.0" + } + }, "json5": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", @@ -12768,9 +12833,9 @@ } }, "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", "dev": true }, "type-fest": { @@ -12823,9 +12888,9 @@ } }, "typed-array-byte-offset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", - "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.3.tgz", + "integrity": "sha512-GsvTyUHTriq6o/bHcTd0vM7OQ9JEdlvluu9YISaA7+KzDzPaIzEeDFNkTfhdE3MYcNhNi0vq/LlegYgIs5yPAw==", "dev": true, "requires": { "available-typed-arrays": "^1.0.7", @@ -12833,21 +12898,22 @@ "for-each": "^0.3.3", "gopd": "^1.0.1", "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "is-typed-array": "^1.1.13", + "reflect.getprototypeof": "^1.0.6" } }, "typed-array-length": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", - "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", "dev": true, "requires": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-proto": "^1.0.3", "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0" + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" } }, "typedarray": { @@ -12880,9 +12946,9 @@ } }, "ua-parser-js": { - "version": "0.7.37", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.37.tgz", - "integrity": "sha512-xV8kqRKM+jhMvcHWUKthV9fNebIzrNy//2O9ZwWcfiBFR5f25XVZPLlEajk/sf3Ra15V92isyQqnIEXRDaZWEA==", + "version": "0.7.39", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.39.tgz", + "integrity": "sha512-IZ6acm6RhQHNibSt7+c09hhvsKy9WUr4DVbeq9U8o71qxyYtJpQeDxQnMrVqnIFMLcQjHO0I9wgfO2vIahht4w==", "dev": true }, "uglify-js": { @@ -13026,9 +13092,9 @@ "dev": true }, "undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", "dev": true }, "union-value": { @@ -14073,6 +14139,47 @@ "is-symbol": "^1.0.3" } }, + "which-builtin-type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.0.tgz", + "integrity": "sha512-I+qLGQ/vucCby4tf5HsLmGueEla4ZhwTBSqaooS+Y0BuxN4Cp+okmGuV+8mXZ84KDI9BA+oklo+RzKg0ONdSUA==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + } + } + }, + "which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "requires": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + } + }, "which-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", @@ -14080,9 +14187,9 @@ "dev": true }, "which-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.16.tgz", + "integrity": "sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ==", "dev": true, "requires": { "available-typed-arrays": "^1.0.7", @@ -14181,9 +14288,9 @@ } }, "ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "dev": true }, "xml-char-classes": { @@ -14211,9 +14318,9 @@ "dev": true }, "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", "dev": true }, "yargs": { @@ -14229,33 +14336,13 @@ "string-width": "^4.2.0", "y18n": "^5.0.5", "yargs-parser": "^20.2.2" - }, - "dependencies": { - "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 - } } }, "yargs-parser": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", - "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", - "dev": true, - "requires": { - "camelcase": "^3.0.0", - "object.assign": "^4.1.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==", - "dev": true - } - } + "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 }, "yn": { "version": "2.0.0", From e0cfeeedb88a689b3f08b265a2b07eb052b7b0e7 Mon Sep 17 00:00:00 2001 From: Nikola Stojanovic <68916411+dzonidoo@users.noreply.github.com> Date: Thu, 5 Dec 2024 14:09:29 +0100 Subject: [PATCH 6/8] replace bootstrap modal with the one from ui framework (#2148) --- .../components/AddToPlanningModal/index.tsx | 43 ++++++++----------- 1 file changed, 17 insertions(+), 26 deletions(-) diff --git a/client/components/AddToPlanningModal/index.tsx b/client/components/AddToPlanningModal/index.tsx index 1785d9869..eda3e3fc5 100644 --- a/client/components/AddToPlanningModal/index.tsx +++ b/client/components/AddToPlanningModal/index.tsx @@ -2,7 +2,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import {connect} from 'react-redux'; -import {Modal} from '../index'; +import {Modal} from 'superdesk-ui-framework/react'; import {Button} from '../UI'; import {AddToPlanningApp} from '../../apps'; @@ -55,39 +55,30 @@ export class AddToPlanningComponent extends React.Component { return ( - + visible={true} + onHide={actionInProgress ? null : handleCancel} + size="x-large" + contentPadding="none" + headerTemplate={(

{gettext('Select an existing Planning Item or create a new one')}

- {actionInProgress ? null : ( - - - - )} -
- - -
- this.dom.popupContainer} - onCancel={handleCancel} - /> -
-
- - + )} + footerTemplate={(