diff --git a/docs/development.md b/docs/development.md index ceec2870..6061da4a 100644 --- a/docs/development.md +++ b/docs/development.md @@ -143,3 +143,31 @@ git push -u origin feature/my-feature # Open a PR to development ``` + +## Local Mail Integration (Greenmail) + +Procest's mail-driven flows (case intake from citizen emails, notifications to behandelaars) can be demoed locally against the [Greenmail](https://greenmail-mail-test.github.io/greenmail/) container that ships with the OpenRegister dev stack. + +**Seed test data:** +```bash +bash ../openregister/docker/mail/seed-mail.sh +bash ../openregister/docker/mail/seed-cases.sh +``` + +`seed-mail.sh` sends 11 realistic Dutch case-management emails (omgevingsvergunning, kapvergunning, welstandsadvies, klachten, deadline-herinneringen) across 5 auto-created accounts. + +`seed-cases.sh` creates matching procest cases (`ZK-2026-0142` dakkapel Kerkstraat 42, `ZK-2026-0034` kapvergunning Wilhelminastraat) + their caseTypes in the Procest register, so the OpenRegister mail sidebar can link incoming emails to existing cases. + +**Configure the Nextcloud Mail app** (Settings → Mail → Add account → Manual): + +| Setting | Value | +|---------|-------| +| IMAP host | `greenmail` (from container) or `localhost` (from host) | +| IMAP port | `3143` | +| SMTP host | same as IMAP | +| SMTP port | `3025` | +| Security | None | +| Username | email address (e.g. `behandelaar@test.local`) | +| Password | same as username | + +Accounts created by the seed: `admin@test.local`, `behandelaar@test.local`, `coordinator@test.local`, `burger@test.local`, `leverancier@test.local`. diff --git a/l10n/en.js b/l10n/en.js index 98d51c52..948b68ab 100644 --- a/l10n/en.js +++ b/l10n/en.js @@ -19,6 +19,7 @@ OC.L10N.register( "Add document" : "Add document", "Add note" : "Add note", "All" : "All", + "All cases active" : "All cases active", "All caught up!" : "All caught up!", "All your items are completed" : "All your items are completed", "Are you sure you want to delete this case?" : "Are you sure you want to delete this case?", @@ -41,15 +42,14 @@ OC.L10N.register( "Cannot publish:" : "Cannot publish:", "Case" : "Case", "Case Information" : "Case Information", + "Case Map" : "Case Map", "Case Type" : "Case Type", "Case Type Management" : "Case Type Management", "Case Types" : "Case Types", - "Case created with type \" : "Case created with type \", "Case handler" : "Case handler", "Case schema" : "Case schema", "Case sensitive" : "Case sensitive", "Case type" : "Case type", - "Case type \" : "Case type \", "Case type has expired (valid until {date})" : "Case type has expired (valid until {date})", "Case type is not yet valid (valid from {date})" : "Case type is not yet valid (valid from {date})", "Case type is required" : "Case type is required", @@ -58,6 +58,7 @@ OC.L10N.register( "Cases" : "Cases", "Cases and tasks assigned to you will appear here" : "Cases and tasks assigned to you will appear here", "Cases by Status" : "Cases by Status", + "Cases by status" : "Cases by status", "Cases overview" : "Cases overview", "Change status" : "Change status", "Change status..." : "Change status...", @@ -81,6 +82,7 @@ OC.L10N.register( "Days elapsed" : "Days elapsed", "Deadline" : "Deadline", "Deadline & Timing" : "Deadline & Timing", + "Deadline Alerts" : "Deadline Alerts", "Deadline extended from {old} to {new}. Reason: {reason}" : "Deadline extended from {old} to {new}. Reason: {reason}", "Deadline: {date}" : "Deadline: {date}", "Decision schema" : "Decision schema", @@ -155,6 +157,7 @@ OC.L10N.register( "Make decision" : "Make decision", "Manage case types and their configurations" : "Manage case types and their configurations", "Manage cases and workflows" : "Manage cases and workflows", + "Map" : "Map", "Mapping saved successfully" : "Mapping saved successfully", "Missing required fields: {fields}" : "Missing required fields: {fields}", "Must be a valid ISO 8601 duration (e.g., P28D)" : "Must be a valid ISO 8601 duration (e.g., P28D)", @@ -175,7 +178,9 @@ OC.L10N.register( "No cases found" : "No cases found", "No deadline" : "No deadline", "No file content received." : "No file content received.", + "No SLA targets" : "No SLA targets", "No items assigned to you" : "No items assigned to you", + "No items found" : "No items found", "No mapping configured for %s" : "No mapping configured for %s", "No open cases" : "No open cases", "No overdue cases" : "No overdue cases", @@ -185,6 +190,7 @@ OC.L10N.register( "No result recorded yet" : "No result recorded yet", "No settings available yet" : "No settings available yet", "No status types defined. Add at least one to publish this case type." : "No status types defined. Add at least one to publish this case type.", + "No task reminders" : "No task reminders", "No tasks found" : "No tasks found", "No tasks yet" : "No tasks yet", "No widgets configured" : "No widgets configured", @@ -198,6 +204,7 @@ OC.L10N.register( "Only locked documents may be edited." : "Only locked documents may be edited.", "Only published case types can be set as default" : "Only published case types can be set as default", "Open Cases" : "Open Cases", + "Open cases" : "Open cases", "OpenRegister is required" : "OpenRegister is required", "Optional description..." : "Optional description...", "Order" : "Order", @@ -253,6 +260,7 @@ OC.L10N.register( "Role type" : "Role type", "Save" : "Save", "Save the case type first before adding status types." : "Save the case type first before adding status types.", + "SLA Compliance" : "SLA Compliance", "Saved successfully" : "Saved successfully", "Schema ID" : "Schema ID", "Secret" : "Secret", @@ -269,13 +277,12 @@ OC.L10N.register( "Source Register" : "Source Register", "Source Schema" : "Source Schema", "Stakeholder" : "Stakeholder", + "Stalled Cases" : "Stalled Cases", "Start" : "Start", "Start date" : "Start date", "Started" : "Started", "Status" : "Status", "Status Timeline" : "Status Timeline", - "Status changed from \" : "Status changed from \", - "Status changed to \" : "Status changed to \", "Status schema" : "Status schema", "Status type" : "Status type", "Status type name is required" : "Status type name is required", @@ -284,6 +291,7 @@ OC.L10N.register( "Subject" : "Subject", "TASK" : "TASK", "Task" : "Task", + "Task Due Reminders" : "Task Due Reminders", "Task Information" : "Task Information", "Task schema" : "Task schema", "Tasks" : "Tasks", @@ -318,12 +326,15 @@ OC.L10N.register( "Valid from" : "Valid from", "Valid until" : "Valid until", "Value Mappings (enum translations)" : "Value Mappings (enum translations)", + "View all" : "View all", "View all activity" : "View all activity", + "View all deadline alerts" : "View all deadline alerts", "View all my work" : "View all my work", "View all overdue" : "View all overdue", "View case" : "View case", "View task" : "View task", "Welcome to Procest! Get started by creating your first case or task using the buttons above." : "Welcome to Procest! Get started by creating your first case or task using the buttons above.", + "Work Queue" : "Work Queue", "Welcome to Procest! Get started by creating your first case type in Settings." : "Welcome to Procest! Get started by creating your first case type in Settings.", "When heeftAlleAutorisaties is false, autorisaties must be specified." : "When heeftAlleAutorisaties is false, autorisaties must be specified.", "When heeftAlleAutorisaties is true, autorisaties must not be specified. When heeftAlleAutorisaties is false, autorisaties must be specified." : "When heeftAlleAutorisaties is true, autorisaties must not be specified. When heeftAlleAutorisaties is false, autorisaties must be specified.", diff --git a/l10n/en.json b/l10n/en.json index a62343e1..c6e0f7f5 100644 --- a/l10n/en.json +++ b/l10n/en.json @@ -18,6 +18,7 @@ "Add document": "Add document", "Add note": "Add note", "All": "All", + "All cases active": "All cases active", "All caught up!": "All caught up!", "All your items are completed": "All your items are completed", "Are you sure you want to delete this case?": "Are you sure you want to delete this case?", @@ -40,15 +41,14 @@ "Cannot publish:": "Cannot publish:", "Case": "Case", "Case Information": "Case Information", + "Case Map": "Case Map", "Case Type": "Case Type", "Case Type Management": "Case Type Management", "Case Types": "Case Types", - "Case created with type \\": "Case created with type \\", "Case handler": "Case handler", "Case schema": "Case schema", "Case sensitive": "Case sensitive", "Case type": "Case type", - "Case type \\": "Case type \\", "Case type has expired (valid until {date})": "Case type has expired (valid until {date})", "Case type is not yet valid (valid from {date})": "Case type is not yet valid (valid from {date})", "Case type is required": "Case type is required", @@ -57,6 +57,7 @@ "Cases": "Cases", "Cases and tasks assigned to you will appear here": "Cases and tasks assigned to you will appear here", "Cases by Status": "Cases by Status", + "Cases by status": "Cases by status", "Cases overview": "Cases overview", "Change status": "Change status", "Change status...": "Change status...", @@ -80,6 +81,7 @@ "Days elapsed": "Days elapsed", "Deadline": "Deadline", "Deadline & Timing": "Deadline & Timing", + "Deadline Alerts": "Deadline Alerts", "Deadline extended from {old} to {new}. Reason: {reason}": "Deadline extended from {old} to {new}. Reason: {reason}", "Deadline: {date}": "Deadline: {date}", "Decision schema": "Decision schema", @@ -154,6 +156,7 @@ "Make decision": "Make decision", "Manage case types and their configurations": "Manage case types and their configurations", "Manage cases and workflows": "Manage cases and workflows", + "Map": "Map", "Mapping saved successfully": "Mapping saved successfully", "Missing required fields: {fields}": "Missing required fields: {fields}", "Must be a valid ISO 8601 duration (e.g., P28D)": "Must be a valid ISO 8601 duration (e.g., P28D)", @@ -174,7 +177,9 @@ "No cases found": "No cases found", "No deadline": "No deadline", "No file content received.": "No file content received.", + "No SLA targets": "No SLA targets", "No items assigned to you": "No items assigned to you", + "No items found": "No items found", "No mapping configured for %s": "No mapping configured for %s", "No open cases": "No open cases", "No overdue cases": "No overdue cases", @@ -184,6 +189,7 @@ "No result recorded yet": "No result recorded yet", "No settings available yet": "No settings available yet", "No status types defined. Add at least one to publish this case type.": "No status types defined. Add at least one to publish this case type.", + "No task reminders": "No task reminders", "No tasks found": "No tasks found", "No tasks yet": "No tasks yet", "No widgets configured": "No widgets configured", @@ -197,6 +203,7 @@ "Only locked documents may be edited.": "Only locked documents may be edited.", "Only published case types can be set as default": "Only published case types can be set as default", "Open Cases": "Open Cases", + "Open cases": "Open cases", "OpenRegister is required": "OpenRegister is required", "Optional description...": "Optional description...", "Order": "Order", @@ -252,6 +259,7 @@ "Role type": "Role type", "Save": "Save", "Save the case type first before adding status types.": "Save the case type first before adding status types.", + "SLA Compliance": "SLA Compliance", "Saved successfully": "Saved successfully", "Schema ID": "Schema ID", "Secret": "Secret", @@ -268,13 +276,12 @@ "Source Register": "Source Register", "Source Schema": "Source Schema", "Stakeholder": "Stakeholder", + "Stalled Cases": "Stalled Cases", "Start": "Start", "Start date": "Start date", "Started": "Started", "Status": "Status", "Status Timeline": "Status Timeline", - "Status changed from \\": "Status changed from \\", - "Status changed to \\": "Status changed to \\", "Status schema": "Status schema", "Status type": "Status type", "Status type name is required": "Status type name is required", @@ -283,6 +290,7 @@ "Subject": "Subject", "TASK": "TASK", "Task": "Task", + "Task Due Reminders": "Task Due Reminders", "Task Information": "Task Information", "Task schema": "Task schema", "Tasks": "Tasks", @@ -317,12 +325,15 @@ "Valid from": "Valid from", "Valid until": "Valid until", "Value Mappings (enum translations)": "Value Mappings (enum translations)", + "View all": "View all", "View all activity": "View all activity", + "View all deadline alerts": "View all deadline alerts", "View all my work": "View all my work", "View all overdue": "View all overdue", "View case": "View case", "View task": "View task", "Welcome to Procest! Get started by creating your first case or task using the buttons above.": "Welcome to Procest! Get started by creating your first case or task using the buttons above.", + "Work Queue": "Work Queue", "Welcome to Procest! Get started by creating your first case type in Settings.": "Welcome to Procest! Get started by creating your first case type in Settings.", "When heeftAlleAutorisaties is false, autorisaties must be specified.": "When heeftAlleAutorisaties is false, autorisaties must be specified.", "When heeftAlleAutorisaties is true, autorisaties must not be specified. When heeftAlleAutorisaties is false, autorisaties must be specified.": "When heeftAlleAutorisaties is true, autorisaties must not be specified. When heeftAlleAutorisaties is false, autorisaties must be specified.", diff --git a/l10n/nl.js b/l10n/nl.js index 07a3d086..2f99608d 100644 --- a/l10n/nl.js +++ b/l10n/nl.js @@ -19,6 +19,7 @@ OC.L10N.register( "Add document" : "Document toevoegen", "Add note" : "Notitie toevoegen", "All" : "Alle", + "All cases active" : "Alle zaken actief", "All caught up!" : "Alles bijgewerkt!", "All your items are completed" : "Al uw items zijn afgerond", "Are you sure you want to delete this case?" : "Weet u zeker dat u deze zaak wilt verwijderen?", @@ -41,15 +42,14 @@ OC.L10N.register( "Cannot publish:" : "Kan niet publiceren:", "Case" : "Zaak", "Case Information" : "Zaak informatie", + "Case Map" : "Zakenkaart", "Case Type" : "Zaaktype", "Case Type Management" : "Zaaktype beheer", "Case Types" : "Zaaktypen", - "Case created with type \" : "Zaak aangemaakt met type \", "Case handler" : "Behandelaar", "Case schema" : "Zaak schema", "Case sensitive" : "Hoofdlettergevoelig", "Case type" : "Zaaktype", - "Case type \" : "Zaaktype \", "Case type has expired (valid until {date})" : "Zaaktype is verlopen (geldig tot {date})", "Case type is not yet valid (valid from {date})" : "Zaaktype is nog niet geldig (geldig vanaf {date})", "Case type is required" : "Zaaktype is verplicht", @@ -58,6 +58,7 @@ OC.L10N.register( "Cases" : "Zaken", "Cases and tasks assigned to you will appear here" : "Zaken en taken die aan u zijn toegewezen verschijnen hier", "Cases by Status" : "Zaken per status", + "Cases by status" : "Zaken per status", "Cases overview" : "Zaken overzicht", "Change status" : "Status wijzigen", "Change status..." : "Status wijzigen...", @@ -81,6 +82,7 @@ OC.L10N.register( "Days elapsed" : "Dagen verstreken", "Deadline" : "Deadline", "Deadline & Timing" : "Deadline & Timing", + "Deadline Alerts" : "Deadline-waarschuwingen", "Deadline extended from {old} to {new}. Reason: {reason}" : "Deadline verlengd van {old} naar {new}. Reden: {reason}", "Deadline: {date}" : "Deadline: {date}", "Decision schema" : "Besluit schema", @@ -155,6 +157,7 @@ OC.L10N.register( "Make decision" : "Besluit nemen", "Manage case types and their configurations" : "Beheer zaaktypen en hun configuraties", "Manage cases and workflows" : "Beheer zaken en workflows", + "Map" : "Kaart", "Mapping saved successfully" : "Mapping succesvol opgeslagen", "Missing required fields: {fields}" : "Verplichte velden ontbreken: {fields}", "Must be a valid ISO 8601 duration (e.g., P28D)" : "Moet een geldige ISO 8601 duur zijn (bijv. P28D)", @@ -175,7 +178,9 @@ OC.L10N.register( "No cases found" : "Geen zaken gevonden", "No deadline" : "Geen deadline", "No file content received." : "Geen bestandsinhoud ontvangen.", + "No SLA targets" : "Geen SLA-doelen", "No items assigned to you" : "Geen items aan u toegewezen", + "No items found" : "Geen items gevonden", "No mapping configured for %s" : "Geen mapping geconfigureerd voor %s", "No open cases" : "Geen openstaande zaken", "No overdue cases" : "Geen openstaande zaken", @@ -185,6 +190,7 @@ OC.L10N.register( "No result recorded yet" : "Nog geen resultaat geregistreerd", "No settings available yet" : "Nog geen instellingen beschikbaar", "No status types defined. Add at least one to publish this case type." : "Geen statustypen gedefinieerd. Voeg er ten minste één toe om dit zaaktype te publiceren.", + "No task reminders" : "Geen taakherinneringen", "No tasks found" : "Geen taken gevonden", "No tasks yet" : "Nog geen taken", "No widgets configured" : "Geen widgets geconfigureerd", @@ -198,6 +204,7 @@ OC.L10N.register( "Only locked documents may be edited." : "Alleen vergrendelde documenten mogen bewerkt worden.", "Only published case types can be set as default" : "Alleen gepubliceerde zaaktypen kunnen als standaard worden ingesteld", "Open Cases" : "Open zaken", + "Open cases" : "Open zaken", "OpenRegister is required" : "OpenRegister is vereist", "Optional description..." : "Optionele omschrijving...", "Order" : "Volgorde", @@ -253,6 +260,7 @@ OC.L10N.register( "Role type" : "Roltype", "Save" : "Opslaan", "Save the case type first before adding status types." : "Sla het zaaktype eerst op voordat u statustypen toevoegt.", + "SLA Compliance" : "SLA-naleving", "Saved successfully" : "Succesvol opgeslagen", "Schema ID" : "Schema ID", "Secret" : "Geheim", @@ -269,13 +277,12 @@ OC.L10N.register( "Source Register" : "Bronregister", "Source Schema" : "Bronschema", "Stakeholder" : "Belanghebbende", + "Stalled Cases" : "Vastgelopen zaken", "Start" : "Start", "Start date" : "Startdatum", "Started" : "Gestart", "Status" : "Status", "Status Timeline" : "Status tijdlijn", - "Status changed from \" : "Status gewijzigd van \", - "Status changed to \" : "Status gewijzigd naar \", "Status schema" : "Status schema", "Status type" : "Statustype", "Status type name is required" : "Statustype naam is verplicht", @@ -284,6 +291,7 @@ OC.L10N.register( "Subject" : "Onderwerp", "TASK" : "TAAK", "Task" : "Taak", + "Task Due Reminders" : "Taakherinneringen", "Task Information" : "Taak informatie", "Task schema" : "Taak schema", "Tasks" : "Taken", @@ -318,12 +326,15 @@ OC.L10N.register( "Valid from" : "Geldig vanaf", "Valid until" : "Geldig tot", "Value Mappings (enum translations)" : "Waarde mappings (enum vertalingen)", + "View all" : "Alles bekijken", "View all activity" : "Alle activiteit bekijken", + "View all deadline alerts" : "Alle deadlines bekijken", "View all my work" : "Al mijn werk bekijken", "View all overdue" : "Alle openstaande bekijken", "View case" : "Bekijk zaak", "View task" : "Bekijk taak", "Welcome to Procest! Get started by creating your first case or task using the buttons above." : "Welkom bij Procest! Begin door uw eerste zaak of taak aan te maken met de knoppen hierboven.", + "Work Queue" : "Werkvoorraad", "Welcome to Procest! Get started by creating your first case type in Settings." : "Welkom bij Procest! Begin door uw eerste zaaktype aan te maken in Instellingen.", "When heeftAlleAutorisaties is false, autorisaties must be specified." : "Wanneer heeftAlleAutorisaties false is, dan moet autorisaties opgegeven worden.", "When heeftAlleAutorisaties is true, autorisaties must not be specified. When heeftAlleAutorisaties is false, autorisaties must be specified." : "Wanneer heeftAlleAutorisaties op true staat, mag autorisaties niet opgegeven worden. Indien heeftAlleAutorisaties false is, dan moet autorisaties opgegeven worden.", diff --git a/l10n/nl.json b/l10n/nl.json index 90b22c7f..82a645cb 100644 --- a/l10n/nl.json +++ b/l10n/nl.json @@ -18,6 +18,7 @@ "Add document": "Document toevoegen", "Add note": "Notitie toevoegen", "All": "Alle", + "All cases active": "Alle zaken actief", "All caught up!": "Alles bijgewerkt!", "All your items are completed": "Al uw items zijn afgerond", "Are you sure you want to delete this case?": "Weet u zeker dat u deze zaak wilt verwijderen?", @@ -40,15 +41,14 @@ "Cannot publish:": "Kan niet publiceren:", "Case": "Zaak", "Case Information": "Zaak informatie", + "Case Map": "Zakenkaart", "Case Type": "Zaaktype", "Case Type Management": "Zaaktype beheer", "Case Types": "Zaaktypen", - "Case created with type \\": "Zaak aangemaakt met type \\", "Case handler": "Behandelaar", "Case schema": "Zaak schema", "Case sensitive": "Hoofdlettergevoelig", "Case type": "Zaaktype", - "Case type \\": "Zaaktype \\", "Case type has expired (valid until {date})": "Zaaktype is verlopen (geldig tot {date})", "Case type is not yet valid (valid from {date})": "Zaaktype is nog niet geldig (geldig vanaf {date})", "Case type is required": "Zaaktype is verplicht", @@ -57,6 +57,7 @@ "Cases": "Zaken", "Cases and tasks assigned to you will appear here": "Zaken en taken die aan u zijn toegewezen verschijnen hier", "Cases by Status": "Zaken per status", + "Cases by status": "Zaken per status", "Cases overview": "Zaken overzicht", "Change status": "Status wijzigen", "Change status...": "Status wijzigen...", @@ -80,6 +81,7 @@ "Days elapsed": "Dagen verstreken", "Deadline": "Deadline", "Deadline & Timing": "Deadline & Timing", + "Deadline Alerts": "Deadline-waarschuwingen", "Deadline extended from {old} to {new}. Reason: {reason}": "Deadline verlengd van {old} naar {new}. Reden: {reason}", "Deadline: {date}": "Deadline: {date}", "Decision schema": "Besluit schema", @@ -154,6 +156,7 @@ "Make decision": "Besluit nemen", "Manage case types and their configurations": "Beheer zaaktypen en hun configuraties", "Manage cases and workflows": "Beheer zaken en workflows", + "Map": "Kaart", "Mapping saved successfully": "Mapping succesvol opgeslagen", "Missing required fields: {fields}": "Verplichte velden ontbreken: {fields}", "Must be a valid ISO 8601 duration (e.g., P28D)": "Moet een geldige ISO 8601 duur zijn (bijv. P28D)", @@ -174,7 +177,9 @@ "No cases found": "Geen zaken gevonden", "No deadline": "Geen deadline", "No file content received.": "Geen bestandsinhoud ontvangen.", + "No SLA targets": "Geen SLA-doelen", "No items assigned to you": "Geen items aan u toegewezen", + "No items found": "Geen items gevonden", "No mapping configured for %s": "Geen mapping geconfigureerd voor %s", "No open cases": "Geen openstaande zaken", "No overdue cases": "Geen openstaande zaken", @@ -184,6 +189,7 @@ "No result recorded yet": "Nog geen resultaat geregistreerd", "No settings available yet": "Nog geen instellingen beschikbaar", "No status types defined. Add at least one to publish this case type.": "Geen statustypen gedefinieerd. Voeg er ten minste één toe om dit zaaktype te publiceren.", + "No task reminders": "Geen taakherinneringen", "No tasks found": "Geen taken gevonden", "No tasks yet": "Nog geen taken", "No widgets configured": "Geen widgets geconfigureerd", @@ -197,6 +203,7 @@ "Only locked documents may be edited.": "Alleen vergrendelde documenten mogen bewerkt worden.", "Only published case types can be set as default": "Alleen gepubliceerde zaaktypen kunnen als standaard worden ingesteld", "Open Cases": "Open zaken", + "Open cases": "Open zaken", "OpenRegister is required": "OpenRegister is vereist", "Optional description...": "Optionele omschrijving...", "Order": "Volgorde", @@ -252,6 +259,7 @@ "Role type": "Roltype", "Save": "Opslaan", "Save the case type first before adding status types.": "Sla het zaaktype eerst op voordat u statustypen toevoegt.", + "SLA Compliance": "SLA-naleving", "Saved successfully": "Succesvol opgeslagen", "Schema ID": "Schema ID", "Secret": "Geheim", @@ -268,13 +276,12 @@ "Source Register": "Bronregister", "Source Schema": "Bronschema", "Stakeholder": "Belanghebbende", + "Stalled Cases": "Vastgelopen zaken", "Start": "Start", "Start date": "Startdatum", "Started": "Gestart", "Status": "Status", "Status Timeline": "Status tijdlijn", - "Status changed from \\": "Status gewijzigd van \\", - "Status changed to \\": "Status gewijzigd naar \\", "Status schema": "Status schema", "Status type": "Statustype", "Status type name is required": "Statustype naam is verplicht", @@ -283,6 +290,7 @@ "Subject": "Onderwerp", "TASK": "TAAK", "Task": "Taak", + "Task Due Reminders": "Taakherinneringen", "Task Information": "Taak informatie", "Task schema": "Taak schema", "Tasks": "Taken", @@ -317,12 +325,15 @@ "Valid from": "Geldig vanaf", "Valid until": "Geldig tot", "Value Mappings (enum translations)": "Waarde mappings (enum vertalingen)", + "View all": "Alles bekijken", "View all activity": "Alle activiteit bekijken", + "View all deadline alerts": "Alle deadlines bekijken", "View all my work": "Al mijn werk bekijken", "View all overdue": "Alle openstaande bekijken", "View case": "Bekijk zaak", "View task": "Bekijk taak", "Welcome to Procest! Get started by creating your first case or task using the buttons above.": "Welkom bij Procest! Begin door uw eerste zaak of taak aan te maken met de knoppen hierboven.", + "Work Queue": "Werkvoorraad", "Welcome to Procest! Get started by creating your first case type in Settings.": "Welkom bij Procest! Begin door uw eerste zaaktype aan te maken in Instellingen.", "When heeftAlleAutorisaties is false, autorisaties must be specified.": "Wanneer heeftAlleAutorisaties false is, dan moet autorisaties opgegeven worden.", "When heeftAlleAutorisaties is true, autorisaties must not be specified. When heeftAlleAutorisaties is false, autorisaties must be specified.": "Wanneer heeftAlleAutorisaties op true staat, mag autorisaties niet opgegeven worden. Indien heeftAlleAutorisaties false is, dan moet autorisaties opgegeven worden.", diff --git a/lib/AppInfo/Application.php b/lib/AppInfo/Application.php index 898b925c..114f2cf6 100644 --- a/lib/AppInfo/Application.php +++ b/lib/AppInfo/Application.php @@ -8,7 +8,7 @@ * @category AppInfo * @package OCA\Procest\AppInfo * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * diff --git a/lib/BackgroundJob/AppointmentReminderJob.php b/lib/BackgroundJob/AppointmentReminderJob.php index 3ff6ef70..23fe5d3c 100644 --- a/lib/BackgroundJob/AppointmentReminderJob.php +++ b/lib/BackgroundJob/AppointmentReminderJob.php @@ -21,8 +21,9 @@ public function __construct( private LoggerInterface $logger, ) { parent::__construct($time); - $this->setInterval(86400); // Daily. - } + $this->setInterval(86400); + // Daily. + }//end __construct() protected function run($argument): void { @@ -50,19 +51,22 @@ protected function run($argument): void ); foreach (($result['objects'] ?? []) as $apt) { - $data = is_object($apt) ? $apt->jsonSerialize() : $apt; + $data = is_object($apt) ? $apt->jsonSerialize() : $apt; $aptDate = substr($data['dateTime'] ?? '', 0, 10); if ($aptDate === $tomorrow && empty($data['reminderSent'])) { $data['reminderSent'] = true; $objectService->saveObject((int) $register, (int) $schema, $data); - $this->logger->info('Procest: Reminder sent for appointment', [ - 'appointmentId' => $data['uuid'] ?? $data['id'] ?? '', - ]); + $this->logger->info( + 'Procest: Reminder sent for appointment', + [ + 'appointmentId' => $data['uuid'] ?? $data['id'] ?? '', + ] + ); } } } catch (\Exception $e) { $this->logger->error('Procest: Reminder job error: '.$e->getMessage()); - } - } -} + }//end try + }//end run() +}//end class diff --git a/lib/BackgroundJob/BerichtenboxReadStatusJob.php b/lib/BackgroundJob/BerichtenboxReadStatusJob.php index e0af0cab..b8ca5958 100644 --- a/lib/BackgroundJob/BerichtenboxReadStatusJob.php +++ b/lib/BackgroundJob/BerichtenboxReadStatusJob.php @@ -17,13 +17,14 @@ public function __construct( private LoggerInterface $logger, ) { parent::__construct($time); - $this->setInterval(86400); // Daily. - } + $this->setInterval(86400); + // Daily. + }//end __construct() protected function run($argument): void { $this->logger->info('Procest: Running Berichtenbox read status poll'); // The actual polling happens in BerichtenboxService::pollReadStatus // This job would iterate unread messages and poll each one. - } -} + }//end run() +}//end class diff --git a/lib/BackgroundJob/ShareMaintenanceJob.php b/lib/BackgroundJob/ShareMaintenanceJob.php index c1acbe3e..c422589a 100644 --- a/lib/BackgroundJob/ShareMaintenanceJob.php +++ b/lib/BackgroundJob/ShareMaintenanceJob.php @@ -8,7 +8,7 @@ * @category BackgroundJob * @package OCA\Procest\BackgroundJob * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * @@ -47,7 +47,7 @@ class ShareMaintenanceJob extends TimedJob * @param ITimeFactory $time The time factory * @param SettingsService $settingsService The settings service * @param IAppManager $appManager The app manager - * @param ContainerInterface $container The DI container + * @param ContainerInterface $container The DI container * @param LoggerInterface $logger The logger * * @return void diff --git a/lib/Controller/AcController.php b/lib/Controller/AcController.php index 09e0719c..6e91e9c0 100644 --- a/lib/Controller/AcController.php +++ b/lib/Controller/AcController.php @@ -10,7 +10,7 @@ * @category Controller * @package OCA\Procest\Controller * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * diff --git a/lib/Controller/AiController.php b/lib/Controller/AiController.php index f9c24cbd..f1fb721f 100644 --- a/lib/Controller/AiController.php +++ b/lib/Controller/AiController.php @@ -10,7 +10,7 @@ * @category Controller * @package OCA\Procest\Controller * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * @@ -47,12 +47,12 @@ class AiController extends Controller /** * Constructor for AiController. * - * @param string $appName The application name - * @param IRequest $request The request object - * @param AiService $aiService The AI service - * @param SettingsService $settingsService The settings service - * @param IUserSession $userSession The user session - * @param LoggerInterface $logger The logger interface + * @param string $appName The application name + * @param IRequest $request The request object + * @param AiService $aiService The AI service + * @param SettingsService $settingsService The settings service + * @param IUserSession $userSession The user session + * @param LoggerInterface $logger The logger interface * * @return void */ @@ -277,11 +277,13 @@ public function auditIndex(): JSONResponse 'offset' => (int) $this->request->getParam('offset', '0'), ]; - return new JSONResponse([ - 'success' => true, - 'filters' => array_filter($filters), - 'message' => 'Audit trail query — implement with OpenRegister object listing', - ]); + return new JSONResponse( + [ + 'success' => true, + 'filters' => array_filter($filters), + 'message' => 'Audit trail query — implement with OpenRegister object listing', + ] + ); }//end auditIndex() /** diff --git a/lib/Controller/AppointmentController.php b/lib/Controller/AppointmentController.php index 12f12cfa..a52c19e5 100644 --- a/lib/Controller/AppointmentController.php +++ b/lib/Controller/AppointmentController.php @@ -17,17 +17,21 @@ public function __construct( private AppointmentService $appointmentService, ) { parent::__construct(appName: Application::APP_ID, request: $request); - } + }//end __construct() - /** @NoAdminRequired */ + /** + * @NoAdminRequired + */ public function index(): JSONResponse { $caseId = $this->request->getParam('caseId'); $appointments = $this->appointmentService->getAppointmentsForCase($caseId ?? ''); return new JSONResponse(['success' => true, 'appointments' => $appointments]); - } + }//end index() - /** @NoAdminRequired */ + /** + * @NoAdminRequired + */ public function create(): JSONResponse { $caseId = $this->request->getParam('caseId'); @@ -48,23 +52,29 @@ public function create(): JSONResponse $result = $this->appointmentService->bookAppointment($caseId, $data); return new JSONResponse(['success' => true, 'appointment' => $result]); - } + }//end create() - /** @NoAdminRequired */ + /** + * @NoAdminRequired + */ public function cancel(string $appointmentId): JSONResponse { $result = $this->appointmentService->cancelAppointment($appointmentId); return new JSONResponse(['success' => true, 'appointment' => $result]); - } + }//end cancel() - /** @NoAdminRequired */ + /** + * @NoAdminRequired + */ public function noShow(string $appointmentId): JSONResponse { $result = $this->appointmentService->markNoShow($appointmentId); return new JSONResponse(['success' => true, 'appointment' => $result]); - } + }//end noShow() - /** @NoAdminRequired */ + /** + * @NoAdminRequired + */ public function timeslots(): JSONResponse { $productId = $this->request->getParam('productId', ''); @@ -73,5 +83,5 @@ public function timeslots(): JSONResponse $slots = $this->appointmentService->getTimeslots($productId, $locationId, $date); return new JSONResponse(['success' => true, 'timeslots' => $slots]); - } -} + }//end timeslots() +}//end class diff --git a/lib/Controller/BerichtenboxController.php b/lib/Controller/BerichtenboxController.php index 662ba3b7..7f68bd0b 100644 --- a/lib/Controller/BerichtenboxController.php +++ b/lib/Controller/BerichtenboxController.php @@ -17,16 +17,18 @@ public function __construct( private BerichtenboxService $berichtenboxService, ) { parent::__construct(appName: Application::APP_ID, request: $request); - } + }//end __construct() - /** @NoAdminRequired */ + /** + * @NoAdminRequired + */ public function send(): JSONResponse { - $caseId = $this->request->getParam('caseId'); - $bsn = $this->request->getParam('bsn', ''); - $subject = $this->request->getParam('subject', ''); - $body = $this->request->getParam('body', ''); - $typeCode = $this->request->getParam('berichtTypeCode', ''); + $caseId = $this->request->getParam('caseId'); + $bsn = $this->request->getParam('bsn', ''); + $subject = $this->request->getParam('subject', ''); + $body = $this->request->getParam('body', ''); + $typeCode = $this->request->getParam('berichtTypeCode', ''); $attachmentFileId = $this->request->getParam('attachmentFileId'); if (empty($caseId) === true) { @@ -34,7 +36,12 @@ public function send(): JSONResponse } $result = $this->berichtenboxService->sendMessage( - $caseId, $bsn, $subject, $body, $typeCode, $attachmentFileId + $caseId, + $bsn, + $subject, + $body, + $typeCode, + $attachmentFileId ); if (isset($result['error']) === true) { @@ -42,20 +49,24 @@ public function send(): JSONResponse } return new JSONResponse(['success' => true, 'message' => $result]); - } + }//end send() - /** @NoAdminRequired */ + /** + * @NoAdminRequired + */ public function messages(): JSONResponse { $caseId = $this->request->getParam('caseId', ''); $messages = $this->berichtenboxService->getMessagesForCase($caseId); return new JSONResponse(['success' => true, 'messages' => $messages]); - } + }//end messages() - /** @NoAdminRequired */ + /** + * @NoAdminRequired + */ public function poll(string $messageId): JSONResponse { $result = $this->berichtenboxService->pollReadStatus($messageId); return new JSONResponse(['success' => true, 'message' => $result]); - } -} + }//end poll() +}//end class diff --git a/lib/Controller/BrcController.php b/lib/Controller/BrcController.php index a28375fb..706699db 100644 --- a/lib/Controller/BrcController.php +++ b/lib/Controller/BrcController.php @@ -10,7 +10,7 @@ * @category Controller * @package OCA\Procest\Controller * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * diff --git a/lib/Controller/CaseDefinitionController.php b/lib/Controller/CaseDefinitionController.php index fab2601f..c3d36b25 100644 --- a/lib/Controller/CaseDefinitionController.php +++ b/lib/Controller/CaseDefinitionController.php @@ -9,7 +9,7 @@ * @category Controller * @package OCA\Procest\Controller * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * @@ -41,11 +41,11 @@ class CaseDefinitionController extends Controller /** * Constructor. * - * @param string $appName The app name. - * @param IRequest $request The request object. - * @param CaseDefinitionExportService $exportService The export service. - * @param CaseDefinitionImportService $importService The import service. - * @param LoggerInterface $logger The logger. + * @param string $appName The app name. + * @param IRequest $request The request object. + * @param CaseDefinitionExportService $exportService The export service. + * @param CaseDefinitionImportService $importService The import service. + * @param LoggerInterface $logger The logger. */ public function __construct( string $appName, @@ -55,7 +55,7 @@ public function __construct( private readonly LoggerInterface $logger, ) { parent::__construct($appName, $request); - } + }//end __construct() /** * Export a case definition as a ZIP archive. @@ -104,13 +104,13 @@ public function export(): DataDownloadResponse|JSONResponse Http::STATUS_BAD_REQUEST ); } catch (\Throwable $e) { - $this->logger->error('Case definition export failed: ' . $e->getMessage()); + $this->logger->error('Case definition export failed: '.$e->getMessage()); return new JSONResponse( - ['error' => 'Export failed: ' . $e->getMessage()], + ['error' => 'Export failed: '.$e->getMessage()], Http::STATUS_INTERNAL_SERVER_ERROR ); - } - } + }//end try + }//end export() /** * Validate a case definition package without importing it. @@ -135,13 +135,13 @@ public function validate(): JSONResponse return new JSONResponse($result); } catch (\Throwable $e) { - $this->logger->error('Case definition validation failed: ' . $e->getMessage()); + $this->logger->error('Case definition validation failed: '.$e->getMessage()); return new JSONResponse( - ['error' => 'Validation failed: ' . $e->getMessage()], + ['error' => 'Validation failed: '.$e->getMessage()], Http::STATUS_INTERNAL_SERVER_ERROR ); } - } + }//end validate() /** * Import a case definition package. @@ -153,7 +153,7 @@ public function validate(): JSONResponse public function import(): JSONResponse { try { - $file = $this->request->getUploadedFile('package'); + $file = $this->request->getUploadedFile('package'); $strategy = $this->request->getParam('strategy', 'skip'); if ($file === null || !isset($file['tmp_name'])) { @@ -175,17 +175,15 @@ public function import(): JSONResponse $strategy ); - $statusCode = $result['success'] - ? Http::STATUS_OK - : Http::STATUS_UNPROCESSABLE_ENTITY; + $statusCode = $result['success'] ? Http::STATUS_OK : Http::STATUS_UNPROCESSABLE_ENTITY; return new JSONResponse($result, $statusCode); } catch (\Throwable $e) { - $this->logger->error('Case definition import failed: ' . $e->getMessage()); + $this->logger->error('Case definition import failed: '.$e->getMessage()); return new JSONResponse( - ['error' => 'Import failed: ' . $e->getMessage()], + ['error' => 'Import failed: '.$e->getMessage()], Http::STATUS_INTERNAL_SERVER_ERROR ); - } - } -} + }//end try + }//end import() +}//end class diff --git a/lib/Controller/CaseSharingController.php b/lib/Controller/CaseSharingController.php index ccddee65..e98a4b96 100644 --- a/lib/Controller/CaseSharingController.php +++ b/lib/Controller/CaseSharingController.php @@ -8,7 +8,7 @@ * @category Controller * @package OCA\Procest\Controller * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * @@ -40,13 +40,13 @@ class CaseSharingController extends Controller /** * Constructor for the CaseSharingController. * - * @param IRequest $request The request object - * @param CaseSharingService $caseSharingService The sharing service - * @param CaseTransferService $caseTransferService The transfer service - * @param SettingsService $settingsService The settings service - * @param IAppManager $appManager The app manager - * @param ContainerInterface $container The DI container - * @param IUserSession $userSession The user session + * @param IRequest $request The request object + * @param CaseSharingService $caseSharingService The sharing service + * @param CaseTransferService $caseTransferService The transfer service + * @param SettingsService $settingsService The settings service + * @param IAppManager $appManager The app manager + * @param ContainerInterface $container The DI container + * @param IUserSession $userSession The user session * * @return void * @@ -134,7 +134,7 @@ public function createShare(): JSONResponse $password, $fieldExclusions, ); - } + }//end if return new JSONResponse(['success' => true, 'share' => $share]); }//end createShare() @@ -168,11 +168,11 @@ public function revokeShare(string $shareId): JSONResponse */ public function initiateTransfer(): JSONResponse { - $caseId = $this->request->getParam('caseId'); + $caseId = $this->request->getParam('caseId'); $sourceOrganization = $this->request->getParam('sourceOrganization', ''); $targetOrganization = $this->request->getParam('targetOrganization'); - $reason = $this->request->getParam('reason', ''); - $requestedDate = $this->request->getParam('requestedDate', date('Y-m-d')); + $reason = $this->request->getParam('reason', ''); + $requestedDate = $this->request->getParam('requestedDate', date('Y-m-d')); if (empty($caseId) === true || empty($targetOrganization) === true) { return new JSONResponse( @@ -207,7 +207,7 @@ public function handleTransfer(string $transferId): JSONResponse if ($action === 'accept') { $result = $this->caseTransferService->acceptTransfer($transferId); - } elseif ($action === 'reject') { + } else if ($action === 'reject') { $reason = $this->request->getParam('reason', ''); $result = $this->caseTransferService->rejectTransfer($transferId, $reason); } else { diff --git a/lib/Controller/ConsultationController.php b/lib/Controller/ConsultationController.php index 64cec7b8..316e28ea 100644 --- a/lib/Controller/ConsultationController.php +++ b/lib/Controller/ConsultationController.php @@ -8,7 +8,7 @@ * @category Controller * @package OCA\Procest\Controller * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * @@ -31,8 +31,6 @@ */ class ConsultationController extends Controller { - - /** * Constructor. * @@ -46,8 +44,7 @@ public function __construct( private readonly ConsultationService $consultationService, ) { parent::__construct($appName, $request); - } - + }//end __construct() /** * List consultations for a case. @@ -62,8 +59,7 @@ public function index(string $caseId): JSONResponse { $consultations = $this->consultationService->getConsultationsForCase($caseId); return new JSONResponse(['results' => $consultations]); - } - + }//end index() /** * Create a new consultation. @@ -81,8 +77,7 @@ public function create(): JSONResponse } catch (\RuntimeException $e) { return new JSONResponse(['error' => $e->getMessage()], 400); } - } - + }//end create() /** * Update consultation status. @@ -103,8 +98,7 @@ public function updateStatus(string $id): JSONResponse } catch (\RuntimeException $e) { return new JSONResponse(['error' => $e->getMessage()], 400); } - } - + }//end updateStatus() /** * Submit advice response. @@ -124,8 +118,7 @@ public function submitResponse(string $id): JSONResponse } catch (\RuntimeException $e) { return new JSONResponse(['error' => $e->getMessage()], 400); } - } - + }//end submitResponse() /** * Get overdue consultations. @@ -138,5 +131,5 @@ public function overdue(): JSONResponse { $overdue = $this->consultationService->getOverdueConsultations(); return new JSONResponse(['results' => $overdue]); - } -} + }//end overdue() +}//end class diff --git a/lib/Controller/DashboardController.php b/lib/Controller/DashboardController.php index 07a5c5c6..0b6664ca 100644 --- a/lib/Controller/DashboardController.php +++ b/lib/Controller/DashboardController.php @@ -8,7 +8,7 @@ * @category Controller * @package OCA\Procest\Controller * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * diff --git a/lib/Controller/DrcController.php b/lib/Controller/DrcController.php index 805d6394..64e7954c 100644 --- a/lib/Controller/DrcController.php +++ b/lib/Controller/DrcController.php @@ -10,7 +10,7 @@ * @category Controller * @package OCA\Procest\Controller * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * diff --git a/lib/Controller/EmailController.php b/lib/Controller/EmailController.php index ce91f223..55863180 100644 --- a/lib/Controller/EmailController.php +++ b/lib/Controller/EmailController.php @@ -8,7 +8,7 @@ * @category Controller * @package OCA\Procest\Controller * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * @@ -31,8 +31,6 @@ */ class EmailController extends Controller { - - /** * Constructor. * @@ -46,8 +44,7 @@ public function __construct( private readonly CaseEmailService $emailService, ) { parent::__construct($appName, $request); - } - + }//end __construct() /** * Send an email from case context. @@ -61,7 +58,7 @@ public function __construct( public function send(string $caseId): JSONResponse { try { - $data = json_decode($this->request->getContent() ?: '{}', true) ?: []; + $data = json_decode($this->request->getContent() ?: '{}', true) ?: []; $result = $this->emailService->sendEmail( $caseId, $data['to'] ?? '', @@ -73,8 +70,7 @@ public function send(string $caseId): JSONResponse } catch (\RuntimeException $e) { return new JSONResponse(['error' => $e->getMessage()], 400); } - } - + }//end send() /** * Send email using a template. @@ -98,8 +94,7 @@ public function sendFromTemplate(string $caseId): JSONResponse } catch (\RuntimeException $e) { return new JSONResponse(['error' => $e->getMessage()], 400); } - } - + }//end sendFromTemplate() /** * Preview a template with case data. @@ -112,18 +107,20 @@ public function sendFromTemplate(string $caseId): JSONResponse */ public function preview(string $caseId): JSONResponse { - $data = json_decode($this->request->getContent() ?: '{}', true) ?: []; - $template = $data['body'] ?? ''; - $caseData = []; // Would load from case. + $data = json_decode($this->request->getContent() ?: '{}', true) ?: []; + $template = $data['body'] ?? ''; + $caseData = []; + // Would load from case. $resolved = $this->emailService->resolveVariables($template, $caseData); $unresolved = $this->emailService->findUnresolvedVariables($template, $caseData); - return new JSONResponse([ - 'resolved' => $resolved, - 'unresolved' => $unresolved, - ]); - } - + return new JSONResponse( + [ + 'resolved' => $resolved, + 'unresolved' => $unresolved, + ] + ); + }//end preview() /** * Get email templates for a case type. @@ -138,5 +135,5 @@ public function templates(string $caseTypeId): JSONResponse { $templates = $this->emailService->getTemplatesForCaseType($caseTypeId); return new JSONResponse(['results' => $templates]); - } -} + }//end templates() +}//end class diff --git a/lib/Controller/GisProxyController.php b/lib/Controller/GisProxyController.php index 078e4518..0da26c64 100644 --- a/lib/Controller/GisProxyController.php +++ b/lib/Controller/GisProxyController.php @@ -9,7 +9,7 @@ * @category Controller * @package OCA\Procest\Controller * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * diff --git a/lib/Controller/HealthController.php b/lib/Controller/HealthController.php index 1d499218..42ebb8b2 100644 --- a/lib/Controller/HealthController.php +++ b/lib/Controller/HealthController.php @@ -8,7 +8,7 @@ * @category Controller * @package OCA\Procest\Controller * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * diff --git a/lib/Controller/InspectionController.php b/lib/Controller/InspectionController.php index 7399f44e..300c6b52 100644 --- a/lib/Controller/InspectionController.php +++ b/lib/Controller/InspectionController.php @@ -9,7 +9,7 @@ * @category Controller * @package OCA\Procest\Controller * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * @@ -41,12 +41,12 @@ class InspectionController extends Controller /** * Constructor. * - * @param string $appName The app name. - * @param IRequest $request The request object. - * @param InspectionService $inspectionService The inspection service. - * @param ChecklistService $checklistService The checklist service. - * @param IUserSession $userSession The user session. - * @param LoggerInterface $logger The logger. + * @param string $appName The app name. + * @param IRequest $request The request object. + * @param InspectionService $inspectionService The inspection service. + * @param ChecklistService $checklistService The checklist service. + * @param IUserSession $userSession The user session. + * @param LoggerInterface $logger The logger. */ public function __construct( string $appName, @@ -57,7 +57,7 @@ public function __construct( private readonly LoggerInterface $logger, ) { parent::__construct($appName, $request); - } + }//end __construct() /** * List inspections assigned to the current user. @@ -70,20 +70,20 @@ public function index(): JSONResponse { try { $userId = $this->userSession->getUser()?->getUID() ?? ''; - $date = $this->request->getParam('date'); + $date = $this->request->getParam('date'); // In full implementation, query OpenRegister for inspections. $inspections = $this->inspectionService->getInspections($userId, $date, []); return new JSONResponse(['results' => $inspections]); } catch (\Throwable $e) { - $this->logger->error('Failed to list inspections: ' . $e->getMessage()); + $this->logger->error('Failed to list inspections: '.$e->getMessage()); return new JSONResponse( - ['error' => 'Failed to list inspections: ' . $e->getMessage()], + ['error' => 'Failed to list inspections: '.$e->getMessage()], Http::STATUS_INTERNAL_SERVER_ERROR ); } - } + }//end index() /** * Record GPS location for an inspection. @@ -97,10 +97,10 @@ public function index(): JSONResponse public function captureLocation(string $id): JSONResponse { try { - $body = $this->getRequestBody(); - $latitude = (float)($body['latitude'] ?? 0); - $longitude = (float)($body['longitude'] ?? 0); - $accuracy = (float)($body['accuracy'] ?? 0); + $body = $this->getRequestBody(); + $latitude = (float) ($body['latitude'] ?? 0); + $longitude = (float) ($body['longitude'] ?? 0); + $accuracy = (float) ($body['accuracy'] ?? 0); $inspection = $body['inspection'] ?? []; if ($latitude === 0.0 && $longitude === 0.0) { @@ -119,13 +119,13 @@ public function captureLocation(string $id): JSONResponse return new JSONResponse($result); } catch (\Throwable $e) { - $this->logger->error('Failed to capture location: ' . $e->getMessage()); + $this->logger->error('Failed to capture location: '.$e->getMessage()); return new JSONResponse( - ['error' => 'Failed to capture location: ' . $e->getMessage()], + ['error' => 'Failed to capture location: '.$e->getMessage()], Http::STATUS_INTERNAL_SERVER_ERROR ); - } - } + }//end try + }//end captureLocation() /** * Complete a checklist item. @@ -140,11 +140,11 @@ public function captureLocation(string $id): JSONResponse public function completeChecklistItem(string $id, string $itemId): JSONResponse { try { - $body = $this->getRequestBody(); - $status = $body['status'] ?? ''; + $body = $this->getRequestBody(); + $status = $body['status'] ?? ''; $toelichting = $body['toelichting'] ?? ''; - $photoRefs = $body['photoRefs'] ?? []; - $checklist = $body['checklist'] ?? []; + $photoRefs = $body['photoRefs'] ?? []; + $checklist = $body['checklist'] ?? []; $updatedChecklist = $this->checklistService->completeItem( $checklist, @@ -156,23 +156,25 @@ public function completeChecklistItem(string $id, string $itemId): JSONResponse $progress = $this->checklistService->getProgress($updatedChecklist); - return new JSONResponse([ - 'checklist' => $updatedChecklist, - 'progress' => $progress, - ]); + return new JSONResponse( + [ + 'checklist' => $updatedChecklist, + 'progress' => $progress, + ] + ); } catch (\InvalidArgumentException $e) { return new JSONResponse( ['error' => $e->getMessage()], Http::STATUS_BAD_REQUEST ); } catch (\Throwable $e) { - $this->logger->error('Failed to complete checklist item: ' . $e->getMessage()); + $this->logger->error('Failed to complete checklist item: '.$e->getMessage()); return new JSONResponse( - ['error' => 'Failed to complete checklist item: ' . $e->getMessage()], + ['error' => 'Failed to complete checklist item: '.$e->getMessage()], Http::STATUS_INTERNAL_SERVER_ERROR ); - } - } + }//end try + }//end completeChecklistItem() /** * Upload a photo for an inspection. @@ -186,21 +188,21 @@ public function completeChecklistItem(string $id, string $itemId): JSONResponse public function addPhoto(string $id): JSONResponse { try { - $body = $this->getRequestBody(); - $inspection = $body['inspection'] ?? []; + $body = $this->getRequestBody(); + $inspection = $body['inspection'] ?? []; $photoMetadata = $body['photoMetadata'] ?? []; $updatedInspection = $this->inspectionService->addPhoto($inspection, $photoMetadata); return new JSONResponse($updatedInspection); } catch (\Throwable $e) { - $this->logger->error('Failed to add photo: ' . $e->getMessage()); + $this->logger->error('Failed to add photo: '.$e->getMessage()); return new JSONResponse( - ['error' => 'Failed to add photo: ' . $e->getMessage()], + ['error' => 'Failed to add photo: '.$e->getMessage()], Http::STATUS_INTERNAL_SERVER_ERROR ); } - } + }//end addPhoto() /** * Complete an inspection. @@ -214,7 +216,7 @@ public function addPhoto(string $id): JSONResponse public function complete(string $id): JSONResponse { try { - $body = $this->getRequestBody(); + $body = $this->getRequestBody(); $inspection = $body['inspection'] ?? []; $conclusion = $body['conclusion'] ?? ''; @@ -227,13 +229,13 @@ public function complete(string $id): JSONResponse Http::STATUS_BAD_REQUEST ); } catch (\Throwable $e) { - $this->logger->error('Failed to complete inspection: ' . $e->getMessage()); + $this->logger->error('Failed to complete inspection: '.$e->getMessage()); return new JSONResponse( - ['error' => 'Failed to complete inspection: ' . $e->getMessage()], + ['error' => 'Failed to complete inspection: '.$e->getMessage()], Http::STATUS_INTERNAL_SERVER_ERROR ); } - } + }//end complete() /** * Get the parsed request body. @@ -249,5 +251,5 @@ private function getRequestBody(): array $decoded = json_decode($body, true); return is_array($decoded) ? $decoded : []; - } -} + }//end getRequestBody() +}//end class diff --git a/lib/Controller/LegesController.php b/lib/Controller/LegesController.php index 4930f996..9f796367 100644 --- a/lib/Controller/LegesController.php +++ b/lib/Controller/LegesController.php @@ -9,7 +9,7 @@ * @category Controller * @package OCA\Procest\Controller * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * @@ -42,12 +42,12 @@ class LegesController extends Controller /** * Constructor. * - * @param string $appName The app name. - * @param IRequest $request The request object. - * @param LegesCalculationService $calculationService The calculation service. - * @param LegesExportService $exportService The export service. - * @param IUserSession $userSession The user session. - * @param LoggerInterface $logger The logger. + * @param string $appName The app name. + * @param IRequest $request The request object. + * @param LegesCalculationService $calculationService The calculation service. + * @param LegesExportService $exportService The export service. + * @param IUserSession $userSession The user session. + * @param LoggerInterface $logger The logger. */ public function __construct( string $appName, @@ -58,7 +58,7 @@ public function __construct( private readonly LoggerInterface $logger, ) { parent::__construct($appName, $request); - } + }//end __construct() /** * Calculate leges for a case. @@ -70,7 +70,7 @@ public function __construct( public function calculate(): JSONResponse { try { - $caseData = $this->request->getParam('caseData', []); + $caseData = $this->request->getParam('caseData', []); $verordening = $this->request->getParam('verordening', []); if (empty($caseData) || empty($verordening)) { @@ -83,6 +83,7 @@ public function calculate(): JSONResponse if (is_string($caseData)) { $caseData = json_decode($caseData, true) ?? []; } + if (is_string($verordening)) { $verordening = json_decode($verordening, true) ?? []; } @@ -93,13 +94,13 @@ public function calculate(): JSONResponse return new JSONResponse($result); } catch (\Throwable $e) { - $this->logger->error('Leges calculation failed: ' . $e->getMessage()); + $this->logger->error('Leges calculation failed: '.$e->getMessage()); return new JSONResponse( - ['error' => 'Calculation failed: ' . $e->getMessage()], + ['error' => 'Calculation failed: '.$e->getMessage()], Http::STATUS_INTERNAL_SERVER_ERROR ); - } - } + }//end try + }//end calculate() /** * Recalculate leges with corrected data. @@ -111,17 +112,19 @@ public function calculate(): JSONResponse public function recalculate(): JSONResponse { try { - $caseData = $this->request->getParam('caseData', []); - $verordening = $this->request->getParam('verordening', []); + $caseData = $this->request->getParam('caseData', []); + $verordening = $this->request->getParam('verordening', []); $previousCalc = $this->request->getParam('previousCalculation', []); - $reason = $this->request->getParam('correctionReason', ''); + $reason = $this->request->getParam('correctionReason', ''); if (is_string($caseData)) { $caseData = json_decode($caseData, true) ?? []; } + if (is_string($verordening)) { $verordening = json_decode($verordening, true) ?? []; } + if (is_string($previousCalc)) { $previousCalc = json_decode($previousCalc, true) ?? []; } @@ -138,13 +141,13 @@ public function recalculate(): JSONResponse return new JSONResponse($result); } catch (\Throwable $e) { - $this->logger->error('Leges recalculation failed: ' . $e->getMessage()); + $this->logger->error('Leges recalculation failed: '.$e->getMessage()); return new JSONResponse( - ['error' => 'Recalculation failed: ' . $e->getMessage()], + ['error' => 'Recalculation failed: '.$e->getMessage()], Http::STATUS_INTERNAL_SERVER_ERROR ); - } - } + }//end try + }//end recalculate() /** * Calculate verrekening (deduction). @@ -156,20 +159,20 @@ public function recalculate(): JSONResponse public function verrekening(): JSONResponse { try { - $currentAmount = (float)$this->request->getParam('currentAmount', 0); - $previousAmount = (float)$this->request->getParam('previousAmount', 0); + $currentAmount = (float) $this->request->getParam('currentAmount', 0); + $previousAmount = (float) $this->request->getParam('previousAmount', 0); $result = $this->calculationService->calculateVerrekening($currentAmount, $previousAmount); return new JSONResponse($result); } catch (\Throwable $e) { - $this->logger->error('Verrekening calculation failed: ' . $e->getMessage()); + $this->logger->error('Verrekening calculation failed: '.$e->getMessage()); return new JSONResponse( - ['error' => 'Verrekening failed: ' . $e->getMessage()], + ['error' => 'Verrekening failed: '.$e->getMessage()], Http::STATUS_INTERNAL_SERVER_ERROR ); } - } + }//end verrekening() /** * Calculate teruggaaf (refund). @@ -181,9 +184,9 @@ public function verrekening(): JSONResponse public function teruggaaf(): JSONResponse { try { - $imposedAmount = (float)$this->request->getParam('imposedAmount', 0); - $refundFraction = (float)$this->request->getParam('refundFraction', 1.0); - $reason = (string)$this->request->getParam('reason', ''); + $imposedAmount = (float) $this->request->getParam('imposedAmount', 0); + $refundFraction = (float) $this->request->getParam('refundFraction', 1.0); + $reason = (string) $this->request->getParam('reason', ''); $result = $this->calculationService->calculateTeruggaaf( $imposedAmount, @@ -193,13 +196,13 @@ public function teruggaaf(): JSONResponse return new JSONResponse($result); } catch (\Throwable $e) { - $this->logger->error('Teruggaaf calculation failed: ' . $e->getMessage()); + $this->logger->error('Teruggaaf calculation failed: '.$e->getMessage()); return new JSONResponse( - ['error' => 'Teruggaaf failed: ' . $e->getMessage()], + ['error' => 'Teruggaaf failed: '.$e->getMessage()], Http::STATUS_INTERNAL_SERVER_ERROR ); } - } + }//end teruggaaf() /** * Export berekeningen to financial system format. @@ -212,7 +215,7 @@ public function export(): DataDownloadResponse|JSONResponse { try { $berekeningen = $this->request->getParam('berekeningen', []); - $format = $this->request->getParam('format', LegesExportService::FORMAT_CSV); + $format = $this->request->getParam('format', LegesExportService::FORMAT_CSV); if (is_string($berekeningen)) { $berekeningen = json_decode($berekeningen, true) ?? []; @@ -238,11 +241,11 @@ public function export(): DataDownloadResponse|JSONResponse Http::STATUS_BAD_REQUEST ); } catch (\Throwable $e) { - $this->logger->error('Leges export failed: ' . $e->getMessage()); + $this->logger->error('Leges export failed: '.$e->getMessage()); return new JSONResponse( - ['error' => 'Export failed: ' . $e->getMessage()], + ['error' => 'Export failed: '.$e->getMessage()], Http::STATUS_INTERNAL_SERVER_ERROR ); - } - } -} + }//end try + }//end export() +}//end class diff --git a/lib/Controller/MetricsController.php b/lib/Controller/MetricsController.php index de693618..e3ef8716 100644 --- a/lib/Controller/MetricsController.php +++ b/lib/Controller/MetricsController.php @@ -8,7 +8,7 @@ * @category Controller * @package OCA\Procest\Controller * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * @@ -109,9 +109,13 @@ private function collectMetrics(): string // Cases total by status and case_type. $lines[] = '# HELP procest_cases_total Total cases by status and case_type'; $lines[] = '# TYPE procest_cases_total gauge'; - $caseCounts = $this->getCached('procest_metrics_case_counts', self::CACHE_TTL_DEFAULT, function () { - return $this->getCaseCounts(); - }); + $caseCounts = $this->getCached( + 'procest_metrics_case_counts', + self::CACHE_TTL_DEFAULT, + function () { + return $this->getCaseCounts(); + } + ); foreach ($caseCounts as $row) { $status = $this->sanitizeLabel(value: $row['status']); $caseType = $this->sanitizeLabel(value: $row['case_type']); @@ -122,29 +126,41 @@ private function collectMetrics(): string $lines[] = ''; // Cases overdue total. - $overdueCount = $this->getCached('procest_metrics_overdue_cases', self::CACHE_TTL_OVERDUE, function () { - return $this->getOverdueCasesCount(); - }); - $lines[] = '# HELP procest_cases_overdue_total Cases past their deadline'; - $lines[] = '# TYPE procest_cases_overdue_total gauge'; - $lines[] = 'procest_cases_overdue_total '.$overdueCount; - $lines[] = ''; + $overdueCount = $this->getCached( + 'procest_metrics_overdue_cases', + self::CACHE_TTL_OVERDUE, + function () { + return $this->getOverdueCasesCount(); + } + ); + $lines[] = '# HELP procest_cases_overdue_total Cases past their deadline'; + $lines[] = '# TYPE procest_cases_overdue_total gauge'; + $lines[] = 'procest_cases_overdue_total '.$overdueCount; + $lines[] = ''; // Cases created today. - $createdToday = $this->getCached('procest_metrics_created_today', self::CACHE_TTL_DEFAULT, function () { - return $this->getCasesCreatedTodayCount(); - }); - $lines[] = '# HELP procest_cases_created_today Cases created today'; - $lines[] = '# TYPE procest_cases_created_today gauge'; - $lines[] = 'procest_cases_created_today '.$createdToday; - $lines[] = ''; + $createdToday = $this->getCached( + 'procest_metrics_created_today', + self::CACHE_TTL_DEFAULT, + function () { + return $this->getCasesCreatedTodayCount(); + } + ); + $lines[] = '# HELP procest_cases_created_today Cases created today'; + $lines[] = '# TYPE procest_cases_created_today gauge'; + $lines[] = 'procest_cases_created_today '.$createdToday; + $lines[] = ''; // Tasks total by status. $lines[] = '# HELP procest_tasks_total Total tasks by status'; $lines[] = '# TYPE procest_tasks_total gauge'; - $taskCounts = $this->getCached('procest_metrics_task_counts', self::CACHE_TTL_DEFAULT, function () { - return $this->getTaskCounts(); - }); + $taskCounts = $this->getCached( + 'procest_metrics_task_counts', + self::CACHE_TTL_DEFAULT, + function () { + return $this->getTaskCounts(); + } + ); foreach ($taskCounts as $row) { $status = $this->sanitizeLabel(value: $row['status']); $count = (int) $row['cnt']; @@ -154,13 +170,17 @@ private function collectMetrics(): string $lines[] = ''; // Tasks overdue total. - $overdueTasksCount = $this->getCached('procest_metrics_overdue_tasks', self::CACHE_TTL_OVERDUE, function () { - return $this->getOverdueTasksCount(); - }); - $lines[] = '# HELP procest_tasks_overdue_total Tasks past their deadline'; - $lines[] = '# TYPE procest_tasks_overdue_total gauge'; - $lines[] = 'procest_tasks_overdue_total '.$overdueTasksCount; - $lines[] = ''; + $overdueTasksCount = $this->getCached( + 'procest_metrics_overdue_tasks', + self::CACHE_TTL_OVERDUE, + function () { + return $this->getOverdueTasksCount(); + } + ); + $lines[] = '# HELP procest_tasks_overdue_total Tasks past their deadline'; + $lines[] = '# TYPE procest_tasks_overdue_total gauge'; + $lines[] = 'procest_tasks_overdue_total '.$overdueTasksCount; + $lines[] = ''; return implode("\n", $lines)."\n"; }//end collectMetrics() diff --git a/lib/Controller/MilestoneController.php b/lib/Controller/MilestoneController.php index 80456aad..0bc70d20 100644 --- a/lib/Controller/MilestoneController.php +++ b/lib/Controller/MilestoneController.php @@ -8,7 +8,7 @@ * @category Controller * @package OCA\Procest\Controller * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * @@ -32,8 +32,6 @@ */ class MilestoneController extends Controller { - - /** * Constructor. * @@ -49,8 +47,7 @@ public function __construct( private readonly IUserSession $userSession, ) { parent::__construct($appName, $request); - } - + }//end __construct() /** * Get milestone progress for a case. @@ -70,8 +67,7 @@ public function progress(string $caseId, string $caseTypeId): JSONResponse } catch (\RuntimeException $e) { return new JSONResponse(['error' => $e->getMessage()], 500); } - } - + }//end progress() /** * Mark a milestone as reached. @@ -99,8 +95,7 @@ public function mark(string $caseId, string $milestoneId): JSONResponse } catch (\RuntimeException $e) { return new JSONResponse(['error' => $e->getMessage()], 400); } - } - + }//end mark() /** * Reverse a milestone. @@ -136,5 +131,5 @@ public function reverse(string $caseId, string $milestoneId): JSONResponse } catch (\RuntimeException $e) { return new JSONResponse(['error' => $e->getMessage()], 400); } - } -} + }//end reverse() +}//end class diff --git a/lib/Controller/NrcController.php b/lib/Controller/NrcController.php index e90ab64a..025275a7 100644 --- a/lib/Controller/NrcController.php +++ b/lib/Controller/NrcController.php @@ -10,7 +10,7 @@ * @category Controller * @package OCA\Procest\Controller * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * diff --git a/lib/Controller/ParaferingController.php b/lib/Controller/ParaferingController.php index a0477e3b..d129b3f8 100644 --- a/lib/Controller/ParaferingController.php +++ b/lib/Controller/ParaferingController.php @@ -9,7 +9,7 @@ * @category Controller * @package OCA\Procest\Controller * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * @@ -40,11 +40,11 @@ class ParaferingController extends Controller /** * Constructor. * - * @param string $appName The app name. - * @param IRequest $request The request object. - * @param ParaferingService $paraferingService The parafering service. - * @param IUserSession $userSession The user session. - * @param LoggerInterface $logger The logger. + * @param string $appName The app name. + * @param IRequest $request The request object. + * @param ParaferingService $paraferingService The parafering service. + * @param IUserSession $userSession The user session. + * @param LoggerInterface $logger The logger. */ public function __construct( string $appName, @@ -54,7 +54,7 @@ public function __construct( private readonly LoggerInterface $logger, ) { parent::__construct($appName, $request); - } + }//end __construct() /** * Create a new voorstel. @@ -66,7 +66,7 @@ public function __construct( public function createVoorstel(): JSONResponse { try { - $data = $this->getRequestBody(); + $data = $this->getRequestBody(); $userId = $this->userSession->getUser()?->getUID() ?? 'system'; if (empty($data['caseId'])) { @@ -77,17 +77,17 @@ public function createVoorstel(): JSONResponse } $data['steller'] = $data['steller'] ?? $userId; - $voorstel = $this->paraferingService->createVoorstel($data); + $voorstel = $this->paraferingService->createVoorstel($data); return new JSONResponse($voorstel, Http::STATUS_CREATED); } catch (\Throwable $e) { - $this->logger->error('Failed to create voorstel: ' . $e->getMessage()); + $this->logger->error('Failed to create voorstel: '.$e->getMessage()); return new JSONResponse( - ['error' => 'Failed to create voorstel: ' . $e->getMessage()], + ['error' => 'Failed to create voorstel: '.$e->getMessage()], Http::STATUS_INTERNAL_SERVER_ERROR ); - } - } + }//end try + }//end createVoorstel() /** * Start parafering on a voorstel. @@ -101,9 +101,9 @@ public function createVoorstel(): JSONResponse public function startParafering(string $id): JSONResponse { try { - $data = $this->getRequestBody(); + $data = $this->getRequestBody(); $voorstel = $data['voorstel'] ?? []; - $route = $data['route'] ?? []; + $route = $data['route'] ?? []; if (empty($voorstel) || empty($route)) { return new JSONResponse( @@ -121,13 +121,13 @@ public function startParafering(string $id): JSONResponse Http::STATUS_BAD_REQUEST ); } catch (\Throwable $e) { - $this->logger->error('Failed to start parafering: ' . $e->getMessage()); + $this->logger->error('Failed to start parafering: '.$e->getMessage()); return new JSONResponse( - ['error' => 'Failed to start parafering: ' . $e->getMessage()], + ['error' => 'Failed to start parafering: '.$e->getMessage()], Http::STATUS_INTERNAL_SERVER_ERROR ); - } - } + }//end try + }//end startParafering() /** * Execute a parafering action (paraferen). @@ -141,7 +141,7 @@ public function startParafering(string $id): JSONResponse public function paraferen(string $id): JSONResponse { return $this->handleAction($id, ParaferingService::ACTION_PARAFEREN); - } + }//end paraferen() /** * Execute a terugsturen action. @@ -155,7 +155,7 @@ public function paraferen(string $id): JSONResponse public function terugsturen(string $id): JSONResponse { return $this->handleAction($id, ParaferingService::ACTION_TERUGSTUREN); - } + }//end terugsturen() /** * Execute an adviseren action. @@ -169,7 +169,7 @@ public function terugsturen(string $id): JSONResponse public function adviseren(string $id): JSONResponse { return $this->handleAction($id, ParaferingService::ACTION_ADVISEREN); - } + }//end adviseren() /** * Get the audit trail for a voorstel. @@ -183,20 +183,20 @@ public function adviseren(string $id): JSONResponse public function auditTrail(string $id): JSONResponse { try { - $data = $this->getRequestBody(); + $data = $this->getRequestBody(); $voorstel = $data['voorstel'] ?? []; $trail = $this->paraferingService->getAuditTrail($voorstel); return new JSONResponse(['auditTrail' => $trail]); } catch (\Throwable $e) { - $this->logger->error('Failed to get audit trail: ' . $e->getMessage()); + $this->logger->error('Failed to get audit trail: '.$e->getMessage()); return new JSONResponse( - ['error' => 'Failed to get audit trail: ' . $e->getMessage()], + ['error' => 'Failed to get audit trail: '.$e->getMessage()], Http::STATUS_INTERNAL_SERVER_ERROR ); } - } + }//end auditTrail() /** * Handle a parafering action. @@ -209,10 +209,10 @@ public function auditTrail(string $id): JSONResponse private function handleAction(string $id, string $action): JSONResponse { try { - $data = $this->getRequestBody(); + $data = $this->getRequestBody(); $voorstel = $data['voorstel'] ?? []; - $comment = $data['comment'] ?? ''; - $namens = $data['namens'] ?? null; + $comment = $data['comment'] ?? ''; + $namens = $data['namens'] ?? null; $userId = $this->userSession->getUser()?->getUID() ?? 'system'; @@ -231,13 +231,13 @@ private function handleAction(string $id, string $action): JSONResponse Http::STATUS_BAD_REQUEST ); } catch (\Throwable $e) { - $this->logger->error("Failed to execute {$action}: " . $e->getMessage()); + $this->logger->error("Failed to execute {$action}: ".$e->getMessage()); return new JSONResponse( - ['error' => "Failed to execute {$action}: " . $e->getMessage()], + ['error' => "Failed to execute {$action}: ".$e->getMessage()], Http::STATUS_INTERNAL_SERVER_ERROR ); - } - } + }//end try + }//end handleAction() /** * Get the parsed request body. @@ -253,5 +253,5 @@ private function getRequestBody(): array $decoded = json_decode($body, true); return is_array($decoded) ? $decoded : []; - } -} + }//end getRequestBody() +}//end class diff --git a/lib/Controller/PublicAppointmentController.php b/lib/Controller/PublicAppointmentController.php index 9aa2c3fb..b700c80f 100644 --- a/lib/Controller/PublicAppointmentController.php +++ b/lib/Controller/PublicAppointmentController.php @@ -17,7 +17,7 @@ public function __construct( private AppointmentService $appointmentService, ) { parent::__construct(appName: Application::APP_ID, request: $request); - } + }//end __construct() /** * @PublicPage @@ -30,17 +30,19 @@ public function view(string $token): JSONResponse return new JSONResponse(['error' => 'Afspraak niet gevonden'], 404); } - return new JSONResponse([ - 'success' => true, - 'appointment' => [ - 'dateTime' => $appointment['dateTime'] ?? null, - 'duration' => $appointment['duration'] ?? 30, - 'status' => $appointment['status'] ?? 'scheduled', - 'locationId' => $appointment['locationId'] ?? null, - 'productId' => $appointment['productId'] ?? null, - ], - ]); - } + return new JSONResponse( + [ + 'success' => true, + 'appointment' => [ + 'dateTime' => $appointment['dateTime'] ?? null, + 'duration' => $appointment['duration'] ?? 30, + 'status' => $appointment['status'] ?? 'scheduled', + 'locationId' => $appointment['locationId'] ?? null, + 'productId' => $appointment['productId'] ?? null, + ], + ] + ); + }//end view() /** * @PublicPage @@ -60,5 +62,5 @@ public function cancel(string $token): JSONResponse $id = $appointment['uuid'] ?? $appointment['id'] ?? ''; $result = $this->appointmentService->cancelAppointment($id); return new JSONResponse(['success' => true, 'appointment' => $result]); - } -} + }//end cancel() +}//end class diff --git a/lib/Controller/PublicShareController.php b/lib/Controller/PublicShareController.php index df10140c..ca2982b8 100644 --- a/lib/Controller/PublicShareController.php +++ b/lib/Controller/PublicShareController.php @@ -8,7 +8,7 @@ * @category Controller * @package OCA\Procest\Controller * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * @@ -46,7 +46,7 @@ class PublicShareController extends Controller * @param CaseSharingService $caseSharingService The sharing service * @param SettingsService $settingsService The settings service * @param IAppManager $appManager The app manager - * @param ContainerInterface $container The DI container + * @param ContainerInterface $container The DI container * @param LoggerInterface $logger The logger * * @return void @@ -118,16 +118,18 @@ public function accessShare(string $token): JSONResponse ] ); - return new JSONResponse([ - 'success' => true, - 'case' => $filteredData, - 'permissionLevel' => $shareData['permissionLevel'], - 'canComment' => in_array( + return new JSONResponse( + [ + 'success' => true, + 'case' => $filteredData, + 'permissionLevel' => $shareData['permissionLevel'], + 'canComment' => in_array( $shareData['permissionLevel'], ['bekijken_reageren', 'bekijken_bijdragen'] ), - 'canUpload' => $shareData['permissionLevel'] === 'bekijken_bijdragen', - ]); + 'canUpload' => $shareData['permissionLevel'] === 'bekijken_bijdragen', + ] + ); }//end accessShare() /** @@ -185,10 +187,12 @@ public function addComment(string $token): JSONResponse ] ); - return new JSONResponse([ - 'success' => true, - 'message' => 'Reactie toegevoegd', - ]); + return new JSONResponse( + [ + 'success' => true, + 'message' => 'Reactie toegevoegd', + ] + ); }//end addComment() /** @@ -226,11 +230,11 @@ public function viewStatus(string $token): JSONResponse // Return only citizen-safe status information. $statusData = [ - 'title' => ($caseData['title'] ?? ''), - 'identifier' => ($caseData['identifier'] ?? ''), - 'currentStatus' => ($caseData['status'] ?? ''), - 'plannedEndDate' => ($caseData['plannedEndDate'] ?? null), - 'startDate' => ($caseData['startDate'] ?? null), + 'title' => ($caseData['title'] ?? ''), + 'identifier' => ($caseData['identifier'] ?? ''), + 'currentStatus' => ($caseData['status'] ?? ''), + 'plannedEndDate' => ($caseData['plannedEndDate'] ?? null), + 'startDate' => ($caseData['startDate'] ?? null), ]; return new JSONResponse(['success' => true, 'status' => $statusData]); @@ -270,6 +274,6 @@ private function loadCaseData(string $caseId): ?array ] ); return null; - } + }//end try }//end loadCaseData() }//end class diff --git a/lib/Controller/SettingsController.php b/lib/Controller/SettingsController.php index 9ca9ca68..389fe742 100644 --- a/lib/Controller/SettingsController.php +++ b/lib/Controller/SettingsController.php @@ -8,7 +8,7 @@ * @category Controller * @package OCA\Procest\Controller * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * diff --git a/lib/Controller/StufController.php b/lib/Controller/StufController.php index 30b7d596..266cfcaf 100644 --- a/lib/Controller/StufController.php +++ b/lib/Controller/StufController.php @@ -10,7 +10,7 @@ * @category Controller * @package OCA\Procest\Controller * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * @@ -51,7 +51,7 @@ class StufController extends Controller */ private const DEFAULT_ZENDER = [ 'organisatie' => 'Procest', - 'applicatie' => 'Procest', + 'applicatie' => 'Procest', ]; /** @@ -71,7 +71,7 @@ public function __construct( private readonly LoggerInterface $logger, ) { parent::__construct($appName, $request); - } + }//end __construct() /** * Handle inbound StUF-ZKN SOAP messages for case operations. @@ -83,7 +83,7 @@ public function __construct( public function zaken(): DataDisplayResponse { return $this->handleSoapMessage('zaken'); - } + }//end zaken() /** * Handle inbound StUF-BG SOAP messages for person operations. @@ -95,7 +95,7 @@ public function zaken(): DataDisplayResponse public function personen(): DataDisplayResponse { return $this->handleSoapMessage('personen'); - } + }//end personen() /** * Handle an inbound SOAP message. @@ -117,11 +117,11 @@ private function handleSoapMessage(string $service): DataDisplayResponse $dom = new \DOMDocument(); libxml_use_internal_errors(true); $parseResult = $dom->loadXML($rawBody); - $errors = libxml_get_errors(); + $errors = libxml_get_errors(); libxml_clear_errors(); if (!$parseResult || !empty($errors)) { - $this->logger->warning('Invalid XML received at StUF endpoint: ' . $service); + $this->logger->warning('Invalid XML received at StUF endpoint: '.$service); $response = $this->messageBuilder->buildSoapFault('Ongeldig XML bericht'); return $this->soapResponse($response, Http::STATUS_BAD_REQUEST); } @@ -172,7 +172,7 @@ private function handleSoapMessage(string $service): DataDisplayResponse 'edcLk01' => $this->handleEdcLk01($messageElement), default => $this->handleUnknownMessage($messageType), }; - } + }//end handleSoapMessage() /** * Handle zakLk01 (case create/update) message. @@ -196,20 +196,23 @@ private function handleZakLk01(\DOMElement $message): DataDisplayResponse return $this->soapResponse($response); } - $objectEl = $objectElements->item(0); + $objectEl = $objectElements->item(0); $mutatiesoort = $message->getAttribute('mutatiesoort'); // Extract basic fields. - $stufFields = $this->extractFields($objectEl, [ - 'identificatie', - 'omschrijving', - 'toelichting', - 'startdatum', - 'einddatum', - 'einddatumGepland', - 'uiterlijkeEinddatumAfdoening', - 'vertrouwelijkAanduiding', - ]); + $stufFields = $this->extractFields( + $objectEl, + [ + 'identificatie', + 'omschrijving', + 'toelichting', + 'startdatum', + 'einddatum', + 'einddatumGepland', + 'uiterlijkeEinddatumAfdoening', + 'vertrouwelijkAanduiding', + ] + ); // Map to internal properties. $internalData = $this->mappingService->mapZknToInternal($stufFields); @@ -218,13 +221,13 @@ private function handleZakLk01(\DOMElement $message): DataDisplayResponse 'Processed zakLk01 mutatiesoort={mutatiesoort}, identifier={id}', [ 'mutatiesoort' => $mutatiesoort, - 'id' => $internalData['identifier'] ?? 'none', + 'id' => $internalData['identifier'] ?? 'none', ] ); // Extract referentienummer for cross-reference. $stuurgegevens = $message->getElementsByTagName('stuurgegevens'); - $crossRef = ''; + $crossRef = ''; if ($stuurgegevens->length > 0) { $refElements = $stuurgegevens->item(0)->getElementsByTagName('referentienummer'); if ($refElements->length > 0) { @@ -241,7 +244,7 @@ private function handleZakLk01(\DOMElement $message): DataDisplayResponse ); return $this->soapResponse($response); - } + }//end handleZakLk01() /** * Handle zakLv01 (case query) message. @@ -254,15 +257,18 @@ private function handleZakLv01(\DOMElement $message): DataDisplayResponse { // Extract query criteria from gelijk element. $gelijkElements = $message->getElementsByTagName('gelijk'); - $criteria = []; + $criteria = []; if ($gelijkElements->length > 0) { - $gelijk = $gelijkElements->item(0); - $criteria = $this->extractFields($gelijk, [ - 'identificatie', - 'omschrijving', - 'startdatum', - ]); + $gelijk = $gelijkElements->item(0); + $criteria = $this->extractFields( + $gelijk, + [ + 'identificatie', + 'omschrijving', + 'startdatum', + ] + ); } $this->logger->info( @@ -272,8 +278,8 @@ private function handleZakLv01(\DOMElement $message): DataDisplayResponse // In a full implementation, query OpenRegister and build zakLa01 response. // For now, return an empty zakLa01 response. - $body = ''; + $body = ''; $body .= $this->messageBuilder->buildStuurgegevens(self::DEFAULT_ZENDER, []); $body .= ''; $body .= ''; @@ -281,7 +287,7 @@ private function handleZakLv01(\DOMElement $message): DataDisplayResponse $response = $this->messageBuilder->buildSoapEnvelope($body); return $this->soapResponse($response); - } + }//end handleZakLv01() /** * Handle npsLv01 (person query) message. @@ -294,7 +300,7 @@ private function handleNpsLv01(\DOMElement $message): DataDisplayResponse { // Extract BSN from gelijk element. $gelijkElements = $message->getElementsByTagName('gelijk'); - $bsn = ''; + $bsn = ''; if ($gelijkElements->length > 0) { $bsnElements = $gelijkElements->item(0)->getElementsByTagName('bsn'); @@ -305,13 +311,13 @@ private function handleNpsLv01(\DOMElement $message): DataDisplayResponse $this->logger->info( 'Processed npsLv01 person query for BSN {bsn}', - ['bsn' => substr($bsn, 0, 3) . '***'] + ['bsn' => substr($bsn, 0, 3).'***'] ); // In a full implementation, query OpenRegister for person data. // For now, return an empty npsLa01 response. - $body = ''; + $body = ''; $body .= $this->messageBuilder->buildStuurgegevens(self::DEFAULT_ZENDER, []); $body .= ''; $body .= ''; @@ -319,7 +325,7 @@ private function handleNpsLv01(\DOMElement $message): DataDisplayResponse $response = $this->messageBuilder->buildSoapEnvelope($body); return $this->soapResponse($response); - } + }//end handleNpsLv01() /** * Handle edcLk01 (document create/update) message. @@ -334,7 +340,7 @@ private function handleEdcLk01(\DOMElement $message): DataDisplayResponse // Extract referentienummer. $stuurgegevens = $message->getElementsByTagName('stuurgegevens'); - $crossRef = ''; + $crossRef = ''; if ($stuurgegevens->length > 0) { $refElements = $stuurgegevens->item(0)->getElementsByTagName('referentienummer'); if ($refElements->length > 0) { @@ -349,7 +355,7 @@ private function handleEdcLk01(\DOMElement $message): DataDisplayResponse ); return $this->soapResponse($response); - } + }//end handleEdcLk01() /** * Handle unknown message type. @@ -360,18 +366,18 @@ private function handleEdcLk01(\DOMElement $message): DataDisplayResponse */ private function handleUnknownMessage(string $messageType): DataDisplayResponse { - $this->logger->warning('Unknown StUF message type: ' . $messageType); + $this->logger->warning('Unknown StUF message type: '.$messageType); $response = $this->messageBuilder->buildFo01( 'StUF001', - 'Onbekend berichttype: ' . $messageType, + 'Onbekend berichttype: '.$messageType, 'server', self::DEFAULT_ZENDER, [] ); return $this->soapResponse($response, Http::STATUS_BAD_REQUEST); - } + }//end handleUnknownMessage() /** * Extract field values from a DOM element. @@ -397,7 +403,7 @@ private function extractFields(?\DOMElement $element, array $fieldNames): array } return $result; - } + }//end extractFields() /** * Create a SOAP XML response. @@ -407,10 +413,10 @@ private function extractFields(?\DOMElement $element, array $fieldNames): array * * @return DataDisplayResponse */ - private function soapResponse(string $xml, int $statusCode = Http::STATUS_OK): DataDisplayResponse + private function soapResponse(string $xml, int $statusCode=Http::STATUS_OK): DataDisplayResponse { $response = new DataDisplayResponse($xml, $statusCode); $response->addHeader('Content-Type', 'text/xml; charset=utf-8'); return $response; - } -} + }//end soapResponse() +}//end class diff --git a/lib/Controller/TemplateController.php b/lib/Controller/TemplateController.php index c6e68a38..a19e2424 100644 --- a/lib/Controller/TemplateController.php +++ b/lib/Controller/TemplateController.php @@ -8,7 +8,7 @@ * @category Controller * @package OCA\Procest\Controller * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * @@ -32,8 +32,6 @@ */ class TemplateController extends Controller { - - /** * Constructor. * @@ -49,8 +47,7 @@ public function __construct( private readonly LoggerInterface $logger, ) { parent::__construct($appName, $request); - } - + }//end __construct() /** * List all available templates. @@ -63,8 +60,7 @@ public function index(): JSONResponse { $templates = $this->templateService->listTemplates(); return new JSONResponse(['results' => $templates]); - } - + }//end index() /** * Get a single template by ID. @@ -83,8 +79,7 @@ public function show(string $id): JSONResponse } return new JSONResponse($template); - } - + }//end show() /** * Activate a template (create all objects from it). @@ -106,5 +101,5 @@ public function activate(string $id): JSONResponse 400, ); } - } -} + }//end activate() +}//end class diff --git a/lib/Controller/TenantController.php b/lib/Controller/TenantController.php index 0bc7acec..67e12cec 100644 --- a/lib/Controller/TenantController.php +++ b/lib/Controller/TenantController.php @@ -8,7 +8,7 @@ * @category Controller * @package OCA\Procest\Controller * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * diff --git a/lib/Controller/ZgwMappingController.php b/lib/Controller/ZgwMappingController.php index 054a8629..7517066b 100644 --- a/lib/Controller/ZgwMappingController.php +++ b/lib/Controller/ZgwMappingController.php @@ -8,7 +8,7 @@ * @category Controller * @package OCA\Procest\Controller * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * diff --git a/lib/Controller/ZrcController.php b/lib/Controller/ZrcController.php index 5cbb6dd6..b9675a27 100644 --- a/lib/Controller/ZrcController.php +++ b/lib/Controller/ZrcController.php @@ -13,7 +13,7 @@ * @category Controller * @package OCA\Procest\Controller * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * diff --git a/lib/Controller/ZtcController.php b/lib/Controller/ZtcController.php index a3c881c7..41b6097a 100644 --- a/lib/Controller/ZtcController.php +++ b/lib/Controller/ZtcController.php @@ -11,7 +11,7 @@ * @category Controller * @package OCA\Procest\Controller * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * diff --git a/lib/Dashboard/CasesOverviewWidget.php b/lib/Dashboard/CasesOverviewWidget.php index 5bbb768f..159424a1 100644 --- a/lib/Dashboard/CasesOverviewWidget.php +++ b/lib/Dashboard/CasesOverviewWidget.php @@ -8,7 +8,7 @@ * @category Dashboard * @package OCA\Procest\Dashboard * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * diff --git a/lib/Dashboard/DeadlineAlertsWidget.php b/lib/Dashboard/DeadlineAlertsWidget.php index 382145fc..d95cc5b9 100644 --- a/lib/Dashboard/DeadlineAlertsWidget.php +++ b/lib/Dashboard/DeadlineAlertsWidget.php @@ -9,7 +9,7 @@ * @category Dashboard * @package OCA\Procest\Dashboard * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * diff --git a/lib/Dashboard/MyTasksWidget.php b/lib/Dashboard/MyTasksWidget.php index cc345954..32970788 100644 --- a/lib/Dashboard/MyTasksWidget.php +++ b/lib/Dashboard/MyTasksWidget.php @@ -8,7 +8,7 @@ * @category Dashboard * @package OCA\Procest\Dashboard * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * diff --git a/lib/Dashboard/OverdueCasesWidget.php b/lib/Dashboard/OverdueCasesWidget.php index 737a353b..b38c7f43 100644 --- a/lib/Dashboard/OverdueCasesWidget.php +++ b/lib/Dashboard/OverdueCasesWidget.php @@ -8,7 +8,7 @@ * @category Dashboard * @package OCA\Procest\Dashboard * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * diff --git a/lib/Dashboard/StalledCasesWidget.php b/lib/Dashboard/StalledCasesWidget.php index 059622fe..4c17a8dd 100644 --- a/lib/Dashboard/StalledCasesWidget.php +++ b/lib/Dashboard/StalledCasesWidget.php @@ -9,7 +9,7 @@ * @category Dashboard * @package OCA\Procest\Dashboard * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * diff --git a/lib/Dashboard/StartCaseWidget.php b/lib/Dashboard/StartCaseWidget.php index 21a227a8..e24b5136 100644 --- a/lib/Dashboard/StartCaseWidget.php +++ b/lib/Dashboard/StartCaseWidget.php @@ -8,7 +8,7 @@ * @category Dashboard * @package OCA\Procest\Dashboard * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * diff --git a/lib/Dashboard/TaskRemindersWidget.php b/lib/Dashboard/TaskRemindersWidget.php index 859f85ae..74442ff6 100644 --- a/lib/Dashboard/TaskRemindersWidget.php +++ b/lib/Dashboard/TaskRemindersWidget.php @@ -9,7 +9,7 @@ * @category Dashboard * @package OCA\Procest\Dashboard * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * diff --git a/lib/Listener/DeepLinkRegistrationListener.php b/lib/Listener/DeepLinkRegistrationListener.php index 2d9f3b72..3ec932c8 100644 --- a/lib/Listener/DeepLinkRegistrationListener.php +++ b/lib/Listener/DeepLinkRegistrationListener.php @@ -8,7 +8,7 @@ * @category Listener * @package OCA\Procest\Listener * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * diff --git a/lib/Middleware/TenantMiddleware.php b/lib/Middleware/TenantMiddleware.php index 799cada2..d1af9da6 100644 --- a/lib/Middleware/TenantMiddleware.php +++ b/lib/Middleware/TenantMiddleware.php @@ -8,7 +8,7 @@ * @category Middleware * @package OCA\Procest\Middleware * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * @@ -51,10 +51,10 @@ class TenantMiddleware extends Middleware /** * Constructor for the TenantMiddleware. * - * @param TenantService $tenantService The tenant service - * @param IUserSession $userSession The user session - * @param IRequest $request The request object - * @param LoggerInterface $logger The logger + * @param TenantService $tenantService The tenant service + * @param IUserSession $userSession The user session + * @param IRequest $request The request object + * @param LoggerInterface $logger The logger * * @return void */ @@ -69,8 +69,8 @@ public function __construct( /** * Check tenant context before controller execution. * - * @param \OCP\AppFramework\Controller $controller The controller - * @param string $methodName The method name + * @param \OCP\AppFramework\Controller $controller The controller + * @param string $methodName The method name * * @return void * @@ -117,9 +117,9 @@ public function beforeController($controller, $methodName): void /** * Handle exceptions from controllers. * - * @param \OCP\AppFramework\Controller $controller The controller - * @param string $methodName The method name - * @param \Exception $exception The exception + * @param \OCP\AppFramework\Controller $controller The controller + * @param string $methodName The method name + * @param \Exception $exception The exception * * @return JSONResponse The error response * diff --git a/lib/Middleware/ZgwAuthException.php b/lib/Middleware/ZgwAuthException.php index 21fb4931..fa3e5bdf 100644 --- a/lib/Middleware/ZgwAuthException.php +++ b/lib/Middleware/ZgwAuthException.php @@ -8,7 +8,7 @@ * @category Middleware * @package OCA\Procest\Middleware * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * diff --git a/lib/Middleware/ZgwAuthMiddleware.php b/lib/Middleware/ZgwAuthMiddleware.php index c7686183..d10c3919 100644 --- a/lib/Middleware/ZgwAuthMiddleware.php +++ b/lib/Middleware/ZgwAuthMiddleware.php @@ -8,7 +8,7 @@ * @category Middleware * @package OCA\Procest\Middleware * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * diff --git a/lib/Repair/InitializeSettings.php b/lib/Repair/InitializeSettings.php index f416bec6..b8a9c9c8 100644 --- a/lib/Repair/InitializeSettings.php +++ b/lib/Repair/InitializeSettings.php @@ -8,7 +8,7 @@ * @category Repair * @package OCA\Procest\Repair * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * diff --git a/lib/Repair/LoadDefaultZgwMappings.php b/lib/Repair/LoadDefaultZgwMappings.php index 1cb0ab56..599b56af 100644 --- a/lib/Repair/LoadDefaultZgwMappings.php +++ b/lib/Repair/LoadDefaultZgwMappings.php @@ -10,7 +10,7 @@ * @category Repair * @package OCA\Procest\Repair * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * diff --git a/lib/Repair/SeedBezwaarBeroepData.php b/lib/Repair/SeedBezwaarBeroepData.php index c0a2b819..ba11c174 100644 --- a/lib/Repair/SeedBezwaarBeroepData.php +++ b/lib/Repair/SeedBezwaarBeroepData.php @@ -9,7 +9,7 @@ * @category Repair * @package OCA\Procest\Repair * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * diff --git a/lib/Sections/SettingsSection.php b/lib/Sections/SettingsSection.php index 23c00f6e..bb5d3ebd 100644 --- a/lib/Sections/SettingsSection.php +++ b/lib/Sections/SettingsSection.php @@ -8,7 +8,7 @@ * @category Sections * @package OCA\Procest\Sections * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * diff --git a/lib/Service/AiService.php b/lib/Service/AiService.php index 738fca52..db068a64 100644 --- a/lib/Service/AiService.php +++ b/lib/Service/AiService.php @@ -10,7 +10,7 @@ * @category Service * @package OCA\Procest\Service * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * @@ -55,9 +55,9 @@ class AiService /** * Constructor for AiService. * - * @param IAppConfig $appConfig The app configuration service - * @param ContainerInterface $container The DI container - * @param LoggerInterface $logger The logger interface + * @param IAppConfig $appConfig The app configuration service + * @param ContainerInterface $container The DI container + * @param LoggerInterface $logger The logger interface * * @return void */ @@ -133,19 +133,21 @@ public function classifyDocument(string $caseId, string $documentId, string $use $responseTimeMs = (int) ((microtime(true) - $startTime) * 1000); - $this->recordAuditEntry([ - 'type' => 'classification', - 'action' => 'suggested', - 'caseId' => $caseId, - 'documentId' => $documentId, - 'model' => $this->getModelIdentifier(), - 'prompt' => $prompt, - 'suggestion' => $result, - 'confidence' => ($result['confidence'] ?? 0.0), - 'userId' => $userId, - 'timestamp' => date('c'), - 'responseTimeMs' => $responseTimeMs, - ]); + $this->recordAuditEntry( + [ + 'type' => 'classification', + 'action' => 'suggested', + 'caseId' => $caseId, + 'documentId' => $documentId, + 'model' => $this->getModelIdentifier(), + 'prompt' => $prompt, + 'suggestion' => $result, + 'confidence' => ($result['confidence'] ?? 0.0), + 'userId' => $userId, + 'timestamp' => date('c'), + 'responseTimeMs' => $responseTimeMs, + ] + ); return [ 'success' => true, @@ -191,19 +193,21 @@ public function extractData(string $caseId, ?string $documentId, string $userId) $responseTimeMs = (int) ((microtime(true) - $startTime) * 1000); - $this->recordAuditEntry([ - 'type' => 'extraction', - 'action' => 'suggested', - 'caseId' => $caseId, - 'documentId' => ($documentId ?? ''), - 'model' => $this->getModelIdentifier(), - 'prompt' => $prompt, - 'suggestion' => $result, - 'confidence' => ($result['averageConfidence'] ?? 0.0), - 'userId' => $userId, - 'timestamp' => date('c'), - 'responseTimeMs' => $responseTimeMs, - ]); + $this->recordAuditEntry( + [ + 'type' => 'extraction', + 'action' => 'suggested', + 'caseId' => $caseId, + 'documentId' => ($documentId ?? ''), + 'model' => $this->getModelIdentifier(), + 'prompt' => $prompt, + 'suggestion' => $result, + 'confidence' => ($result['averageConfidence'] ?? 0.0), + 'userId' => $userId, + 'timestamp' => date('c'), + 'responseTimeMs' => $responseTimeMs, + ] + ); return [ 'success' => true, @@ -248,18 +252,20 @@ public function askQuestion(string $caseId, string $question, string $userId): a $responseTimeMs = (int) ((microtime(true) - $startTime) * 1000); - $this->recordAuditEntry([ - 'type' => 'qa', - 'action' => 'suggested', - 'caseId' => $caseId, - 'model' => $this->getModelIdentifier(), - 'prompt' => $question, - 'suggestion' => $result, - 'confidence' => ($result['confidence'] ?? 0.0), - 'userId' => $userId, - 'timestamp' => date('c'), - 'responseTimeMs' => $responseTimeMs, - ]); + $this->recordAuditEntry( + [ + 'type' => 'qa', + 'action' => 'suggested', + 'caseId' => $caseId, + 'model' => $this->getModelIdentifier(), + 'prompt' => $question, + 'suggestion' => $result, + 'confidence' => ($result['confidence'] ?? 0.0), + 'userId' => $userId, + 'timestamp' => date('c'), + 'responseTimeMs' => $responseTimeMs, + ] + ); return [ 'success' => true, @@ -307,18 +313,20 @@ public function summarize(string $caseId, string $type, ?string $documentId, str $responseTimeMs = (int) ((microtime(true) - $startTime) * 1000); - $this->recordAuditEntry([ - 'type' => 'summary', - 'action' => 'suggested', - 'caseId' => $caseId, - 'documentId' => ($documentId ?? ''), - 'model' => $this->getModelIdentifier(), - 'prompt' => $prompt, - 'suggestion' => ['summary' => ($result['summary'] ?? '')], - 'userId' => $userId, - 'timestamp' => date('c'), - 'responseTimeMs' => $responseTimeMs, - ]); + $this->recordAuditEntry( + [ + 'type' => 'summary', + 'action' => 'suggested', + 'caseId' => $caseId, + 'documentId' => ($documentId ?? ''), + 'model' => $this->getModelIdentifier(), + 'prompt' => $prompt, + 'suggestion' => ['summary' => ($result['summary'] ?? '')], + 'userId' => $userId, + 'timestamp' => date('c'), + 'responseTimeMs' => $responseTimeMs, + ] + ); return [ 'success' => true, @@ -362,18 +370,20 @@ public function suggestRouting(string $caseId, string $userId): array $responseTimeMs = (int) ((microtime(true) - $startTime) * 1000); - $this->recordAuditEntry([ - 'type' => 'routing', - 'action' => 'suggested', - 'caseId' => $caseId, - 'model' => $this->getModelIdentifier(), - 'prompt' => $prompt, - 'suggestion' => $result, - 'confidence' => ($result['confidence'] ?? 0.0), - 'userId' => $userId, - 'timestamp' => date('c'), - 'responseTimeMs' => $responseTimeMs, - ]); + $this->recordAuditEntry( + [ + 'type' => 'routing', + 'action' => 'suggested', + 'caseId' => $caseId, + 'model' => $this->getModelIdentifier(), + 'prompt' => $prompt, + 'suggestion' => $result, + 'confidence' => ($result['confidence'] ?? 0.0), + 'userId' => $userId, + 'timestamp' => date('c'), + 'responseTimeMs' => $responseTimeMs, + ] + ); return [ 'success' => true, @@ -417,17 +427,19 @@ public function suggestNextStep(string $caseId, string $userId): array $responseTimeMs = (int) ((microtime(true) - $startTime) * 1000); - $this->recordAuditEntry([ - 'type' => 'decision_support', - 'action' => 'suggested', - 'caseId' => $caseId, - 'model' => $this->getModelIdentifier(), - 'prompt' => $prompt, - 'suggestion' => $result, - 'userId' => $userId, - 'timestamp' => date('c'), - 'responseTimeMs' => $responseTimeMs, - ]); + $this->recordAuditEntry( + [ + 'type' => 'decision_support', + 'action' => 'suggested', + 'caseId' => $caseId, + 'model' => $this->getModelIdentifier(), + 'prompt' => $prompt, + 'suggestion' => $result, + 'userId' => $userId, + 'timestamp' => date('c'), + 'responseTimeMs' => $responseTimeMs, + ] + ); return [ 'success' => true, @@ -469,18 +481,20 @@ public function recordUserAction( ?string $reason, string $userId, ): array { - $this->recordAuditEntry([ - 'type' => $type, - 'action' => $userAction, - 'caseId' => $caseId, - 'model' => $this->getModelIdentifier(), - 'suggestion' => $suggestion, - 'userAction' => $userAction, - 'actualValue' => ($actualValue ?? []), - 'reason' => ($reason ?? ''), - 'userId' => $userId, - 'timestamp' => date('c'), - ]); + $this->recordAuditEntry( + [ + 'type' => $type, + 'action' => $userAction, + 'caseId' => $caseId, + 'model' => $this->getModelIdentifier(), + 'suggestion' => $suggestion, + 'userAction' => $userAction, + 'actualValue' => ($actualValue ?? []), + 'reason' => ($reason ?? ''), + 'userId' => $userId, + 'timestamp' => date('c'), + ] + ); return ['success' => true]; }//end recordUserAction() @@ -524,19 +538,19 @@ public function testHealth(): array public function getAiSettings(): array { return [ - 'ai_enabled' => $this->appConfig->getValueString(Application::APP_ID, 'ai_enabled', ''), - 'ai_model_type' => $this->appConfig->getValueString(Application::APP_ID, 'ai_model_type', 'local'), - 'ai_model_url' => $this->appConfig->getValueString(Application::APP_ID, 'ai_model_url', ''), - 'ai_model_name' => $this->appConfig->getValueString(Application::APP_ID, 'ai_model_name', ''), - 'ai_api_key_set' => $this->appConfig->getValueString(Application::APP_ID, 'ai_api_key', '') !== '', - 'ai_feature_classification' => $this->appConfig->getValueString(Application::APP_ID, 'ai_feature_classification', ''), - 'ai_feature_extraction' => $this->appConfig->getValueString(Application::APP_ID, 'ai_feature_extraction', ''), - 'ai_feature_qa' => $this->appConfig->getValueString(Application::APP_ID, 'ai_feature_qa', ''), - 'ai_feature_summary' => $this->appConfig->getValueString(Application::APP_ID, 'ai_feature_summary', ''), - 'ai_feature_routing' => $this->appConfig->getValueString(Application::APP_ID, 'ai_feature_routing', ''), - 'ai_feature_decision_support' => $this->appConfig->getValueString(Application::APP_ID, 'ai_feature_decision_support', ''), - 'ai_dpia_acknowledged' => $this->appConfig->getValueString(Application::APP_ID, 'ai_dpia_acknowledged', ''), - 'ai_pii_stripping' => $this->appConfig->getValueString(Application::APP_ID, 'ai_pii_stripping', '1'), + 'ai_enabled' => $this->appConfig->getValueString(Application::APP_ID, 'ai_enabled', ''), + 'ai_model_type' => $this->appConfig->getValueString(Application::APP_ID, 'ai_model_type', 'local'), + 'ai_model_url' => $this->appConfig->getValueString(Application::APP_ID, 'ai_model_url', ''), + 'ai_model_name' => $this->appConfig->getValueString(Application::APP_ID, 'ai_model_name', ''), + 'ai_api_key_set' => $this->appConfig->getValueString(Application::APP_ID, 'ai_api_key', '') !== '', + 'ai_feature_classification' => $this->appConfig->getValueString(Application::APP_ID, 'ai_feature_classification', ''), + 'ai_feature_extraction' => $this->appConfig->getValueString(Application::APP_ID, 'ai_feature_extraction', ''), + 'ai_feature_qa' => $this->appConfig->getValueString(Application::APP_ID, 'ai_feature_qa', ''), + 'ai_feature_summary' => $this->appConfig->getValueString(Application::APP_ID, 'ai_feature_summary', ''), + 'ai_feature_routing' => $this->appConfig->getValueString(Application::APP_ID, 'ai_feature_routing', ''), + 'ai_feature_decision_support' => $this->appConfig->getValueString(Application::APP_ID, 'ai_feature_decision_support', ''), + 'ai_dpia_acknowledged' => $this->appConfig->getValueString(Application::APP_ID, 'ai_dpia_acknowledged', ''), + 'ai_pii_stripping' => $this->appConfig->getValueString(Application::APP_ID, 'ai_pii_stripping', '1'), ]; }//end getAiSettings() @@ -616,12 +630,14 @@ private function callAiModel(string $prompt): array ); // Build the request payload for Ollama-compatible API. - $payload = json_encode([ - 'model' => $modelName, - 'prompt' => $prompt, - 'stream' => false, - 'format' => 'json', - ]); + $payload = json_encode( + [ + 'model' => $modelName, + 'prompt' => $prompt, + 'stream' => false, + 'format' => 'json', + ] + ); $endpoint = rtrim($modelUrl, '/').'/api/generate'; @@ -640,10 +656,14 @@ private function callAiModel(string $prompt): array '' ); if (empty($apiKey) === false) { - curl_setopt($ch, CURLOPT_HTTPHEADER, [ - 'Content-Type: application/json', - 'Authorization: Bearer '.$apiKey, - ]); + curl_setopt( + $ch, + CURLOPT_HTTPHEADER, + [ + 'Content-Type: application/json', + 'Authorization: Bearer '.$apiKey, + ] + ); } } @@ -696,7 +716,7 @@ private function recordAuditEntry(array $entry): void 'register', '' ); - $schemaId = $this->appConfig->getValueString( + $schemaId = $this->appConfig->getValueString( Application::APP_ID, 'ai_audit_entry_schema', '' @@ -717,7 +737,7 @@ private function recordAuditEntry(array $entry): void 'Failed to record AI audit entry', ['error' => $e->getMessage()] ); - } + }//end try }//end recordAuditEntry() /** diff --git a/lib/Service/AppointmentBackend/JccBackend.php b/lib/Service/AppointmentBackend/JccBackend.php index e080ea08..360fdc92 100644 --- a/lib/Service/AppointmentBackend/JccBackend.php +++ b/lib/Service/AppointmentBackend/JccBackend.php @@ -21,7 +21,7 @@ public function __construct( private string $apiUrl, private string $apiKey, ) { - } + }//end __construct() public function getTimeslots(string $productId, string $locationId, string $date): array { @@ -44,7 +44,7 @@ public function getTimeslots(string $productId, string $locationId, string $date $this->logger->error('JCC API error: '.$e->getMessage()); return []; } - } + }//end getTimeslots() public function bookAppointment(array $data): array { @@ -63,7 +63,7 @@ public function bookAppointment(array $data): array $this->logger->error('JCC booking error: '.$e->getMessage()); return ['error' => $e->getMessage()]; } - } + }//end bookAppointment() public function cancelAppointment(string $externalId): bool { @@ -78,11 +78,11 @@ public function cancelAppointment(string $externalId): bool $this->logger->error('JCC cancel error: '.$e->getMessage()); return false; } - } + }//end cancelAppointment() public function rescheduleAppointment(string $externalId, string $newDateTime): array { $this->cancelAppointment($externalId); return $this->bookAppointment(['dateTime' => $newDateTime, 'externalId' => $externalId]); - } -} + }//end rescheduleAppointment() +}//end class diff --git a/lib/Service/AppointmentBackend/LocalBackend.php b/lib/Service/AppointmentBackend/LocalBackend.php index 889dd6e6..591dd056 100644 --- a/lib/Service/AppointmentBackend/LocalBackend.php +++ b/lib/Service/AppointmentBackend/LocalBackend.php @@ -21,7 +21,7 @@ class LocalBackend implements AppointmentBackendInterface public function __construct( private LoggerInterface $logger, ) { - } + }//end __construct() public function getTimeslots(string $productId, string $locationId, string $date): array { @@ -38,21 +38,21 @@ public function getTimeslots(string $productId, string $locationId, string $date } return $slots; - } + }//end getTimeslots() public function bookAppointment(array $data): array { return ['externalId' => 'local-'.bin2hex(random_bytes(8))]; - } + }//end bookAppointment() public function cancelAppointment(string $externalId): bool { $this->logger->info('Local backend: appointment cancelled', ['externalId' => $externalId]); return true; - } + }//end cancelAppointment() public function rescheduleAppointment(string $externalId, string $newDateTime): array { return ['externalId' => $externalId]; - } -} + }//end rescheduleAppointment() +}//end class diff --git a/lib/Service/AppointmentBackend/QmaticBackend.php b/lib/Service/AppointmentBackend/QmaticBackend.php index f975199b..24a1428c 100644 --- a/lib/Service/AppointmentBackend/QmaticBackend.php +++ b/lib/Service/AppointmentBackend/QmaticBackend.php @@ -18,7 +18,7 @@ public function __construct( private string $apiUrl, private string $apiKey, ) { - } + }//end __construct() public function getTimeslots(string $productId, string $locationId, string $date): array { @@ -38,12 +38,13 @@ public function getTimeslots(string $productId, string $locationId, string $date 'available' => true, ]; } + return $slots; } catch (\Exception $e) { $this->logger->error('Qmatic API error: '.$e->getMessage()); return []; - } - } + }//end try + }//end getTimeslots() public function bookAppointment(array $data): array { @@ -62,7 +63,7 @@ public function bookAppointment(array $data): array $this->logger->error('Qmatic booking error: '.$e->getMessage()); return ['error' => $e->getMessage()]; } - } + }//end bookAppointment() public function cancelAppointment(string $externalId): bool { @@ -77,11 +78,11 @@ public function cancelAppointment(string $externalId): bool $this->logger->error('Qmatic cancel error: '.$e->getMessage()); return false; } - } + }//end cancelAppointment() public function rescheduleAppointment(string $externalId, string $newDateTime): array { $this->cancelAppointment($externalId); return $this->bookAppointment(['dateTime' => $newDateTime]); - } -} + }//end rescheduleAppointment() +}//end class diff --git a/lib/Service/AppointmentService.php b/lib/Service/AppointmentService.php index 0cc8793f..a15a7735 100644 --- a/lib/Service/AppointmentService.php +++ b/lib/Service/AppointmentService.php @@ -28,7 +28,7 @@ public function __construct( private ContainerInterface $container, private LoggerInterface $logger, ) { - } + }//end __construct() /** * Get available timeslots via the configured backend. @@ -36,7 +36,7 @@ public function __construct( public function getTimeslots(string $productId, string $locationId, string $date): array { return $this->getBackend()->getTimeslots($productId, $locationId, $date); - } + }//end getTimeslots() /** * Book an appointment linked to a case. @@ -55,13 +55,16 @@ public function bookAppointment(string $caseId, array $data): array $register = $this->settingsService->getConfigValue('register'); $schema = $this->settingsService->getConfigValue('appointment_schema'); - $appointmentData = array_merge($data, [ - 'caseId' => $caseId, - 'status' => 'scheduled', - 'externalId' => $backendResult['externalId'] ?? null, - 'cancelToken' => bin2hex(random_bytes(16)), - 'reminderSent' => false, - ]); + $appointmentData = array_merge( + $data, + [ + 'caseId' => $caseId, + 'status' => 'scheduled', + 'externalId' => $backendResult['externalId'] ?? null, + 'cancelToken' => bin2hex(random_bytes(16)), + 'reminderSent' => false, + ] + ); $result = $objectService->saveObject( (int) $register, @@ -69,13 +72,16 @@ public function bookAppointment(string $caseId, array $data): array $appointmentData, ); - $this->logger->info('Procest: Appointment booked', [ - 'caseId' => $caseId, - 'appointmentId' => $result->getUuid(), - ]); + $this->logger->info( + 'Procest: Appointment booked', + [ + 'caseId' => $caseId, + 'appointmentId' => $result->getUuid(), + ] + ); return $result->jsonSerialize(); - } + }//end bookAppointment() /** * Cancel an appointment. @@ -99,10 +105,10 @@ public function cancelAppointment(string $appointmentId): array } $data['status'] = 'cancelled'; - $result = $objectService->saveObject((int) $register, (int) $schema, $data); + $result = $objectService->saveObject((int) $register, (int) $schema, $data); return $result->jsonSerialize(); - } + }//end cancelAppointment() /** * Mark an appointment as no-show. @@ -117,13 +123,13 @@ public function markNoShow(string $appointmentId): array $register = $this->settingsService->getConfigValue('register'); $schema = $this->settingsService->getConfigValue('appointment_schema'); - $appointment = $objectService->getObject((int) $register, (int) $schema, $appointmentId); - $data = $appointment->jsonSerialize(); + $appointment = $objectService->getObject((int) $register, (int) $schema, $appointmentId); + $data = $appointment->jsonSerialize(); $data['status'] = 'no_show'; $result = $objectService->saveObject((int) $register, (int) $schema, $data); return $result->jsonSerialize(); - } + }//end markNoShow() /** * Get appointments for a case. @@ -145,7 +151,7 @@ public function getAppointmentsForCase(string $caseId): array ); return $result['objects'] ?? []; - } + }//end getAppointmentsForCase() /** * Validate cancel token and return appointment. @@ -173,7 +179,7 @@ public function getAppointmentByToken(string $token): ?array $apt = reset($appointments); return is_object($apt) ? $apt->jsonSerialize() : $apt; - } + }//end getAppointmentByToken() /** * Get the configured appointment backend. @@ -192,7 +198,7 @@ private function getBackend(): AppointmentBackendInterface default: return new LocalBackend($this->logger); } - } + }//end getBackend() private function getObjectService(): ?\OCA\OpenRegister\Service\ObjectService { @@ -206,5 +212,5 @@ private function getObjectService(): ?\OCA\OpenRegister\Service\ObjectService $this->logger->error('Procest: Could not get ObjectService', ['exception' => $e->getMessage()]); return null; } - } -} + }//end getObjectService() +}//end class diff --git a/lib/Service/BerichtenboxAdapter/BerichtenboxAdapterInterface.php b/lib/Service/BerichtenboxAdapter/BerichtenboxAdapterInterface.php index 03562880..a74f2f02 100644 --- a/lib/Service/BerichtenboxAdapter/BerichtenboxAdapterInterface.php +++ b/lib/Service/BerichtenboxAdapter/BerichtenboxAdapterInterface.php @@ -25,7 +25,7 @@ public function sendMessage( string $subject, string $body, string $typeCode, - ?string $attachment = null, + ?string $attachment=null, ): array; /** @@ -36,4 +36,4 @@ public function sendMessage( * @return array Status with read (bool), readAt (datetime|null) */ public function getReadStatus(string $messageId): array; -} +}//end interface diff --git a/lib/Service/BerichtenboxAdapter/MockAdapter.php b/lib/Service/BerichtenboxAdapter/MockAdapter.php index 4d5a902c..78abf3ef 100644 --- a/lib/Service/BerichtenboxAdapter/MockAdapter.php +++ b/lib/Service/BerichtenboxAdapter/MockAdapter.php @@ -16,31 +16,34 @@ class MockAdapter implements BerichtenboxAdapterInterface public function __construct( private LoggerInterface $logger, ) { - } + }//end __construct() public function sendMessage( string $bsn, string $subject, string $body, string $typeCode, - ?string $attachment = null, + ?string $attachment=null, ): array { $messageId = 'mock-'.bin2hex(random_bytes(8)); - $this->logger->info('MockBerichtenbox: Message sent', [ - 'messageId' => $messageId, - 'bsn' => substr($bsn, 0, 4).'*****', - 'subject' => $subject, - 'typeCode' => $typeCode, - 'hasAttachment' => $attachment !== null, - ]); + $this->logger->info( + 'MockBerichtenbox: Message sent', + [ + 'messageId' => $messageId, + 'bsn' => substr($bsn, 0, 4).'*****', + 'subject' => $subject, + 'typeCode' => $typeCode, + 'hasAttachment' => $attachment !== null, + ] + ); return [ 'messageId' => $messageId, 'status' => 'sent', 'sentAt' => (new \DateTime())->format('c'), ]; - } + }//end sendMessage() public function getReadStatus(string $messageId): array { @@ -49,5 +52,5 @@ public function getReadStatus(string $messageId): array 'read' => true, 'readAt' => (new \DateTime('-1 hour'))->format('c'), ]; - } -} + }//end getReadStatus() +}//end class diff --git a/lib/Service/BerichtenboxService.php b/lib/Service/BerichtenboxService.php index 5865b8cf..eedd9318 100644 --- a/lib/Service/BerichtenboxService.php +++ b/lib/Service/BerichtenboxService.php @@ -15,15 +15,15 @@ */ class BerichtenboxService { - private const MAX_ATTACHMENT_SIZE = 10485760; // 10 MB - + private const MAX_ATTACHMENT_SIZE = 10485760; + // 10 MB public function __construct( private SettingsService $settingsService, private IAppManager $appManager, private ContainerInterface $container, private LoggerInterface $logger, ) { - } + }//end __construct() /** * Send a message to the Berichtenbox. @@ -34,7 +34,7 @@ public function sendMessage( string $subject, string $body, string $typeCode, - ?string $attachmentFileId = null, + ?string $attachmentFileId=null, ): array { // Validate inputs. $errors = $this->validateMessage($bsn, $subject, $body); @@ -51,7 +51,8 @@ public function sendMessage( $attachmentContent = null; if ($attachmentFileId !== null) { // Attachment validation would check file size here. - $attachmentContent = ''; // Placeholder -- actual file reading via IRootFolder. + $attachmentContent = ''; + // Placeholder -- actual file reading via IRootFolder. } // Send via adapter. @@ -80,13 +81,16 @@ public function sendMessage( $messageData, ); - $this->logger->info('Procest: Berichtenbox message sent', [ - 'caseId' => $caseId, - 'messageId' => $result['messageId'] ?? '', - ]); + $this->logger->info( + 'Procest: Berichtenbox message sent', + [ + 'caseId' => $caseId, + 'messageId' => $result['messageId'] ?? '', + ] + ); return $saved->jsonSerialize(); - } + }//end sendMessage() /** * Get sent messages for a case. @@ -108,7 +112,7 @@ public function getMessagesForCase(string $caseId): array ); return $result['objects'] ?? []; - } + }//end getMessagesForCase() /** * Poll read status for a message. @@ -154,7 +158,7 @@ public function pollReadStatus(string $messageId): array } return $data; - } + }//end pollReadStatus() /** * Validate a BSN using the 11-proef. @@ -169,10 +173,11 @@ public function validateBsn(string $bsn): bool for ($i = 0; $i < 8; $i++) { $sum += (int) $bsn[$i] * (9 - $i); } + $sum -= (int) $bsn[8]; return ($sum % 11) === 0 && $sum !== 0; - } + }//end validateBsn() /** * Validate message inputs. @@ -183,7 +188,7 @@ private function validateMessage(string $bsn, string $subject, string $body): ar if (empty($bsn) === true) { $errors[] = 'BSN is verplicht voor berichten via Mijn Overheid'; - } elseif ($this->validateBsn($bsn) === false) { + } else if ($this->validateBsn($bsn) === false) { $errors[] = 'Ongeldig BSN-nummer'; } @@ -201,13 +206,13 @@ private function validateMessage(string $bsn, string $subject, string $body): ar } return $errors; - } + }//end validateMessage() private function getAdapter(): BerichtenboxAdapterInterface { // For MVP, always use mock adapter. return new MockAdapter($this->logger); - } + }//end getAdapter() private function getObjectService(): ?\OCA\OpenRegister\Service\ObjectService { @@ -221,5 +226,5 @@ private function getObjectService(): ?\OCA\OpenRegister\Service\ObjectService $this->logger->error('Procest: Could not get ObjectService', ['exception' => $e->getMessage()]); return null; } - } -} + }//end getObjectService() +}//end class diff --git a/lib/Service/CaseDefinitionExportService.php b/lib/Service/CaseDefinitionExportService.php index da39db06..b5b30b9d 100644 --- a/lib/Service/CaseDefinitionExportService.php +++ b/lib/Service/CaseDefinitionExportService.php @@ -9,7 +9,7 @@ * @category Service * @package OCA\Procest\Service * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * @@ -65,7 +65,7 @@ public function __construct( private readonly IAppConfig $appConfig, private readonly LoggerInterface $logger, ) { - } + }//end __construct() /** * Export a case definition as a ZIP archive. @@ -81,7 +81,7 @@ public function __construct( */ public function exportCaseDefinition( string $caseTypeId, - array $components = [], + array $components=[], ): array { if (empty($components)) { $components = self::COMPONENTS; @@ -91,7 +91,7 @@ public function exportCaseDefinition( $invalidComponents = array_diff($components, self::COMPONENTS); if (!empty($invalidComponents)) { throw new \InvalidArgumentException( - 'Invalid export components: ' . implode(', ', $invalidComponents) + 'Invalid export components: '.implode(', ', $invalidComponents) ); } @@ -112,10 +112,10 @@ public function exportCaseDefinition( throw new \RuntimeException('Failed to create temporary file for export'); } - $zip = new \ZipArchive(); + $zip = new \ZipArchive(); $result = $zip->open($tempPath, \ZipArchive::CREATE | \ZipArchive::OVERWRITE); if ($result !== true) { - throw new \RuntimeException('Failed to create ZIP archive: error code ' . $result); + throw new \RuntimeException('Failed to create ZIP archive: error code '.$result); } // Add manifest. @@ -125,17 +125,17 @@ public function exportCaseDefinition( foreach ($components as $component) { $data = $this->exportComponent($caseTypeId, $component); if ($data !== null) { - $filename = $component === 'workflows' ? 'workflows/' : $component . '.json'; + $filename = $component === 'workflows' ? 'workflows/' : $component.'.json'; if ($component === 'workflows' && is_array($data)) { foreach ($data as $workflowName => $workflowData) { $zip->addFromString( - 'workflows/' . $workflowName . '.json', + 'workflows/'.$workflowName.'.json', json_encode($workflowData, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) ); } } else { $zip->addFromString( - $component . '.json', + $component.'.json', json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) ); } @@ -144,14 +144,14 @@ public function exportCaseDefinition( $zip->close(); - $slug = $manifest['caseType']['slug'] ?? 'unknown'; + $slug = $manifest['caseType']['slug'] ?? 'unknown'; $version = $manifest['version'] ?? '1.0'; return [ - 'path' => $tempPath, + 'path' => $tempPath, 'filename' => "case-definition-{$slug}-v{$version}.zip", ]; - } + }//end exportCaseDefinition() /** * Build the manifest for a case definition export. @@ -165,7 +165,7 @@ private function buildManifest(string $caseTypeId, array $components): array { $previousVersion = $this->appConfig->getValueString( Application::APP_ID, - 'export_version_' . $caseTypeId, + 'export_version_'.$caseTypeId, '0.0' ); @@ -174,35 +174,35 @@ private function buildManifest(string $caseTypeId, array $components): array // Store the new version. $this->appConfig->setValueString( Application::APP_ID, - 'export_version_' . $caseTypeId, + 'export_version_'.$caseTypeId, $newVersion ); $excludedComponents = array_values(array_diff(self::COMPONENTS, $components)); return [ - 'version' => $newVersion, - 'previousVersion' => $previousVersion !== '0.0' ? $previousVersion : null, - 'exportDate' => (new \DateTimeImmutable())->format(\DateTimeInterface::ATOM), - 'sourceEnvironment' => $this->appConfig->getValueString( + 'version' => $newVersion, + 'previousVersion' => $previousVersion !== '0.0' ? $previousVersion : null, + 'exportDate' => (new \DateTimeImmutable())->format(\DateTimeInterface::ATOM), + 'sourceEnvironment' => $this->appConfig->getValueString( Application::APP_ID, 'environment_name', 'unknown' ), - 'generator' => 'procest/' . $this->appConfig->getValueString( + 'generator' => 'procest/'.$this->appConfig->getValueString( 'procest', 'installed_version', 'unknown' ), - 'caseType' => [ - 'id' => $caseTypeId, + 'caseType' => [ + 'id' => $caseTypeId, 'slug' => $caseTypeId, ], - 'components' => $components, + 'components' => $components, 'excludedComponents' => $excludedComponents, - 'dependencies' => [], + 'dependencies' => [], ]; - } + }//end buildManifest() /** * Export a single component. @@ -219,8 +219,8 @@ private function exportComponent(string $caseTypeId, string $component): ?array // demonstrate the expected format. return match ($component) { 'schema' => [ - 'caseTypeId' => $caseTypeId, - 'fields' => [], + 'caseTypeId' => $caseTypeId, + 'fields' => [], 'validations' => [], ], 'statuses' => [ @@ -233,16 +233,16 @@ private function exportComponent(string $caseTypeId, string $component): ?array ], 'documents' => [ 'documentTypes' => [], - 'templates' => [], + 'templates' => [], ], 'metadata' => [ - 'resultTypes' => [], + 'resultTypes' => [], 'decisionTypes' => [], ], 'workflows' => [], default => null, - }; - } + };//end match + }//end exportComponent() /** * Increment a version string (e.g., "1.0" -> "1.1"). @@ -254,9 +254,9 @@ private function exportComponent(string $caseTypeId, string $component): ?array private function incrementVersion(string $version): string { $parts = explode('.', $version); - $major = (int)($parts[0] ?? 1); - $minor = (int)($parts[1] ?? 0); + $major = (int) ($parts[0] ?? 1); + $minor = (int) ($parts[1] ?? 0); return sprintf(self::VERSION_FORMAT, $major, $minor + 1); - } -} + }//end incrementVersion() +}//end class diff --git a/lib/Service/CaseDefinitionImportService.php b/lib/Service/CaseDefinitionImportService.php index 1d731fc2..439a0454 100644 --- a/lib/Service/CaseDefinitionImportService.php +++ b/lib/Service/CaseDefinitionImportService.php @@ -9,7 +9,7 @@ * @category Service * @package OCA\Procest\Service * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * @@ -66,7 +66,7 @@ public function __construct( private readonly IAppConfig $appConfig, private readonly LoggerInterface $logger, ) { - } + }//end __construct() /** * Validate a case definition package without importing it. @@ -80,26 +80,26 @@ public function __construct( public function validatePackage(string $zipPath): array { $result = [ - 'valid' => true, - 'errors' => [], - 'warnings' => [], - 'manifest' => null, + 'valid' => true, + 'errors' => [], + 'warnings' => [], + 'manifest' => null, 'conflicts' => [], ]; // Open the ZIP. - $zip = new \ZipArchive(); + $zip = new \ZipArchive(); $openResult = $zip->open($zipPath, \ZipArchive::RDONLY); if ($openResult !== true) { - $result['valid'] = false; - $result['errors'][] = 'Failed to open ZIP archive: error code ' . $openResult; + $result['valid'] = false; + $result['errors'][] = 'Failed to open ZIP archive: error code '.$openResult; return $result; } // Check required files. foreach (self::REQUIRED_FILES as $requiredFile) { if ($zip->locateName($requiredFile) === false) { - $result['valid'] = false; + $result['valid'] = false; $result['errors'][] = "Missing required file: {$requiredFile}"; } } @@ -112,7 +112,7 @@ public function validatePackage(string $zipPath): array // Parse manifest. $manifestJson = $zip->getFromName('manifest.json'); if ($manifestJson === false) { - $result['valid'] = false; + $result['valid'] = false; $result['errors'][] = 'Failed to read manifest.json'; $zip->close(); return $result; @@ -120,8 +120,8 @@ public function validatePackage(string $zipPath): array $manifest = json_decode($manifestJson, true); if ($manifest === null) { - $result['valid'] = false; - $result['errors'][] = 'Invalid JSON in manifest.json: ' . json_last_error_msg(); + $result['valid'] = false; + $result['errors'][] = 'Invalid JSON in manifest.json: '.json_last_error_msg(); $zip->close(); return $result; } @@ -132,7 +132,7 @@ public function validatePackage(string $zipPath): array $requiredManifestFields = ['version', 'exportDate', 'caseType', 'components']; foreach ($requiredManifestFields as $field) { if (!isset($manifest[$field])) { - $result['valid'] = false; + $result['valid'] = false; $result['errors'][] = "Missing required manifest field: {$field}"; } } @@ -150,30 +150,32 @@ public function validatePackage(string $zipPath): array break; } } + if (!$hasWorkflows) { $result['warnings'][] = 'Component "workflows" declared but no workflow files found'; } } else { - $componentFile = $component . '.json'; + $componentFile = $component.'.json'; if ($zip->locateName($componentFile) === false) { - $result['valid'] = false; + $result['valid'] = false; $result['errors'][] = "Component '{$component}' declared in manifest but file '{$componentFile}' not found"; } - } - } + }//end if + }//end foreach // Validate component JSON. foreach ($components as $component) { if ($component === 'workflows') { continue; } - $componentFile = $component . '.json'; - $content = $zip->getFromName($componentFile); + + $componentFile = $component.'.json'; + $content = $zip->getFromName($componentFile); if ($content !== false) { $decoded = json_decode($content, true); if ($decoded === null && json_last_error() !== JSON_ERROR_NONE) { - $result['valid'] = false; - $result['errors'][] = "Invalid JSON in {$componentFile}: " . json_last_error_msg(); + $result['valid'] = false; + $result['errors'][] = "Invalid JSON in {$componentFile}: ".json_last_error_msg(); } } } @@ -192,20 +194,20 @@ public function validatePackage(string $zipPath): array $this->logger->info( 'Validated case definition package: {valid}, errors: {errorCount}, warnings: {warningCount}', [ - 'valid' => $result['valid'] ? 'true' : 'false', - 'errorCount' => count($result['errors']), + 'valid' => $result['valid'] ? 'true' : 'false', + 'errorCount' => count($result['errors']), 'warningCount' => count($result['warnings']), ] ); return $result; - } + }//end validatePackage() /** * Import a case definition package. * - * @param string $zipPath Path to the uploaded ZIP file. - * @param string $strategy Conflict resolution strategy: 'skip', 'overwrite', or 'merge'. + * @param string $zipPath Path to the uploaded ZIP file. + * @param string $strategy Conflict resolution strategy: 'skip', 'overwrite', or 'merge'. * * @return array{success: bool, message: string, components: array} * @@ -215,21 +217,21 @@ public function validatePackage(string $zipPath): array */ public function importCaseDefinition( string $zipPath, - string $strategy = 'skip', + string $strategy='skip', ): array { // First validate. $validation = $this->validatePackage($zipPath); if (!$validation['valid']) { return [ - 'success' => false, - 'message' => 'Package validation failed: ' . implode('; ', $validation['errors']), + 'success' => false, + 'message' => 'Package validation failed: '.implode('; ', $validation['errors']), 'components' => [], ]; } - $manifest = $validation['manifest']; + $manifest = $validation['manifest']; $components = $manifest['components'] ?? []; - $results = []; + $results = []; $zip = new \ZipArchive(); $zip->open($zipPath, \ZipArchive::RDONLY); @@ -239,14 +241,14 @@ public function importCaseDefinition( $results[$component] = $this->importComponent($zip, $component, $strategy); } catch (\Throwable $e) { $results[$component] = [ - 'status' => 'error', + 'status' => 'error', 'message' => $e->getMessage(), ]; $this->logger->error( 'Failed to import component {component}: {error}', [ 'component' => $component, - 'error' => $e->getMessage(), + 'error' => $e->getMessage(), ] ); } @@ -260,16 +262,16 @@ public function importCaseDefinition( 'Case definition import completed: {success}, components: {count}', [ 'success' => $allSuccess ? 'true' : 'false', - 'count' => count($results), + 'count' => count($results), ] ); return [ - 'success' => $allSuccess, - 'message' => $allSuccess ? 'Import completed successfully' : 'Import completed with errors', + 'success' => $allSuccess, + 'message' => $allSuccess ? 'Import completed successfully' : 'Import completed with errors', 'components' => $results, ]; - } + }//end importCaseDefinition() /** * Import a single component from the ZIP archive. @@ -289,10 +291,10 @@ private function importComponent( return $this->importWorkflows($zip, $strategy); } - $content = $zip->getFromName($component . '.json'); + $content = $zip->getFromName($component.'.json'); if ($content === false) { return [ - 'status' => 'skipped', + 'status' => 'skipped', 'message' => "Component file {$component}.json not found in archive", ]; } @@ -300,7 +302,7 @@ private function importComponent( $data = json_decode($content, true); if ($data === null) { return [ - 'status' => 'error', + 'status' => 'error', 'message' => "Invalid JSON in {$component}.json", ]; } @@ -311,15 +313,15 @@ private function importComponent( 'Imported component {component} with strategy {strategy}', [ 'component' => $component, - 'strategy' => $strategy, + 'strategy' => $strategy, ] ); return [ - 'status' => 'success', + 'status' => 'success', 'message' => "Component '{$component}' imported successfully", ]; - } + }//end importComponent() /** * Import workflow files from the ZIP archive. @@ -345,8 +347,8 @@ private function importWorkflows(\ZipArchive $zip, string $strategy): array } return [ - 'status' => 'success', + 'status' => 'success', 'message' => "Imported {$workflowCount} workflow(s)", ]; - } -} + }//end importWorkflows() +}//end class diff --git a/lib/Service/CaseEmailService.php b/lib/Service/CaseEmailService.php index 86e4e024..62f553bb 100644 --- a/lib/Service/CaseEmailService.php +++ b/lib/Service/CaseEmailService.php @@ -10,7 +10,7 @@ * @category Service * @package OCA\Procest\Service * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * @@ -39,7 +39,6 @@ class CaseEmailService */ private const CASE_NUMBER_PATTERN = '/\[ZAAK-(\d{4}-\d{4,})\]/'; - /** * Constructor. * @@ -54,17 +53,16 @@ public function __construct( private readonly IConfig $config, private readonly LoggerInterface $logger, ) { - } - + }//end __construct() /** * Send an email from case context. * - * @param string $caseId The case UUID - * @param string $to Recipient email address - * @param string $subject Email subject - * @param string $body Email body (HTML or plain text) - * @param array $attachments File paths to attach + * @param string $caseId The case UUID + * @param string $to Recipient email address + * @param string $subject Email subject + * @param string $body Email body (HTML or plain text) + * @param array $attachments File paths to attach * * @return array Send result with message ID * @@ -75,14 +73,14 @@ public function sendEmail( string $to, string $subject, string $body, - array $attachments = [], + array $attachments=[], ): array { $fromAddress = $this->config->getAppValue( Application::APP_ID, 'email_from_address', 'noreply@example.nl', ); - $fromName = $this->config->getAppValue( + $fromName = $this->config->getAppValue( Application::APP_ID, 'email_from_name', 'Procest', @@ -106,17 +104,17 @@ public function sendEmail( $this->mailer->send($message); } catch (\Exception $e) { $this->logger->error( - 'Failed to send email for case ' . $caseId . ': ' . $e->getMessage(), + 'Failed to send email for case '.$caseId.': '.$e->getMessage(), ['app' => Application::APP_ID], ); - throw new \RuntimeException('Email sending failed: ' . $e->getMessage()); + throw new \RuntimeException('Email sending failed: '.$e->getMessage()); } // Record the sent email as a case document. $messageId = $this->recordSentEmail($caseId, $to, $subject, $body); $this->logger->info( - 'Email sent for case ' . $caseId . ' to ' . $to, + 'Email sent for case '.$caseId.' to '.$to, ['app' => Application::APP_ID], ); @@ -126,8 +124,7 @@ public function sendEmail( 'subject' => $subject, 'sentAt' => date('Y-m-d\TH:i:s'), ]; - } - + }//end sendEmail() /** * Send an email using a template. @@ -158,8 +155,7 @@ public function sendFromTemplate( $body = $this->resolveVariables($template['body'] ?? '', $caseData); return $this->sendEmail($caseId, $to, $subject, $body); - } - + }//end sendFromTemplate() /** * Resolve template variables in a string. @@ -180,12 +176,13 @@ static function (array $matches) use ($data): string { if (isset($data[$key]) === true && is_scalar($data[$key]) === true) { return (string) $data[$key]; } - return $matches[0]; // Leave unresolved variables as-is. + + return $matches[0]; + // Leave unresolved variables as-is. }, $template, ) ?? $template; - } - + }//end resolveVariables() /** * Find unresolved variables in a template string. @@ -207,8 +204,7 @@ public function findUnresolvedVariables(string $template, array $data): array } return array_unique($unresolved); - } - + }//end findUnresolvedVariables() /** * Extract case number from email subject. @@ -224,16 +220,15 @@ public function extractCaseNumber(string $subject): ?string } return null; - } - + }//end extractCaseNumber() /** * Process an inbound email and link it to a case. * - * @param string $from Sender email address - * @param string $to Recipient email address - * @param string $subject Email subject - * @param string $body Email body + * @param string $from Sender email address + * @param string $to Recipient email address + * @param string $subject Email subject + * @param string $body Email body * @param string $inReplyTo In-Reply-To header (for threading) * * @return array Processing result @@ -243,7 +238,7 @@ public function processInbound( string $to, string $subject, string $body, - string $inReplyTo = '', + string $inReplyTo='', ): array { $caseNumber = $this->extractCaseNumber($subject); @@ -260,7 +255,7 @@ public function processInbound( ); $this->logger->info( - 'Inbound email auto-linked to case ' . $caseId, + 'Inbound email auto-linked to case '.$caseId, ['app' => Application::APP_ID], ); @@ -270,19 +265,18 @@ public function processInbound( 'messageId' => $messageId, 'method' => 'auto', ]; - } - } + }//end if + }//end if // Could not auto-link; add to unlinked queue. return [ - 'linked' => false, - 'caseNumber' => $caseNumber, - 'from' => $from, - 'subject' => $subject, - 'method' => 'unlinked', + 'linked' => false, + 'caseNumber' => $caseNumber, + 'from' => $from, + 'subject' => $subject, + 'method' => 'unlinked', ]; - } - + }//end processInbound() /** * Get email templates for a case type. @@ -314,8 +308,7 @@ public function getTemplatesForCaseType(string $caseTypeId): array ); return is_array($results) ? $results : []; - } - + }//end getTemplatesForCaseType() /** * Load an email template. @@ -340,8 +333,7 @@ private function loadTemplate(string $templateId): ?array $result = $objectService->getObject($register, $schema, $templateId); return is_array($result) ? $result : null; - } - + }//end loadTemplate() /** * Load case data for template variable resolution. @@ -367,15 +359,14 @@ private function loadCaseData(string $caseId): array // Flatten for variable resolution. return [ - 'zaakNummer' => $caseObj['identifier'] ?? '', - 'titel' => $caseObj['title'] ?? '', - 'startdatum' => $caseObj['startDate'] ?? '', - 'deadline' => $caseObj['deadline'] ?? '', - 'status' => $caseObj['status'] ?? '', - 'behandelaar' => $caseObj['assignee'] ?? '', + 'zaakNummer' => $caseObj['identifier'] ?? '', + 'titel' => $caseObj['title'] ?? '', + 'startdatum' => $caseObj['startDate'] ?? '', + 'deadline' => $caseObj['deadline'] ?? '', + 'status' => $caseObj['status'] ?? '', + 'behandelaar' => $caseObj['assignee'] ?? '', ]; - } - + }//end loadCaseData() /** * Record a sent email as a case document. @@ -394,7 +385,7 @@ private function recordSentEmail( string $body, ): string { // Store as activity on the case. - $messageId = 'msg-' . uniqid(); + $messageId = 'msg-'.uniqid(); $objectService = $this->settingsService->getObjectService(); if ($objectService === null) { @@ -405,21 +396,24 @@ private function recordSentEmail( $schema = $this->settingsService->getConfigValue('email_message_schema'); if (empty($register) === false && empty($schema) === false) { - $objectService->saveObject($register, $schema, [ - 'case' => $caseId, - 'direction' => 'outbound', - 'from' => $this->config->getAppValue(Application::APP_ID, 'email_from_address', ''), - 'to' => $to, - 'subject' => $subject, - 'body' => $body, - 'messageId' => $messageId, - 'sentAt' => date('Y-m-d\TH:i:s'), - ]); + $objectService->saveObject( + $register, + $schema, + [ + 'case' => $caseId, + 'direction' => 'outbound', + 'from' => $this->config->getAppValue(Application::APP_ID, 'email_from_address', ''), + 'to' => $to, + 'subject' => $subject, + 'body' => $body, + 'messageId' => $messageId, + 'sentAt' => date('Y-m-d\TH:i:s'), + ] + ); } return $messageId; - } - + }//end recordSentEmail() /** * Record a received email. @@ -439,7 +433,7 @@ private function recordReceivedEmail( string $body, string $inReplyTo, ): string { - $messageId = 'msg-' . uniqid(); + $messageId = 'msg-'.uniqid(); $objectService = $this->settingsService->getObjectService(); if ($objectService === null) { @@ -450,22 +444,25 @@ private function recordReceivedEmail( $schema = $this->settingsService->getConfigValue('email_message_schema'); if (empty($register) === false && empty($schema) === false) { - $objectService->saveObject($register, $schema, [ - 'case' => $caseId, - 'direction' => 'inbound', - 'from' => $from, - 'to' => '', - 'subject' => $subject, - 'body' => $body, - 'messageId' => $messageId, - 'inReplyTo' => $inReplyTo, - 'receivedAt' => date('Y-m-d\TH:i:s'), - ]); + $objectService->saveObject( + $register, + $schema, + [ + 'case' => $caseId, + 'direction' => 'inbound', + 'from' => $from, + 'to' => '', + 'subject' => $subject, + 'body' => $body, + 'messageId' => $messageId, + 'inReplyTo' => $inReplyTo, + 'receivedAt' => date('Y-m-d\TH:i:s'), + ] + ); } return $messageId; - } - + }//end recordReceivedEmail() /** * Find a case by its identifier. @@ -497,5 +494,5 @@ private function findCaseByIdentifier(string $identifier): ?string } return null; - } -} + }//end findCaseByIdentifier() +}//end class diff --git a/lib/Service/CaseSharingService.php b/lib/Service/CaseSharingService.php index 586c5b1e..9fa11266 100644 --- a/lib/Service/CaseSharingService.php +++ b/lib/Service/CaseSharingService.php @@ -8,7 +8,7 @@ * @category Service * @package OCA\Procest\Service * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * @@ -60,8 +60,8 @@ class CaseSharingService * * @param SettingsService $settingsService The settings service * @param IAppManager $appManager The app manager - * @param ContainerInterface $container The DI container - * @param LoggerInterface $logger The logger + * @param ContainerInterface $container The DI container + * @param LoggerInterface $logger The logger * * @return void */ @@ -246,7 +246,7 @@ static function ($share) { /** * Revoke a share by marking it with revocation timestamp. * - * @param string $shareId The UUID of the share to revoke + * @param string $shareId The UUID of the share to revoke * @param string $revokedBy The user ID of the revoker * * @return array The updated share data @@ -267,7 +267,7 @@ public function revokeShare(string $shareId, string $revokedBy): array $shareId, ); - $shareData = $share->jsonSerialize(); + $shareData = $share->jsonSerialize(); $shareData['revokedAt'] = (new \DateTime())->format('c'); $shareData['revokedBy'] = $revokedBy; @@ -441,9 +441,9 @@ private function recordFailedAttempt(array $shareData, string $register, string $shareData['failedAttempts'] = (int) ($shareData['failedAttempts'] ?? 0) + 1; if ($shareData['failedAttempts'] >= self::MAX_FAILED_ATTEMPTS) { - $lockUntil = new \DateTime(); + $lockUntil = new \DateTime(); $lockUntil->modify('+'.self::LOCKOUT_MINUTES.' minutes'); - $shareData['lockedUntil'] = $lockUntil->format('c'); + $shareData['lockedUntil'] = $lockUntil->format('c'); $shareData['failedAttempts'] = 0; $this->logger->warning( diff --git a/lib/Service/CaseTransferService.php b/lib/Service/CaseTransferService.php index 96b62aae..3fc3b1af 100644 --- a/lib/Service/CaseTransferService.php +++ b/lib/Service/CaseTransferService.php @@ -8,7 +8,7 @@ * @category Service * @package OCA\Procest\Service * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * @@ -38,8 +38,8 @@ class CaseTransferService * * @param SettingsService $settingsService The settings service * @param IAppManager $appManager The app manager - * @param ContainerInterface $container The DI container - * @param LoggerInterface $logger The logger + * @param ContainerInterface $container The DI container + * @param LoggerInterface $logger The logger * * @return void */ @@ -155,7 +155,7 @@ public function acceptTransfer(string $transferId): array /** * Reject a pending case transfer request. * - * @param string $transferId The UUID of the transfer request + * @param string $transferId The UUID of the transfer request * @param string $rejectionReason The reason for rejection * * @return array The updated transfer data diff --git a/lib/Service/ChecklistService.php b/lib/Service/ChecklistService.php index 9fd94056..9e68e261 100644 --- a/lib/Service/ChecklistService.php +++ b/lib/Service/ChecklistService.php @@ -9,7 +9,7 @@ * @category Service * @package OCA\Procest\Service * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * @@ -68,7 +68,7 @@ class ChecklistService public function __construct( private readonly LoggerInterface $logger, ) { - } + }//end __construct() /** * Complete a checklist item with a conformity status. @@ -89,16 +89,16 @@ public function completeItem( array $checklist, string $itemId, string $status, - string $toelichting = '', - array $photoRefs = [], + string $toelichting='', + array $photoRefs=[], ): array { if (!in_array($status, self::VALID_STATUSES, true)) { throw new \InvalidArgumentException( - 'Invalid conformity status: ' . $status . '. Valid: ' . implode(', ', self::VALID_STATUSES) + 'Invalid conformity status: '.$status.'. Valid: '.implode(', ', self::VALID_STATUSES) ); } - $items = $checklist['items'] ?? []; + $items = $checklist['items'] ?? []; $itemFound = false; foreach ($items as $index => $item) { @@ -107,13 +107,13 @@ public function completeItem( $requiresPhoto = $item['fotoVerplichtBijNietConform'] ?? false; if ($status === self::STATUS_NIET_CONFORM && $requiresPhoto && empty($photoRefs)) { throw new \InvalidArgumentException( - 'Foto verplicht bij niet-conform voor item: ' . ($item['description'] ?? $itemId) + 'Foto verplicht bij niet-conform voor item: '.($item['description'] ?? $itemId) ); } - $items[$index]['status'] = $status; + $items[$index]['status'] = $status; $items[$index]['toelichting'] = $toelichting; - $items[$index]['photoRefs'] = $photoRefs; + $items[$index]['photoRefs'] = $photoRefs; $items[$index]['completedAt'] = (new \DateTimeImmutable())->format(\DateTimeInterface::ATOM); $itemFound = true; break; @@ -121,7 +121,7 @@ public function completeItem( } if (!$itemFound) { - throw new \InvalidArgumentException('Checklist item not found: ' . $itemId); + throw new \InvalidArgumentException('Checklist item not found: '.$itemId); } $checklist['items'] = $items; @@ -132,7 +132,7 @@ public function completeItem( ); return $checklist; - } + }//end completeItem() /** * Get the completion progress of a checklist. @@ -145,8 +145,8 @@ public function completeItem( */ public function getProgress(array $checklist): array { - $items = $checklist['items'] ?? []; - $total = count($items); + $items = $checklist['items'] ?? []; + $total = count($items); $completed = 0; foreach ($items as $item) { @@ -156,11 +156,11 @@ public function getProgress(array $checklist): array } return [ - 'completed' => $completed, - 'total' => $total, + 'completed' => $completed, + 'total' => $total, 'percentage' => $total > 0 ? round(($completed / $total) * 100, 1) : 0.0, ]; - } + }//end getProgress() /** * Validate that all checklist items are completed. @@ -173,7 +173,7 @@ public function getProgress(array $checklist): array */ public function validateCompletion(array $checklist): array { - $items = $checklist['items'] ?? []; + $items = $checklist['items'] ?? []; $missingItems = []; foreach ($items as $item) { @@ -183,10 +183,10 @@ public function validateCompletion(array $checklist): array } return [ - 'valid' => empty($missingItems), + 'valid' => empty($missingItems), 'missingItems' => $missingItems, ]; - } + }//end validateCompletion() /** * Get a summary of conformity results. @@ -199,11 +199,11 @@ public function validateCompletion(array $checklist): array */ public function getConformitySummary(array $checklist): array { - $items = $checklist['items'] ?? []; + $items = $checklist['items'] ?? []; $summary = [ - 'conform' => 0, - 'nietConform' => 0, - 'nvt' => 0, + 'conform' => 0, + 'nietConform' => 0, + 'nvt' => 0, 'notCompleted' => 0, ]; @@ -218,5 +218,5 @@ public function getConformitySummary(array $checklist): array } return $summary; - } -} + }//end getConformitySummary() +}//end class diff --git a/lib/Service/ConsultationService.php b/lib/Service/ConsultationService.php index 8705f283..74d8aab2 100644 --- a/lib/Service/ConsultationService.php +++ b/lib/Service/ConsultationService.php @@ -10,7 +10,7 @@ * @category Service * @package OCA\Procest\Service * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * @@ -52,7 +52,6 @@ class ConsultationService 'niet_van_toepassing', ]; - /** * Constructor. * @@ -63,8 +62,7 @@ public function __construct( private readonly SettingsService $settingsService, private readonly LoggerInterface $logger, ) { - } - + }//end __construct() /** * Create a consultation linked to a parent case. @@ -105,8 +103,8 @@ public function createConsultation(array $data): array $consultation = $objectService->saveObject($register, $schema, $data); $this->logger->info( - 'Consultation created: ' . $consultation->getUuid() - . ' for case ' . $data['parentZaak'], + 'Consultation created: '.$consultation->getUuid() + .' for case '.$data['parentZaak'], ['app' => Application::APP_ID], ); @@ -114,8 +112,7 @@ public function createConsultation(array $data): array 'id' => $consultation->getUuid(), 'status' => 'open', ]; - } - + }//end createConsultation() /** * Get all consultations for a case. @@ -147,8 +144,7 @@ public function getConsultationsForCase(string $caseId): array ); return is_array($results) ? $results : []; - } - + }//end getConsultationsForCase() /** * Update consultation status. @@ -163,7 +159,7 @@ public function getConsultationsForCase(string $caseId): array public function updateStatus(string $consultationId, string $newStatus): array { if (in_array($newStatus, self::VALID_STATUSES, true) === false) { - throw new \RuntimeException('Invalid status: ' . $newStatus); + throw new \RuntimeException('Invalid status: '.$newStatus); } $objectService = $this->settingsService->getObjectService(); @@ -182,7 +178,7 @@ public function updateStatus(string $consultationId, string $newStatus): array $result = $objectService->saveObject($register, $schema, $updateData, $consultationId); $this->logger->info( - 'Consultation ' . $consultationId . ' status updated to ' . $newStatus, + 'Consultation '.$consultationId.' status updated to '.$newStatus, ['app' => Application::APP_ID], ); @@ -190,8 +186,7 @@ public function updateStatus(string $consultationId, string $newStatus): array 'id' => $consultationId, 'status' => $newStatus, ]; - } - + }//end updateStatus() /** * Submit advice response to a consultation. @@ -207,7 +202,7 @@ public function submitResponse(string $consultationId, array $response): array { $advies = $response['advies'] ?? ''; if (in_array($advies, self::VALID_RESPONSES, true) === false) { - throw new \RuntimeException('Invalid advice type: ' . $advies); + throw new \RuntimeException('Invalid advice type: '.$advies); } $objectService = $this->settingsService->getObjectService(); @@ -219,19 +214,17 @@ public function submitResponse(string $consultationId, array $response): array $schema = $this->settingsService->getConfigValue('consultation_schema'); $updateData = [ - 'advies' => $advies, - 'toelichting' => $response['toelichting'] ?? '', - 'voorwaarden' => isset($response['voorwaarden']) - ? json_encode($response['voorwaarden']) - : null, - 'adviesDatum' => date('Y-m-d'), - 'status' => 'advies_uitgebracht', + 'advies' => $advies, + 'toelichting' => $response['toelichting'] ?? '', + 'voorwaarden' => isset($response['voorwaarden']) ? json_encode($response['voorwaarden']) : null, + 'adviesDatum' => date('Y-m-d'), + 'status' => 'advies_uitgebracht', ]; $result = $objectService->saveObject($register, $schema, $updateData, $consultationId); $this->logger->info( - 'Consultation ' . $consultationId . ' advice submitted: ' . $advies, + 'Consultation '.$consultationId.' advice submitted: '.$advies, ['app' => Application::APP_ID], ); @@ -240,8 +233,7 @@ public function submitResponse(string $consultationId, array $response): array 'advies' => $advies, 'status' => 'advies_uitgebracht', ]; - } - + }//end submitResponse() /** * Get overdue consultations. @@ -294,5 +286,5 @@ public function getOverdueConsultations(): array } return $overdue; - } -} + }//end getOverdueConsultations() +}//end class diff --git a/lib/Service/DsoIntakeService.php b/lib/Service/DsoIntakeService.php index 0d75539b..d516cc2a 100644 --- a/lib/Service/DsoIntakeService.php +++ b/lib/Service/DsoIntakeService.php @@ -9,7 +9,7 @@ * @category Service * @package OCA\Procest\Service * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * @@ -39,11 +39,10 @@ class DsoIntakeService * Deadline durations per procedure type (ISO 8601). */ private const DEADLINE_DURATIONS = [ - 'regulier' => 'P56D', - 'uitgebreid' => 'P182D', + 'regulier' => 'P56D', + 'uitgebreid' => 'P182D', ]; - /** * Constructor. * @@ -54,8 +53,7 @@ public function __construct( private readonly SettingsService $settingsService, private readonly LoggerInterface $logger, ) { - } - + }//end __construct() /** * Process a DSO vergunningaanvraag and create a case. @@ -94,18 +92,17 @@ static function ($act) { }, $activiteiten, ); - $activityStr = implode(', ', array_filter($activityNames)); + $activityStr = implode(', ', array_filter($activityNames)); // Determine processing deadline. - $deadline = self::DEADLINE_DURATIONS[$procedureType] - ?? self::DEADLINE_DURATIONS['regulier']; + $deadline = self::DEADLINE_DURATIONS[$procedureType] ?? self::DEADLINE_DURATIONS['regulier']; // Create the case. $caseSchema = $this->settingsService->getConfigValue('case_schema'); $caseData = [ - 'title' => 'Omgevingsvergunning' . ($activityStr !== '' ? ': ' . $activityStr : ''), + 'title' => 'Omgevingsvergunning'.($activityStr !== '' ? ': '.$activityStr : ''), 'description' => 'Vergunningaanvraag ontvangen via DSO/Omgevingsloket' - . ($dsoZaaknummer !== '' ? ' (DSO: ' . $dsoZaaknummer . ')' : ''), + .($dsoZaaknummer !== '' ? ' (DSO: '.$dsoZaaknummer.')' : ''), 'startDate' => date('Y-m-d'), 'priority' => 'normal', ]; @@ -129,15 +126,19 @@ static function ($act) { continue; } - $objectService->saveObject($register, $propertySchema, [ - 'case' => $caseId, - 'name' => $name, - 'value' => $value, - ]); + $objectService->saveObject( + $register, + $propertySchema, + [ + 'case' => $caseId, + 'name' => $name, + 'value' => $value, + ] + ); } $this->logger->info( - 'DSO intake processed: case ' . $caseId . ' (DSO: ' . $dsoZaaknummer . ')', + 'DSO intake processed: case '.$caseId.' (DSO: '.$dsoZaaknummer.')', ['app' => Application::APP_ID], ); @@ -148,8 +149,7 @@ static function ($act) { 'procedureType' => $procedureType, 'deadline' => $deadline, ]; - } - + }//end processAanvraag() /** * Get the processing deadline duration for a procedure type. @@ -160,7 +160,6 @@ static function ($act) { */ public function getDeadlineDuration(string $procedureType): string { - return self::DEADLINE_DURATIONS[$procedureType] - ?? self::DEADLINE_DURATIONS['regulier']; - } -} + return self::DEADLINE_DURATIONS[$procedureType] ?? self::DEADLINE_DURATIONS['regulier']; + }//end getDeadlineDuration() +}//end class diff --git a/lib/Service/GisProxyService.php b/lib/Service/GisProxyService.php index 74b11c9b..c291cbda 100644 --- a/lib/Service/GisProxyService.php +++ b/lib/Service/GisProxyService.php @@ -9,7 +9,7 @@ * @category Service * @package OCA\Procest\Service * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * diff --git a/lib/Service/InspectionService.php b/lib/Service/InspectionService.php index e2fa0ca5..42bb185d 100644 --- a/lib/Service/InspectionService.php +++ b/lib/Service/InspectionService.php @@ -9,7 +9,7 @@ * @category Service * @package OCA\Procest\Service * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * @@ -69,13 +69,13 @@ public function __construct( private readonly SettingsService $settingsService, private readonly LoggerInterface $logger, ) { - } + }//end __construct() /** * Get inspections assigned to an inspector, optionally filtered by date. * - * @param string $inspectorId The inspector's user ID. - * @param string|null $date Optional date filter (Y-m-d format). + * @param string $inspectorId The inspector's user ID. + * @param string|null $date Optional date filter (Y-m-d format). * @param array> $allInspections All inspection data (from OpenRegister). * * @return array> Filtered and sorted inspections. @@ -87,26 +87,34 @@ public function getInspections( ?string $date, array $allInspections, ): array { - $filtered = array_filter($allInspections, function (array $inspection) use ($inspectorId, $date): bool { - if (($inspection['inspectorId'] ?? '') !== $inspectorId) { - return false; - } - if ($date !== null) { - $inspectionDate = substr($inspection['plannedDateTime'] ?? '', 0, 10); - if ($inspectionDate !== $date) { - return false; + $filtered = array_filter( + $allInspections, + function (array $inspection) use ($inspectorId, $date): bool { + if (($inspection['inspectorId'] ?? '') !== $inspectorId) { + return false; + } + + if ($date !== null) { + $inspectionDate = substr($inspection['plannedDateTime'] ?? '', 0, 10); + if ($inspectionDate !== $date) { + return false; + } + } + + return true; } - } - return true; - }); + ); // Sort by planned time. - usort($filtered, function (array $a, array $b): int { - return ($a['plannedDateTime'] ?? '') <=> ($b['plannedDateTime'] ?? ''); - }); + usort( + $filtered, + function (array $a, array $b): int { + return ($a['plannedDateTime'] ?? '') <=> ($b['plannedDateTime'] ?? ''); + } + ); return array_values($filtered); - } + }//end getInspections() /** * Capture GPS location for an inspection and validate against planned location. @@ -131,18 +139,18 @@ public function captureLocation( float $accuracy, ): array { $inspection['capturedLocation'] = [ - 'latitude' => $latitude, - 'longitude' => $longitude, - 'accuracy' => $accuracy, + 'latitude' => $latitude, + 'longitude' => $longitude, + 'accuracy' => $accuracy, 'capturedAt' => (new \DateTimeImmutable())->format(\DateTimeInterface::ATOM), ]; - $warning = null; + $warning = null; $distance = 0.0; // Check distance from planned location. - $plannedLat = (float)($inspection['plannedLatitude'] ?? 0.0); - $plannedLon = (float)($inspection['plannedLongitude'] ?? 0.0); + $plannedLat = (float) ($inspection['plannedLatitude'] ?? 0.0); + $plannedLon = (float) ($inspection['plannedLongitude'] ?? 0.0); if ($plannedLat !== 0.0 && $plannedLon !== 0.0) { $distance = $this->calculateDistance($latitude, $longitude, $plannedLat, $plannedLon); @@ -155,7 +163,7 @@ public function captureLocation( $this->logger->warning( 'Location mismatch for inspection {id}: {distance}m from planned', [ - 'id' => $inspection['id'] ?? 'unknown', + 'id' => $inspection['id'] ?? 'unknown', 'distance' => round($distance), ] ); @@ -168,16 +176,16 @@ public function captureLocation( return [ 'inspection' => $inspection, - 'warning' => $warning, - 'distance' => round($distance, 1), + 'warning' => $warning, + 'distance' => round($distance, 1), ]; - } + }//end captureLocation() /** * Record photo metadata for an inspection. * - * @param array $inspection The inspection data. - * @param array $photoMetadata Photo info (fileRef, latitude, longitude, checklistItemId). + * @param array $inspection The inspection data. + * @param array $photoMetadata Photo info (fileRef, latitude, longitude, checklistItemId). * * @return array The updated inspection with photo added. * @@ -186,19 +194,19 @@ public function captureLocation( public function addPhoto(array $inspection, array $photoMetadata): array { $photo = [ - 'id' => $photoMetadata['id'] ?? uniqid('photo_', true), - 'fileRef' => $photoMetadata['fileRef'] ?? '', - 'latitude' => $photoMetadata['latitude'] ?? null, - 'longitude' => $photoMetadata['longitude'] ?? null, + 'id' => $photoMetadata['id'] ?? uniqid('photo_', true), + 'fileRef' => $photoMetadata['fileRef'] ?? '', + 'latitude' => $photoMetadata['latitude'] ?? null, + 'longitude' => $photoMetadata['longitude'] ?? null, 'checklistItemId' => $photoMetadata['checklistItemId'] ?? null, - 'capturedAt' => (new \DateTimeImmutable())->format(\DateTimeInterface::ATOM), + 'capturedAt' => (new \DateTimeImmutable())->format(\DateTimeInterface::ATOM), ]; - $inspection['photos'] = $inspection['photos'] ?? []; + $inspection['photos'] = $inspection['photos'] ?? []; $inspection['photos'][] = $photo; return $inspection; - } + }//end addPhoto() /** * Complete an inspection. @@ -212,22 +220,22 @@ public function addPhoto(array $inspection, array $photoMetadata): array * * @psalm-suppress PossiblyUnusedMethod */ - public function completeInspection(array $inspection, string $conclusion = ''): array + public function completeInspection(array $inspection, string $conclusion=''): array { $checklist = $inspection['checklist'] ?? []; - $items = $checklist['items'] ?? []; + $items = $checklist['items'] ?? []; // Check if all items are completed. foreach ($items as $item) { if (empty($item['status'])) { throw new \InvalidArgumentException( - 'Not all checklist items are completed. Item: ' . ($item['description'] ?? 'unknown') + 'Not all checklist items are completed. Item: '.($item['description'] ?? 'unknown') ); } } - $inspection['status'] = self::STATUS_COMPLETED; - $inspection['conclusion'] = $conclusion; + $inspection['status'] = self::STATUS_COMPLETED; + $inspection['conclusion'] = $conclusion; $inspection['completedAt'] = (new \DateTimeImmutable())->format(\DateTimeInterface::ATOM); $this->logger->info( @@ -236,7 +244,7 @@ public function completeInspection(array $inspection, string $conclusion = ''): ); return $inspection; - } + }//end completeInspection() /** * Calculate distance between two GPS coordinates using Haversine formula. @@ -253,12 +261,10 @@ private function calculateDistance(float $lat1, float $lon1, float $lat2, float $dLat = deg2rad($lat2 - $lat1); $dLon = deg2rad($lon2 - $lon1); - $a = sin($dLat / 2) * sin($dLat / 2) - + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) - * sin($dLon / 2) * sin($dLon / 2); + $a = sin($dLat / 2) * sin($dLat / 2) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * sin($dLon / 2) * sin($dLon / 2); $c = 2 * atan2(sqrt($a), sqrt(1 - $a)); return self::EARTH_RADIUS * $c; - } -} + }//end calculateDistance() +}//end class diff --git a/lib/Service/LegesCalculationService.php b/lib/Service/LegesCalculationService.php index 75b48baa..9bf53d79 100644 --- a/lib/Service/LegesCalculationService.php +++ b/lib/Service/LegesCalculationService.php @@ -10,7 +10,7 @@ * @category Service * @package OCA\Procest\Service * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * @@ -73,14 +73,14 @@ class LegesCalculationService public function __construct( private readonly LoggerInterface $logger, ) { - } + }//end __construct() /** * Calculate leges for a case based on applicable verordening. * - * @param array $caseData The case data (bouwkosten, activiteiten, etc.). - * @param array $verordening The applicable verordening with artikelen. - * @param string $calculatedBy User ID of the person triggering the calculation. + * @param array $caseData The case data (bouwkosten, activiteiten, etc.). + * @param array $verordening The applicable verordening with artikelen. + * @param string $calculatedBy User ID of the person triggering the calculation. * * @return array{ * total: float, @@ -105,33 +105,33 @@ public function calculate( $artikelen = $verordening['artikelen'] ?? []; $breakdown = []; - $total = 0.0; + $total = 0.0; foreach ($artikelen as $artikel) { $result = $this->calculateArtikel($artikel, $caseData); if ($result !== null) { $breakdown[] = $result; - $total += $result['amount']; + $total += $result['amount']; } } // Apply global maximum if configured. $globalMax = $verordening['globalMaximum'] ?? null; - if ($globalMax !== null && $total > (float)$globalMax) { - $total = (float)$globalMax; + if ($globalMax !== null && $total > (float) $globalMax) { + $total = (float) $globalMax; } $total = round($total, self::PRECISION); return [ - 'total' => $total, - 'breakdown' => $breakdown, - 'verordening' => $verordening['name'] ?? '', + 'total' => $total, + 'breakdown' => $breakdown, + 'verordening' => $verordening['name'] ?? '', 'calculatedBy' => $calculatedBy, 'calculatedAt' => (new \DateTimeImmutable())->format(\DateTimeInterface::ATOM), - 'version' => 1, + 'version' => 1, ]; - } + }//end calculate() /** * Recalculate leges with corrected case data, preserving history. @@ -153,18 +153,18 @@ public function recalculate( string $calculatedBy, string $correctionReason, ): array { - $newCalc = $this->calculate($caseData, $verordening, $calculatedBy); + $newCalc = $this->calculate($caseData, $verordening, $calculatedBy); $newCalc['version'] = ($previousCalc['version'] ?? 0) + 1; - $newCalc['previousVersion'] = $previousCalc['version'] ?? 0; + $newCalc['previousVersion'] = $previousCalc['version'] ?? 0; $newCalc['correctionReason'] = $correctionReason; - $newCalc['previousTotal'] = $previousCalc['total'] ?? 0.0; - $newCalc['difference'] = round( + $newCalc['previousTotal'] = $previousCalc['total'] ?? 0.0; + $newCalc['difference'] = round( $newCalc['total'] - ($previousCalc['total'] ?? 0.0), self::PRECISION ); return $newCalc; - } + }//end recalculate() /** * Calculate verrekening (deduction of previously imposed fees). @@ -181,12 +181,12 @@ public function calculateVerrekening(float $currentAmount, float $previousAmount $netAmount = round($currentAmount - $previousAmount, self::PRECISION); return [ - 'netAmount' => $netAmount, - 'deduction' => $previousAmount, - 'currentAmount' => $currentAmount, + 'netAmount' => $netAmount, + 'deduction' => $previousAmount, + 'currentAmount' => $currentAmount, 'previousAmount' => $previousAmount, ]; - } + }//end calculateVerrekening() /** * Calculate teruggaaf (refund). @@ -201,18 +201,18 @@ public function calculateVerrekening(float $currentAmount, float $previousAmount */ public function calculateTeruggaaf( float $imposedAmount, - float $refundFraction = 1.0, - string $reason = '', + float $refundFraction=1.0, + string $reason='', ): array { $refundAmount = round(-1 * $imposedAmount * $refundFraction, self::PRECISION); return [ - 'refundAmount' => $refundAmount, + 'refundAmount' => $refundAmount, 'originalAmount' => $imposedAmount, - 'fraction' => $refundFraction, - 'reason' => $reason, + 'fraction' => $refundFraction, + 'reason' => $reason, ]; - } + }//end calculateTeruggaaf() /** * Calculate a single artikel. @@ -224,13 +224,13 @@ public function calculateTeruggaaf( */ private function calculateArtikel(array $artikel, array $caseData): ?array { - $type = $artikel['type'] ?? ''; - $artikelNr = $artikel['nummer'] ?? ''; + $type = $artikel['type'] ?? ''; + $artikelNr = $artikel['nummer'] ?? ''; $description = $artikel['omschrijving'] ?? ''; // Determine the grondslag (base amount) from case data. $grondslagField = $artikel['grondslagField'] ?? 'bouwkosten'; - $grondslag = (float)($caseData[$grondslagField] ?? 0.0); + $grondslag = (float) ($caseData[$grondslagField] ?? 0.0); $amount = match ($type) { self::TYPE_VAST => $this->calculateVast($artikel), @@ -246,13 +246,13 @@ private function calculateArtikel(array $artikel, array $caseData): ?array } return [ - 'artikel' => $artikelNr, + 'artikel' => $artikelNr, 'description' => $description, - 'grondslag' => $grondslag, - 'amount' => round($amount, self::PRECISION), - 'type' => $type, + 'grondslag' => $grondslag, + 'amount' => round($amount, self::PRECISION), + 'type' => $type, ]; - } + }//end calculateArtikel() /** * Calculate a fixed amount (vast bedrag). @@ -263,8 +263,8 @@ private function calculateArtikel(array $artikel, array $caseData): ?array */ private function calculateVast(array $artikel): float { - return (float)($artikel['bedrag'] ?? 0.0); - } + return (float) ($artikel['bedrag'] ?? 0.0); + }//end calculateVast() /** * Calculate a percentage of the grondslag. @@ -276,9 +276,9 @@ private function calculateVast(array $artikel): float */ private function calculatePercentage(float $grondslag, array $artikel): float { - $percentage = (float)($artikel['percentage'] ?? 0.0); + $percentage = (float) ($artikel['percentage'] ?? 0.0); return $grondslag * ($percentage / 100.0); - } + }//end calculatePercentage() /** * Calculate using tiered brackets (staffel). @@ -294,12 +294,12 @@ private function calculatePercentage(float $grondslag, array $artikel): float private function calculateStaffel(float $grondslag, array $artikel): float { $brackets = $artikel['brackets'] ?? []; - $total = 0.0; + $total = 0.0; foreach ($brackets as $bracket) { - $from = (float)($bracket['from'] ?? 0.0); - $to = (float)($bracket['to'] ?? PHP_FLOAT_MAX); - $percentage = (float)($bracket['percentage'] ?? 0.0); + $from = (float) ($bracket['from'] ?? 0.0); + $to = (float) ($bracket['to'] ?? PHP_FLOAT_MAX); + $percentage = (float) ($bracket['percentage'] ?? 0.0); if ($grondslag <= $from) { break; @@ -312,7 +312,7 @@ private function calculateStaffel(float $grondslag, array $artikel): float } return $total; - } + }//end calculateStaffel() /** * Calculate with a maximum cap. @@ -324,7 +324,7 @@ private function calculateStaffel(float $grondslag, array $artikel): float */ private function calculateMaximum(float $grondslag, array $artikel): float { - $maximum = (float)($artikel['maximum'] ?? PHP_FLOAT_MAX); + $maximum = (float) ($artikel['maximum'] ?? PHP_FLOAT_MAX); $subType = $artikel['subType'] ?? self::TYPE_PERCENTAGE; $calculated = match ($subType) { @@ -334,7 +334,7 @@ private function calculateMaximum(float $grondslag, array $artikel): float }; return min($calculated, $maximum); - } + }//end calculateMaximum() /** * Calculate a combination of multiple sub-calculations. @@ -351,7 +351,7 @@ private function calculateCombinatie( array $caseData, ): float { $subArtikelen = $artikel['subArtikelen'] ?? []; - $total = 0.0; + $total = 0.0; foreach ($subArtikelen as $subArtikel) { $result = $this->calculateArtikel($subArtikel, $caseData); @@ -361,5 +361,5 @@ private function calculateCombinatie( } return $total; - } -} + }//end calculateCombinatie() +}//end class diff --git a/lib/Service/LegesExportService.php b/lib/Service/LegesExportService.php index b60ae508..17890f13 100644 --- a/lib/Service/LegesExportService.php +++ b/lib/Service/LegesExportService.php @@ -9,7 +9,7 @@ * @category Service * @package OCA\Procest\Service * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * @@ -85,7 +85,7 @@ class LegesExportService public function __construct( private readonly LoggerInterface $logger, ) { - } + }//end __construct() /** * Export berekeningen to the specified format. @@ -99,11 +99,11 @@ public function __construct( * * @psalm-suppress PossiblyUnusedMethod */ - public function export(array $berekeningen, string $format = self::FORMAT_CSV): array + public function export(array $berekeningen, string $format=self::FORMAT_CSV): array { if (!in_array($format, self::SUPPORTED_FORMATS, true)) { throw new \InvalidArgumentException( - 'Unsupported export format: ' . $format . '. Supported: ' . implode(', ', self::SUPPORTED_FORMATS) + 'Unsupported export format: '.$format.'. Supported: '.implode(', ', self::SUPPORTED_FORMATS) ); } @@ -117,7 +117,7 @@ public function export(array $berekeningen, string $format = self::FORMAT_CSV): self::FORMAT_ASCII => $this->exportASCII($berekeningen), self::FORMAT_XML => $this->exportXML($berekeningen), }; - } + }//end export() /** * Export berekeningen as CSV. @@ -153,11 +153,11 @@ private function exportCSV(array $berekeningen): array $date = (new \DateTimeImmutable())->format('Y-m-d'); return [ - 'content' => $content !== false ? $content : '', - 'filename' => "leges-export-{$date}.csv", + 'content' => $content !== false ? $content : '', + 'filename' => "leges-export-{$date}.csv", 'contentType' => 'text/csv; charset=utf-8', ]; - } + }//end exportCSV() /** * Export berekeningen as ASCII flat file. @@ -180,22 +180,22 @@ private function exportASCII(array $berekeningen): array foreach ($berekeningen as $berekening) { $rows = $this->flattenBerekening($berekening); foreach ($rows as $row) { - $lines[] = 'D|' . implode('|', $row); + $lines[] = 'D|'.implode('|', $row); } } // Footer line. - $total = array_sum(array_column($berekeningen, 'total')); + $total = array_sum(array_column($berekeningen, 'total')); $lines[] = sprintf('F|%d|%.2f', count($berekeningen), $total); $date = (new \DateTimeImmutable())->format('Y-m-d'); return [ - 'content' => implode("\r\n", $lines), - 'filename' => "leges-export-{$date}.txt", + 'content' => implode("\r\n", $lines), + 'filename' => "leges-export-{$date}.txt", 'contentType' => 'text/plain; charset=utf-8', ]; - } + }//end exportASCII() /** * Export berekeningen as XML (StUF-FIN compatible structure). @@ -211,23 +211,23 @@ private function exportXML(array $berekeningen): array $root = $dom->createElement('legesExport'); $root->setAttribute('exportDatum', (new \DateTimeImmutable())->format(\DateTimeInterface::ATOM)); - $root->setAttribute('aantalRecords', (string)count($berekeningen)); + $root->setAttribute('aantalRecords', (string) count($berekeningen)); $dom->appendChild($root); foreach ($berekeningen as $berekening) { $berekeningEl = $dom->createElement('berekening'); - $berekeningEl->setAttribute('zaaknummer', (string)($berekening['zaaknummer'] ?? '')); + $berekeningEl->setAttribute('zaaknummer', (string) ($berekening['zaaknummer'] ?? '')); - $this->addXmlElement($dom, $berekeningEl, 'bsnKvk', (string)($berekening['bsnKvk'] ?? '')); - $this->addXmlElement($dom, $berekeningEl, 'naam', (string)($berekening['naam'] ?? '')); + $this->addXmlElement($dom, $berekeningEl, 'bsnKvk', (string) ($berekening['bsnKvk'] ?? '')); + $this->addXmlElement($dom, $berekeningEl, 'naam', (string) ($berekening['naam'] ?? '')); $this->addXmlElement($dom, $berekeningEl, 'totaalBedrag', number_format($berekening['total'] ?? 0.0, 2, '.', '')); - $this->addXmlElement($dom, $berekeningEl, 'datumBeschikking', (string)($berekening['datumBeschikking'] ?? '')); + $this->addXmlElement($dom, $berekeningEl, 'datumBeschikking', (string) ($berekening['datumBeschikking'] ?? '')); $breakdown = $berekening['breakdown'] ?? []; foreach ($breakdown as $regel) { $regelEl = $dom->createElement('regel'); - $this->addXmlElement($dom, $regelEl, 'artikelnummer', (string)($regel['artikel'] ?? '')); - $this->addXmlElement($dom, $regelEl, 'omschrijving', (string)($regel['description'] ?? '')); + $this->addXmlElement($dom, $regelEl, 'artikelnummer', (string) ($regel['artikel'] ?? '')); + $this->addXmlElement($dom, $regelEl, 'omschrijving', (string) ($regel['description'] ?? '')); $this->addXmlElement($dom, $regelEl, 'bedrag', number_format($regel['amount'] ?? 0.0, 2, '.', '')); $berekeningEl->appendChild($regelEl); } @@ -236,14 +236,14 @@ private function exportXML(array $berekeningen): array } $content = $dom->saveXML(); - $date = (new \DateTimeImmutable())->format('Y-m-d'); + $date = (new \DateTimeImmutable())->format('Y-m-d'); return [ - 'content' => $content !== false ? $content : '', - 'filename' => "leges-export-{$date}.xml", + 'content' => $content !== false ? $content : '', + 'filename' => "leges-export-{$date}.xml", 'contentType' => 'application/xml; charset=utf-8', ]; - } + }//end exportXML() /** * Flatten a berekening into export rows (one row per artikel in breakdown). @@ -254,45 +254,45 @@ private function exportXML(array $berekeningen): array */ private function flattenBerekening(array $berekening): array { - $rows = []; + $rows = []; $breakdown = $berekening['breakdown'] ?? []; if (empty($breakdown)) { $rows[] = [ - (string)($berekening['zaaknummer'] ?? ''), - (string)($berekening['bsnKvk'] ?? ''), - (string)($berekening['naam'] ?? ''), - (string)($berekening['adres'] ?? ''), + (string) ($berekening['zaaknummer'] ?? ''), + (string) ($berekening['bsnKvk'] ?? ''), + (string) ($berekening['naam'] ?? ''), + (string) ($berekening['adres'] ?? ''), '', 'Totaal', number_format($berekening['total'] ?? 0.0, 2, '.', ''), - (string)($berekening['datumBeschikking'] ?? ''), + (string) ($berekening['datumBeschikking'] ?? ''), ]; } else { foreach ($breakdown as $regel) { $rows[] = [ - (string)($berekening['zaaknummer'] ?? ''), - (string)($berekening['bsnKvk'] ?? ''), - (string)($berekening['naam'] ?? ''), - (string)($berekening['adres'] ?? ''), - (string)($regel['artikel'] ?? ''), - (string)($regel['description'] ?? ''), + (string) ($berekening['zaaknummer'] ?? ''), + (string) ($berekening['bsnKvk'] ?? ''), + (string) ($berekening['naam'] ?? ''), + (string) ($berekening['adres'] ?? ''), + (string) ($regel['artikel'] ?? ''), + (string) ($regel['description'] ?? ''), number_format($regel['amount'] ?? 0.0, 2, '.', ''), - (string)($berekening['datumBeschikking'] ?? ''), + (string) ($berekening['datumBeschikking'] ?? ''), ]; } - } + }//end if return $rows; - } + }//end flattenBerekening() /** * Add a text element to an XML parent. * - * @param \DOMDocument $dom The DOM document. - * @param \DOMElement $parent The parent element. - * @param string $name The element name. - * @param string $value The text value. + * @param \DOMDocument $dom The DOM document. + * @param \DOMElement $parent The parent element. + * @param string $name The element name. + * @param string $value The text value. * * @return void */ @@ -301,5 +301,5 @@ private function addXmlElement(\DOMDocument $dom, \DOMElement $parent, string $n $element = $dom->createElement($name); $element->appendChild($dom->createTextNode($value)); $parent->appendChild($element); - } -} + }//end addXmlElement() +}//end class diff --git a/lib/Service/MilestoneService.php b/lib/Service/MilestoneService.php index ad640fbb..abde2720 100644 --- a/lib/Service/MilestoneService.php +++ b/lib/Service/MilestoneService.php @@ -9,7 +9,7 @@ * @category Service * @package OCA\Procest\Service * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * @@ -30,8 +30,6 @@ */ class MilestoneService { - - /** * Constructor. * @@ -42,8 +40,7 @@ public function __construct( private readonly SettingsService $settingsService, private readonly LoggerInterface $logger, ) { - } - + }//end __construct() /** * Get milestone definitions for a case type. @@ -77,8 +74,7 @@ public function getMilestones(string $caseTypeId): array ); return is_array($results) ? $results : []; - } - + }//end getMilestones() /** * Get milestone progress for a specific case. @@ -93,14 +89,14 @@ public function getCaseProgress(string $caseId, string $caseTypeId): array $definitions = $this->getMilestones($caseTypeId); if (count($definitions) === 0) { return [ - 'milestones' => [], - 'reached' => 0, - 'total' => 0, - 'percentage' => 0, + 'milestones' => [], + 'reached' => 0, + 'total' => 0, + 'percentage' => 0, ]; } - $records = $this->getMilestoneRecords($caseId); + $records = $this->getMilestoneRecords($caseId); $recordMap = []; foreach ($records as $record) { $recordMap[$record['milestoneDefinition'] ?? ''] = $record; @@ -109,8 +105,8 @@ public function getCaseProgress(string $caseId, string $caseTypeId): array $milestones = []; $reached = 0; foreach ($definitions as $def) { - $defId = $def['id'] ?? $def['uuid'] ?? ''; - $record = $recordMap[$defId] ?? null; + $defId = $def['id'] ?? $def['uuid'] ?? ''; + $record = $recordMap[$defId] ?? null; $isReached = $record !== null; if ($isReached === true) { @@ -136,8 +132,7 @@ public function getCaseProgress(string $caseId, string $caseTypeId): array 'total' => $total, 'percentage' => $total > 0 ? (int) round(($reached / $total) * 100) : 0, ]; - } - + }//end getCaseProgress() /** * Mark a milestone as reached for a case. @@ -155,7 +150,7 @@ public function markMilestone( string $caseId, string $milestoneDefinitionId, string $userId, - string $trigger = 'manual', + string $trigger='manual', ): array { $objectService = $this->settingsService->getObjectService(); if ($objectService === null) { @@ -180,7 +175,7 @@ public function markMilestone( $record = $objectService->saveObject($register, $schema, $recordData); $this->logger->info( - 'Milestone marked: ' . $milestoneDefinitionId . ' on case ' . $caseId, + 'Milestone marked: '.$milestoneDefinitionId.' on case '.$caseId, ['app' => Application::APP_ID], ); @@ -189,8 +184,7 @@ public function markMilestone( 'reachedAt' => $recordData['reachedAt'], 'reachedBy' => $userId, ]; - } - + }//end markMilestone() /** * Reverse a milestone (with reason for audit trail). @@ -240,14 +234,13 @@ public function reverseMilestone( } $this->logger->info( - 'Milestone reversed: ' . $milestoneDefinitionId . ' on case ' . $caseId - . ' by ' . $userId . ' reason: ' . $reason, + 'Milestone reversed: '.$milestoneDefinitionId.' on case '.$caseId + .' by '.$userId.' reason: '.$reason, ['app' => Application::APP_ID], ); return true; - } - + }//end reverseMilestone() /** * Calculate average duration between milestones for a case type. @@ -261,7 +254,7 @@ public function getDurationAnalytics(string $caseTypeId): array // Placeholder: in production, this would aggregate milestone records // across all cases of this type and calculate averages. $this->logger->debug( - 'Duration analytics requested for case type: ' . $caseTypeId, + 'Duration analytics requested for case type: '.$caseTypeId, ['app' => Application::APP_ID], ); @@ -270,8 +263,7 @@ public function getDurationAnalytics(string $caseTypeId): array 'phases' => [], 'message' => 'Duration analytics requires sufficient historical data', ]; - } - + }//end getDurationAnalytics() /** * Get milestone records for a case. @@ -303,5 +295,5 @@ private function getMilestoneRecords(string $caseId): array ); return is_array($results) ? $results : []; - } -} + }//end getMilestoneRecords() +}//end class diff --git a/lib/Service/NotificatieService.php b/lib/Service/NotificatieService.php index f3d0c599..8a09fdc6 100644 --- a/lib/Service/NotificatieService.php +++ b/lib/Service/NotificatieService.php @@ -9,7 +9,7 @@ * @category Service * @package OCA\Procest\Service * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * diff --git a/lib/Service/ParaferingNotificationService.php b/lib/Service/ParaferingNotificationService.php index 28c50484..f501e956 100644 --- a/lib/Service/ParaferingNotificationService.php +++ b/lib/Service/ParaferingNotificationService.php @@ -8,7 +8,7 @@ * @category Service * @package OCA\Procest\Service * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * diff --git a/lib/Service/ParaferingService.php b/lib/Service/ParaferingService.php index b4642400..8a4d2dd8 100644 --- a/lib/Service/ParaferingService.php +++ b/lib/Service/ParaferingService.php @@ -10,7 +10,7 @@ * @category Service * @package OCA\Procest\Service * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * @@ -105,7 +105,7 @@ class ParaferingService public function __construct( private readonly LoggerInterface $logger, ) { - } + }//end __construct() /** * Create a new voorstel linked to a case. @@ -119,18 +119,18 @@ public function __construct( public function createVoorstel(array $voorstelData): array { $voorstel = [ - 'id' => $voorstelData['id'] ?? $this->generateId(), - 'caseId' => $voorstelData['caseId'] ?? '', - 'type' => $voorstelData['type'] ?? 'collegeadvies', - 'onderwerp' => $voorstelData['onderwerp'] ?? '', - 'steller' => $voorstelData['steller'] ?? '', - 'afdeling' => $voorstelData['afdeling'] ?? '', + 'id' => $voorstelData['id'] ?? $this->generateId(), + 'caseId' => $voorstelData['caseId'] ?? '', + 'type' => $voorstelData['type'] ?? 'collegeadvies', + 'onderwerp' => $voorstelData['onderwerp'] ?? '', + 'steller' => $voorstelData['steller'] ?? '', + 'afdeling' => $voorstelData['afdeling'] ?? '', 'portefeuillehouder' => $voorstelData['portefeuillehouder'] ?? '', - 'status' => self::STATUS_CONCEPT, - 'currentStep' => 0, - 'parafeerRoute' => [], - 'auditTrail' => [], - 'createdAt' => (new \DateTimeImmutable())->format(\DateTimeInterface::ATOM), + 'status' => self::STATUS_CONCEPT, + 'currentStep' => 0, + 'parafeerRoute' => [], + 'auditTrail' => [], + 'createdAt' => (new \DateTimeImmutable())->format(\DateTimeInterface::ATOM), ]; $this->logger->info( @@ -139,13 +139,13 @@ public function createVoorstel(array $voorstelData): array ); return $voorstel; - } + }//end createVoorstel() /** * Start the parafering process on a voorstel. * - * @param array $voorstel The voorstel. - * @param array> $route The parafeerroute (ordered steps). + * @param array $voorstel The voorstel. + * @param array> $route The parafeerroute (ordered steps). * * @return array The updated voorstel with parafering started. * @@ -167,17 +167,17 @@ public function startParafering(array $voorstel, array $route): array throw new \InvalidArgumentException('Parafeerroute cannot be empty'); } - $voorstel['status'] = self::STATUS_IN_PARAFERING; - $voorstel['currentStep'] = 0; + $voorstel['status'] = self::STATUS_IN_PARAFERING; + $voorstel['currentStep'] = 0; $voorstel['parafeerRoute'] = $route; // Record in audit trail. $voorstel['auditTrail'][] = [ - 'action' => 'started', - 'actor' => $voorstel['steller'], + 'action' => 'started', + 'actor' => $voorstel['steller'], 'timestamp' => (new \DateTimeImmutable())->format(\DateTimeInterface::ATOM), - 'comment' => 'Parafering gestart', - 'step' => 0, + 'comment' => 'Parafering gestart', + 'step' => 0, ]; $this->logger->info( @@ -186,7 +186,7 @@ public function startParafering(array $voorstel, array $route): array ); return $voorstel; - } + }//end startParafering() /** * Execute a parafering action on a voorstel. @@ -207,8 +207,8 @@ public function executeAction( array $voorstel, string $action, string $actor, - string $comment = '', - ?string $namens = null, + string $comment='', + ?string $namens=null, ): array { if ($voorstel['status'] !== self::STATUS_IN_PARAFERING) { throw new \InvalidArgumentException('Voorstel is not in parafering status'); @@ -217,7 +217,7 @@ public function executeAction( $validActions = [self::ACTION_PARAFEREN, self::ACTION_TERUGSTUREN, self::ACTION_ADVISEREN]; if (!in_array($action, $validActions, true)) { throw new \InvalidArgumentException( - 'Invalid action: ' . $action . '. Valid: ' . implode(', ', $validActions) + 'Invalid action: '.$action.'. Valid: '.implode(', ', $validActions) ); } @@ -225,16 +225,16 @@ public function executeAction( // Record the action in audit trail. $auditEntry = [ - 'action' => $action, - 'actor' => $actor, + 'action' => $action, + 'actor' => $actor, 'timestamp' => (new \DateTimeImmutable())->format(\DateTimeInterface::ATOM), - 'comment' => $comment, - 'step' => $currentStep, + 'comment' => $comment, + 'step' => $currentStep, ]; if ($namens !== null) { - $auditEntry['namens'] = $namens; - $auditEntry['comment'] = "Geparafeerd door {$actor} namens {$namens} (mandaat). " . $comment; + $auditEntry['namens'] = $namens; + $auditEntry['comment'] = "Geparafeerd door {$actor} namens {$namens} (mandaat). ".$comment; } $voorstel['auditTrail'][] = $auditEntry; @@ -246,13 +246,13 @@ public function executeAction( 'Voorstel {id} returned by {actor}: {comment}', ['id' => $voorstel['id'], 'actor' => $actor, 'comment' => $comment] ); - } elseif ($action === self::ACTION_ADVISEREN) { + } else if ($action === self::ACTION_ADVISEREN) { // Advisory is non-blocking: advance to next step. $voorstel = $this->advanceStep($voorstel); - } elseif ($action === self::ACTION_PARAFEREN) { + } else if ($action === self::ACTION_PARAFEREN) { // Check if this completes a parallel step. - $route = $voorstel['parafeerRoute'] ?? []; - $step = $route[$currentStep] ?? []; + $route = $voorstel['parafeerRoute'] ?? []; + $step = $route[$currentStep] ?? []; $isParallel = $step['parallel'] ?? false; if ($isParallel) { @@ -260,10 +260,10 @@ public function executeAction( } else { $voorstel = $this->advanceStep($voorstel); } - } + }//end if return $voorstel; - } + }//end executeAction() /** * Get the full audit trail for a voorstel. @@ -277,7 +277,7 @@ public function executeAction( public function getAuditTrail(array $voorstel): array { return $voorstel['auditTrail'] ?? []; - } + }//end getAuditTrail() /** * Get the current step information for a voorstel. @@ -294,11 +294,11 @@ public function getCurrentStep(array $voorstel): ?array return null; } - $route = $voorstel['parafeerRoute'] ?? []; + $route = $voorstel['parafeerRoute'] ?? []; $currentStep = $voorstel['currentStep'] ?? 0; return $route[$currentStep] ?? null; - } + }//end getCurrentStep() /** * Override (modify) the parafeerroute for a specific voorstel. @@ -321,11 +321,11 @@ public function overrideRoute( $voorstel['parafeerRoute'] = $newRoute; $voorstel['auditTrail'][] = [ - 'action' => 'route_overridden', - 'actor' => $actor, + 'action' => 'route_overridden', + 'actor' => $actor, 'timestamp' => (new \DateTimeImmutable())->format(\DateTimeInterface::ATOM), - 'comment' => "Parafeerroute aangepast door {$actor}, reden: {$reason}", - 'step' => $voorstel['currentStep'] ?? 0, + 'comment' => "Parafeerroute aangepast door {$actor}, reden: {$reason}", + 'step' => $voorstel['currentStep'] ?? 0, ]; $this->logger->info( @@ -334,7 +334,7 @@ public function overrideRoute( ); return $voorstel; - } + }//end overrideRoute() /** * Advance to the next step in the parafeerroute. @@ -345,18 +345,18 @@ public function overrideRoute( */ private function advanceStep(array $voorstel): array { - $route = $voorstel['parafeerRoute'] ?? []; + $route = $voorstel['parafeerRoute'] ?? []; $nextStep = ($voorstel['currentStep'] ?? 0) + 1; if ($nextStep >= count($route)) { // All steps completed. - $voorstel['status'] = self::STATUS_GEPARAFEERD; + $voorstel['status'] = self::STATUS_GEPARAFEERD; $voorstel['auditTrail'][] = [ - 'action' => 'completed', - 'actor' => 'system', + 'action' => 'completed', + 'actor' => 'system', 'timestamp' => (new \DateTimeImmutable())->format(\DateTimeInterface::ATOM), - 'comment' => 'Alle paraferingstappen voltooid', - 'step' => $nextStep, + 'comment' => 'Alle paraferingstappen voltooid', + 'step' => $nextStep, ]; $this->logger->info('Voorstel {id} parafering completed', ['id' => $voorstel['id']]); } else { @@ -364,25 +364,25 @@ private function advanceStep(array $voorstel): array } return $voorstel; - } + }//end advanceStep() /** * Handle a parallel parafering step (completes when ALL actors have parafered). * - * @param array $voorstel The voorstel. - * @param string $actor The actor who just parafered. - * @param int $stepIndex The step index. + * @param array $voorstel The voorstel. + * @param string $actor The actor who just parafered. + * @param int $stepIndex The step index. * * @return array The updated voorstel. */ private function handleParallelStep(array $voorstel, string $actor, int $stepIndex): array { - $route = $voorstel['parafeerRoute'] ?? []; - $step = $route[$stepIndex] ?? []; + $route = $voorstel['parafeerRoute'] ?? []; + $step = $route[$stepIndex] ?? []; $requiredActors = $step['actors'] ?? []; // Check which actors have already parafered for this step. - $auditTrail = $voorstel['auditTrail'] ?? []; + $auditTrail = $voorstel['auditTrail'] ?? []; $paraferedActors = []; foreach ($auditTrail as $entry) { if (($entry['step'] ?? -1) === $stepIndex @@ -407,7 +407,7 @@ private function handleParallelStep(array $voorstel, string $actor, int $stepInd } return $voorstel; - } + }//end handleParallelStep() /** * Generate a unique ID. @@ -427,5 +427,5 @@ private function generateId(): string mt_rand(0, 0xffff), mt_rand(0, 0xffff) ); - } -} + }//end generateId() +}//end class diff --git a/lib/Service/SeedDataService.php b/lib/Service/SeedDataService.php index ebb43879..a603d594 100644 --- a/lib/Service/SeedDataService.php +++ b/lib/Service/SeedDataService.php @@ -9,7 +9,7 @@ * @category Service * @package OCA\Procest\Service * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * diff --git a/lib/Service/SettingsService.php b/lib/Service/SettingsService.php index 629219b6..a5d7a699 100644 --- a/lib/Service/SettingsService.php +++ b/lib/Service/SettingsService.php @@ -8,7 +8,7 @@ * @category Service * @package OCA\Procest\Service * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * diff --git a/lib/Service/StufFieldMappingService.php b/lib/Service/StufFieldMappingService.php index de096911..a4650e28 100644 --- a/lib/Service/StufFieldMappingService.php +++ b/lib/Service/StufFieldMappingService.php @@ -10,7 +10,7 @@ * @category Service * @package OCA\Procest\Service * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * @@ -52,15 +52,15 @@ class StufFieldMappingService * @var array */ private const DEFAULT_ZKN_MAPPINGS = [ - 'identificatie' => ['property' => 'identifier', 'transform' => null], - 'omschrijving' => ['property' => 'title', 'transform' => null], - 'toelichting' => ['property' => 'description', 'transform' => null], - 'startdatum' => ['property' => 'startDate', 'transform' => 'stufDateToIso'], - 'einddatum' => ['property' => 'endDate', 'transform' => 'stufDateToIso'], - 'einddatumGepland' => ['property' => 'plannedEndDate', 'transform' => 'stufDateToIso'], + 'identificatie' => ['property' => 'identifier', 'transform' => null], + 'omschrijving' => ['property' => 'title', 'transform' => null], + 'toelichting' => ['property' => 'description', 'transform' => null], + 'startdatum' => ['property' => 'startDate', 'transform' => 'stufDateToIso'], + 'einddatum' => ['property' => 'endDate', 'transform' => 'stufDateToIso'], + 'einddatumGepland' => ['property' => 'plannedEndDate', 'transform' => 'stufDateToIso'], 'uiterlijkeEinddatumAfdoening' => ['property' => 'deadline', 'transform' => 'stufDateToIso'], - 'registratiedatum' => ['property' => 'registrationDate', 'transform' => 'stufDateToIso'], - 'vertrouwelijkAanduiding' => ['property' => 'confidentiality', 'transform' => 'confidentialityToInternal'], + 'registratiedatum' => ['property' => 'registrationDate', 'transform' => 'stufDateToIso'], + 'vertrouwelijkAanduiding' => ['property' => 'confidentiality', 'transform' => 'confidentialityToInternal'], ]; /** @@ -69,11 +69,11 @@ class StufFieldMappingService * @var array */ private const DEFAULT_BG_MAPPINGS = [ - 'inp.bsn' => ['property' => 'bsn', 'transform' => null], - 'geslachtsnaam' => ['property' => 'lastName', 'transform' => null], + 'inp.bsn' => ['property' => 'bsn', 'transform' => null], + 'geslachtsnaam' => ['property' => 'lastName', 'transform' => null], 'voorvoegselGeslachtsnaam' => ['property' => 'namePrefix', 'transform' => null], - 'voornamen' => ['property' => 'firstName', 'transform' => null], - 'geboortedatum' => ['property' => 'dateOfBirth', 'transform' => 'stufDateToIso'], + 'voornamen' => ['property' => 'firstName', 'transform' => null], + 'geboortedatum' => ['property' => 'dateOfBirth', 'transform' => 'stufDateToIso'], ]; /** @@ -82,14 +82,14 @@ class StufFieldMappingService * @var array */ private const CONFIDENTIALITY_MAP = [ - 'OPENBAAR' => 'public', - 'BEPERKT OPENBAAR' => 'restricted', - 'INTERN' => 'internal', + 'OPENBAAR' => 'public', + 'BEPERKT OPENBAAR' => 'restricted', + 'INTERN' => 'internal', 'ZAAKVERTROUWELIJK' => 'case_sensitive', - 'VERTROUWELIJK' => 'confidential', - 'CONFIDENTIEEL' => 'highly_confidential', - 'GEHEIM' => 'secret', - 'ZEER GEHEIM' => 'top_secret', + 'VERTROUWELIJK' => 'confidential', + 'CONFIDENTIEEL' => 'highly_confidential', + 'GEHEIM' => 'secret', + 'ZEER GEHEIM' => 'top_secret', ]; /** @@ -107,7 +107,7 @@ class StufFieldMappingService public function __construct( private readonly LoggerInterface $logger, ) { - } + }//end __construct() /** * Map StUF-ZKN fields to OpenRegister case properties. @@ -126,7 +126,7 @@ public function mapZknToInternal(array $stufData): array ); return $this->applyMappings($stufData, $mappings, 'toInternal'); - } + }//end mapZknToInternal() /** * Map OpenRegister case properties to StUF-ZKN fields. @@ -145,7 +145,7 @@ public function mapInternalToZkn(array $internalData): array ); return $this->applyReverseMappings($internalData, $mappings); - } + }//end mapInternalToZkn() /** * Map StUF-BG fields to OpenRegister person properties. @@ -164,7 +164,7 @@ public function mapBgToInternal(array $stufData): array ); return $this->applyMappings($stufData, $mappings, 'toInternal'); - } + }//end mapBgToInternal() /** * Map OpenRegister person properties to StUF-BG fields. @@ -183,7 +183,7 @@ public function mapInternalToBg(array $internalData): array ); return $this->applyReverseMappings($internalData, $mappings); - } + }//end mapInternalToBg() /** * Convert a StUF date (YYYYMMDD) to ISO 8601 (YYYY-MM-DD). @@ -212,7 +212,7 @@ public function stufDateToIso(string $stufDate): ?string $this->logger->warning('Invalid StUF date format: {date}', ['date' => $stufDate]); return null; - } + }//end stufDateToIso() /** * Convert an ISO 8601 date to StUF date format (YYYYMMDD). @@ -227,7 +227,7 @@ public function isoToStufDate(string $isoDate): string { $dt = new \DateTimeImmutable($isoDate); return $dt->format(self::STUF_DATE_FORMAT); - } + }//end isoToStufDate() /** * Convert an ISO 8601 datetime to StUF datetime format (YYYYMMDDHHmmss). @@ -242,7 +242,7 @@ public function isoToStufDateTime(string $isoDateTime): string { $dt = new \DateTimeImmutable($isoDateTime); return $dt->format(self::STUF_DATETIME_FORMAT); - } + }//end isoToStufDateTime() /** * Convert a StUF confidentiality value to internal value. @@ -256,7 +256,7 @@ public function isoToStufDateTime(string $isoDateTime): string public function confidentialityToInternal(string $stufValue): string { return self::CONFIDENTIALITY_MAP[strtoupper($stufValue)] ?? $stufValue; - } + }//end confidentialityToInternal() /** * Convert an internal confidentiality value to StUF value. @@ -271,12 +271,12 @@ public function confidentialityToStuf(string $internalValue): string { $flipped = array_flip(self::CONFIDENTIALITY_MAP); return $flipped[$internalValue] ?? strtoupper($internalValue); - } + }//end confidentialityToStuf() /** * Add custom field mappings. * - * @param string $type The mapping type ('zkn' or 'bg'). + * @param string $type The mapping type ('zkn' or 'bg'). * @param array $mappings The custom mappings. * * @return void @@ -289,7 +289,7 @@ public function addCustomMappings(string $type, array $mappings): void $this->customMappings[$type] ?? [], $mappings ); - } + }//end addCustomMappings() /** * Get all default mappings for a type. @@ -307,14 +307,14 @@ public function getDefaultMappings(string $type): array 'bg' => self::DEFAULT_BG_MAPPINGS, default => [], }; - } + }//end getDefaultMappings() /** * Apply mappings to convert StUF data to internal format. * - * @param array $data The source data. + * @param array $data The source data. * @param array $mappings The field mappings. - * @param string $direction The direction ('toInternal'). + * @param string $direction The direction ('toInternal'). * * @return array The mapped data. */ @@ -327,8 +327,8 @@ private function applyMappings(array $data, array $mappings, string $direction): continue; } - $mapping = $mappings[$stufField]; - $property = $mapping['property']; + $mapping = $mappings[$stufField]; + $property = $mapping['property']; $transform = $mapping['transform']; if ($transform !== null && method_exists($this, $transform)) { @@ -339,12 +339,12 @@ private function applyMappings(array $data, array $mappings, string $direction): } return $result; - } + }//end applyMappings() /** * Apply reverse mappings to convert internal data to StUF format. * - * @param array $data The internal data. + * @param array $data The internal data. * @param array $mappings The field mappings. * * @return array The StUF data. @@ -367,21 +367,21 @@ private function applyReverseMappings(array $data, array $mappings): array continue; } - $info = $reverseLookup[$property]; + $info = $reverseLookup[$property]; $stufField = $info['stufField']; // Apply reverse transform. if ($value !== null && $info['transform'] !== null) { $value = match ($info['transform']) { - 'stufDateToIso' => $this->isoToStufDate((string)$value), - 'confidentialityToInternal' => $this->confidentialityToStuf((string)$value), - default => (string)$value, + 'stufDateToIso' => $this->isoToStufDate((string) $value), + 'confidentialityToInternal' => $this->confidentialityToStuf((string) $value), + default => (string) $value, }; } - $result[$stufField] = (string)($value ?? ''); + $result[$stufField] = (string) ($value ?? ''); } return $result; - } -} + }//end applyReverseMappings() +}//end class diff --git a/lib/Service/StufMessageBuilder.php b/lib/Service/StufMessageBuilder.php index f79f79eb..7bd388fe 100644 --- a/lib/Service/StufMessageBuilder.php +++ b/lib/Service/StufMessageBuilder.php @@ -9,7 +9,7 @@ * @category Service * @package OCA\Procest\Service * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * @@ -65,9 +65,9 @@ class StufMessageBuilder * @var array */ public const NO_VALUE_TYPES = [ - 'geenWaarde' => 'geenWaarde', - 'waardeOnbekend' => 'waardeOnbekend', - 'nietOndersteund' => 'nietOndersteund', + 'geenWaarde' => 'geenWaarde', + 'waardeOnbekend' => 'waardeOnbekend', + 'nietOndersteund' => 'nietOndersteund', 'vastgesteldOnbekend' => 'vastgesteldOnbekend', ]; @@ -79,7 +79,7 @@ class StufMessageBuilder public function __construct( private readonly LoggerInterface $logger, ) { - } + }//end __construct() /** * Build a complete SOAP envelope wrapping a StUF message body. @@ -116,13 +116,13 @@ public function buildSoapEnvelope(string $bodyXml): string } return $dom->saveXML() ?: ''; - } + }//end buildSoapEnvelope() /** * Build stuurgegevens XML element. * - * @param array $zender Sender info (organisatie, applicatie). - * @param array $ontvanger Receiver info (organisatie, applicatie). + * @param array $zender Sender info (organisatie, applicatie). + * @param array $ontvanger Receiver info (organisatie, applicatie). * @param string|null $referentienummer Reference number (auto-generated if null). * * @return string The stuurgegevens XML fragment. @@ -132,27 +132,27 @@ public function buildSoapEnvelope(string $bodyXml): string public function buildStuurgegevens( array $zender, array $ontvanger, - ?string $referentienummer = null, + ?string $referentienummer=null, ): string { - $refNr = $referentienummer ?? $this->generateUuid(); + $refNr = $referentienummer ?? $this->generateUuid(); $tijdstip = (new \DateTimeImmutable())->format('YmdHis'); - $xml = ''; + $xml = ''; $xml .= 'Lk01'; $xml .= ''; - $xml .= '' . htmlspecialchars($zender['organisatie'] ?? '') . ''; - $xml .= '' . htmlspecialchars($zender['applicatie'] ?? '') . ''; + $xml .= ''.htmlspecialchars($zender['organisatie'] ?? '').''; + $xml .= ''.htmlspecialchars($zender['applicatie'] ?? '').''; $xml .= ''; $xml .= ''; - $xml .= '' . htmlspecialchars($ontvanger['organisatie'] ?? '') . ''; - $xml .= '' . htmlspecialchars($ontvanger['applicatie'] ?? '') . ''; + $xml .= ''.htmlspecialchars($ontvanger['organisatie'] ?? '').''; + $xml .= ''.htmlspecialchars($ontvanger['applicatie'] ?? '').''; $xml .= ''; - $xml .= '' . htmlspecialchars($refNr) . ''; - $xml .= '' . $tijdstip . ''; + $xml .= ''.htmlspecialchars($refNr).''; + $xml .= ''.$tijdstip.''; $xml .= ''; return $xml; - } + }//end buildStuurgegevens() /** * Build a StUF Bv01 (bevestigingsbericht) response. @@ -172,25 +172,25 @@ public function buildBv01( ): string { $tijdstip = (new \DateTimeImmutable())->format('YmdHis'); - $body = ''; + $body = ''; $body .= ''; $body .= 'Bv01'; $body .= ''; - $body .= '' . htmlspecialchars($zender['organisatie'] ?? '') . ''; - $body .= '' . htmlspecialchars($zender['applicatie'] ?? '') . ''; + $body .= ''.htmlspecialchars($zender['organisatie'] ?? '').''; + $body .= ''.htmlspecialchars($zender['applicatie'] ?? '').''; $body .= ''; $body .= ''; - $body .= '' . htmlspecialchars($ontvanger['organisatie'] ?? '') . ''; - $body .= '' . htmlspecialchars($ontvanger['applicatie'] ?? '') . ''; + $body .= ''.htmlspecialchars($ontvanger['organisatie'] ?? '').''; + $body .= ''.htmlspecialchars($ontvanger['applicatie'] ?? '').''; $body .= ''; - $body .= '' . htmlspecialchars($this->generateUuid()) . ''; - $body .= '' . $tijdstip . ''; - $body .= '' . htmlspecialchars($crossRef) . ''; + $body .= ''.htmlspecialchars($this->generateUuid()).''; + $body .= ''.$tijdstip.''; + $body .= ''.htmlspecialchars($crossRef).''; $body .= ''; $body .= ''; return $this->buildSoapEnvelope($body); - } + }//end buildBv01() /** * Build a StUF Fo01 (foutbericht) fault response. @@ -214,29 +214,29 @@ public function buildFo01( ): string { $tijdstip = (new \DateTimeImmutable())->format('YmdHis'); - $body = ''; + $body = ''; $body .= ''; $body .= 'Fo01'; $body .= ''; - $body .= '' . htmlspecialchars($zender['organisatie'] ?? '') . ''; - $body .= '' . htmlspecialchars($zender['applicatie'] ?? '') . ''; + $body .= ''.htmlspecialchars($zender['organisatie'] ?? '').''; + $body .= ''.htmlspecialchars($zender['applicatie'] ?? '').''; $body .= ''; $body .= ''; - $body .= '' . htmlspecialchars($ontvanger['organisatie'] ?? '') . ''; - $body .= '' . htmlspecialchars($ontvanger['applicatie'] ?? '') . ''; + $body .= ''.htmlspecialchars($ontvanger['organisatie'] ?? '').''; + $body .= ''.htmlspecialchars($ontvanger['applicatie'] ?? '').''; $body .= ''; - $body .= '' . htmlspecialchars($this->generateUuid()) . ''; - $body .= '' . $tijdstip . ''; + $body .= ''.htmlspecialchars($this->generateUuid()).''; + $body .= ''.$tijdstip.''; $body .= ''; $body .= ''; - $body .= '' . htmlspecialchars($foutcode) . ''; - $body .= '' . htmlspecialchars($plek) . ''; - $body .= '' . htmlspecialchars($foutbeschrijving) . ''; + $body .= ''.htmlspecialchars($foutcode).''; + $body .= ''.htmlspecialchars($plek).''; + $body .= ''.htmlspecialchars($foutbeschrijving).''; $body .= ''; $body .= ''; return $this->buildSoapEnvelope($body); - } + }//end buildFo01() /** * Build a SOAP Fault response for invalid XML. @@ -269,7 +269,7 @@ public function buildSoapFault(string $faultString): string $fault->appendChild($faultstringEl); return $dom->saveXML() ?: ''; - } + }//end buildSoapFault() /** * Generate a UUID. @@ -289,5 +289,5 @@ private function generateUuid(): string mt_rand(0, 0xffff), mt_rand(0, 0xffff) ); - } -} + }//end generateUuid() +}//end class diff --git a/lib/Service/TemplateLibraryService.php b/lib/Service/TemplateLibraryService.php index 862785cc..790d994c 100644 --- a/lib/Service/TemplateLibraryService.php +++ b/lib/Service/TemplateLibraryService.php @@ -10,7 +10,7 @@ * @category Service * @package OCA\Procest\Service * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * @@ -35,8 +35,7 @@ class TemplateLibraryService /** * Path to the templates directory. */ - private const TEMPLATES_DIR = __DIR__ . '/../Settings/templates'; - + private const TEMPLATES_DIR = __DIR__.'/../Settings/templates'; /** * Constructor. @@ -48,8 +47,7 @@ public function __construct( private readonly SettingsService $settingsService, private readonly LoggerInterface $logger, ) { - } - + }//end __construct() /** * List all available zaaktype templates. @@ -67,7 +65,7 @@ public function listTemplates(): array return $templates; } - $files = glob($dir . '/*.json'); + $files = glob($dir.'/*.json'); if ($files === false) { return $templates; } @@ -81,7 +79,7 @@ public function listTemplates(): array $data = json_decode($content, true); if (json_last_error() !== JSON_ERROR_NONE || is_array($data) === false) { $this->logger->warning( - 'Invalid template file: ' . basename($file), + 'Invalid template file: '.basename($file), ['app' => Application::APP_ID] ); continue; @@ -95,11 +93,10 @@ public function listTemplates(): array 'version' => $data['version'] ?? '1.0.0', 'file' => basename($file), ]; - } + }//end foreach return $templates; - } - + }//end listTemplates() /** * Load a template by its ID. @@ -116,7 +113,7 @@ public function loadTemplate(string $templateId): ?array return null; } - $files = glob($dir . '/*.json'); + $files = glob($dir.'/*.json'); if ($files === false) { return null; } @@ -139,8 +136,7 @@ public function loadTemplate(string $templateId): ?array } return null; - } - + }//end loadTemplate() /** * Activate a template by creating OpenRegister objects for the case type and related entities. @@ -163,7 +159,7 @@ public function activateTemplate(string $templateId): array { $template = $this->loadTemplate($templateId); if ($template === null) { - throw new \RuntimeException('Template not found: ' . $templateId); + throw new \RuntimeException('Template not found: '.$templateId); } $objectService = $this->settingsService->getObjectService(); @@ -187,21 +183,21 @@ public function activateTemplate(string $templateId): array ]; // Create the case type. - $caseTypeSchema = $this->settingsService->getConfigValue('case_type_schema'); - $caseTypeData = $template['caseType'] ?? []; - $caseType = $objectService->saveObject( + $caseTypeSchema = $this->settingsService->getConfigValue('case_type_schema'); + $caseTypeData = $template['caseType'] ?? []; + $caseType = $objectService->saveObject( $register, $caseTypeSchema, $caseTypeData, ); - $caseTypeId = $caseType->getUuid(); + $caseTypeId = $caseType->getUuid(); $result['caseType'] = $caseTypeId; // Create status types. $statusTypeSchema = $this->settingsService->getConfigValue('status_type_schema'); foreach (($template['statusTypes'] ?? []) as $statusData) { $statusData['caseType'] = $caseTypeId; - $status = $objectService->saveObject( + $status = $objectService->saveObject( $register, $statusTypeSchema, $statusData, @@ -213,7 +209,7 @@ public function activateTemplate(string $templateId): array $propertySchema = $this->settingsService->getConfigValue('property_definition_schema'); foreach (($template['propertyDefinitions'] ?? []) as $propData) { $propData['caseType'] = $caseTypeId; - $prop = $objectService->saveObject( + $prop = $objectService->saveObject( $register, $propertySchema, $propData, @@ -225,7 +221,7 @@ public function activateTemplate(string $templateId): array $docTypeSchema = $this->settingsService->getConfigValue('document_type_schema'); foreach (($template['documentTypes'] ?? []) as $docData) { $docData['caseType'] = $caseTypeId; - $doc = $objectService->saveObject( + $doc = $objectService->saveObject( $register, $docTypeSchema, $docData, @@ -237,7 +233,7 @@ public function activateTemplate(string $templateId): array $decisionTypeSchema = $this->settingsService->getConfigValue('decision_type_schema'); foreach (($template['decisionTypes'] ?? []) as $decData) { $decData['caseType'] = $caseTypeId; - $dec = $objectService->saveObject( + $dec = $objectService->saveObject( $register, $decisionTypeSchema, $decData, @@ -249,7 +245,7 @@ public function activateTemplate(string $templateId): array $roleTypeSchema = $this->settingsService->getConfigValue('role_type_schema'); foreach (($template['roleTypes'] ?? []) as $roleData) { $roleData['caseType'] = $caseTypeId; - $role = $objectService->saveObject( + $role = $objectService->saveObject( $register, $roleTypeSchema, $roleData, @@ -258,10 +254,10 @@ public function activateTemplate(string $templateId): array } $this->logger->info( - 'Template activated: ' . $templateId . ' -> caseType ' . $caseTypeId, + 'Template activated: '.$templateId.' -> caseType '.$caseTypeId, ['app' => Application::APP_ID] ); return $result; - } -} + }//end activateTemplate() +}//end class diff --git a/lib/Service/TenantService.php b/lib/Service/TenantService.php index 36aebde4..fae5c263 100644 --- a/lib/Service/TenantService.php +++ b/lib/Service/TenantService.php @@ -8,7 +8,7 @@ * @category Service * @package OCA\Procest\Service * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * @@ -48,8 +48,8 @@ class TenantService * @param IAppManager $appManager The app manager * @param IGroupManager $groupManager The Nextcloud group manager * @param IUserManager $userManager The Nextcloud user manager - * @param ContainerInterface $container The DI container - * @param LoggerInterface $logger The logger + * @param ContainerInterface $container The DI container + * @param LoggerInterface $logger The logger * * @return void */ @@ -205,10 +205,12 @@ public function provisionTenant(string $tenantId): array // Create a dedicated register for this tenant. try { $registerService = $this->container->get('OCA\OpenRegister\Service\RegisterService'); - $newRegister = $registerService->createFromArray([ - 'title' => 'Procest - '.$tenantData['name'], - 'description' => 'Case management register for '.$tenantData['name'], - ]); + $newRegister = $registerService->createFromArray( + [ + 'title' => 'Procest - '.$tenantData['name'], + 'description' => 'Case management register for '.$tenantData['name'], + ] + ); $tenantData['registerId'] = (string) $newRegister->getId(); } catch (\Exception $e) { diff --git a/lib/Service/ZgwBrcRulesService.php b/lib/Service/ZgwBrcRulesService.php index 51816245..769222cf 100644 --- a/lib/Service/ZgwBrcRulesService.php +++ b/lib/Service/ZgwBrcRulesService.php @@ -8,7 +8,7 @@ * @category Service * @package OCA\Procest\Service * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * diff --git a/lib/Service/ZgwBusinessRulesService.php b/lib/Service/ZgwBusinessRulesService.php index 3efcb63a..77473c47 100644 --- a/lib/Service/ZgwBusinessRulesService.php +++ b/lib/Service/ZgwBusinessRulesService.php @@ -15,7 +15,7 @@ * @category Service * @package OCA\Procest\Service * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * diff --git a/lib/Service/ZgwDocumentService.php b/lib/Service/ZgwDocumentService.php index 5db0127f..b421d75f 100644 --- a/lib/Service/ZgwDocumentService.php +++ b/lib/Service/ZgwDocumentService.php @@ -9,7 +9,7 @@ * @category Service * @package OCA\Procest\Service * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * diff --git a/lib/Service/ZgwDrcRulesService.php b/lib/Service/ZgwDrcRulesService.php index ea4f2269..673bbbdf 100644 --- a/lib/Service/ZgwDrcRulesService.php +++ b/lib/Service/ZgwDrcRulesService.php @@ -8,7 +8,7 @@ * @category Service * @package OCA\Procest\Service * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * diff --git a/lib/Service/ZgwMappingService.php b/lib/Service/ZgwMappingService.php index b04ae9e6..756ec854 100644 --- a/lib/Service/ZgwMappingService.php +++ b/lib/Service/ZgwMappingService.php @@ -10,7 +10,7 @@ * @category Service * @package OCA\Procest\Service * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * diff --git a/lib/Service/ZgwPaginationHelper.php b/lib/Service/ZgwPaginationHelper.php index 53105303..cf0f430d 100644 --- a/lib/Service/ZgwPaginationHelper.php +++ b/lib/Service/ZgwPaginationHelper.php @@ -8,7 +8,7 @@ * @category Service * @package OCA\Procest\Service * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * diff --git a/lib/Service/ZgwRulesBase.php b/lib/Service/ZgwRulesBase.php index b5001e45..9bbda8e9 100644 --- a/lib/Service/ZgwRulesBase.php +++ b/lib/Service/ZgwRulesBase.php @@ -10,7 +10,7 @@ * @category Service * @package OCA\Procest\Service * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * diff --git a/lib/Service/ZgwService.php b/lib/Service/ZgwService.php index 1292ab49..8cf16f19 100644 --- a/lib/Service/ZgwService.php +++ b/lib/Service/ZgwService.php @@ -10,7 +10,7 @@ * @category Service * @package OCA\Procest\Service * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * diff --git a/lib/Service/ZgwZrcRulesService.php b/lib/Service/ZgwZrcRulesService.php index 837270d0..78ddfc4d 100644 --- a/lib/Service/ZgwZrcRulesService.php +++ b/lib/Service/ZgwZrcRulesService.php @@ -8,7 +8,7 @@ * @category Service * @package OCA\Procest\Service * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * @@ -145,7 +145,7 @@ public function rulesZakenCreate(array $body): array register: $register, schema: $schema ); - $ztData = is_array($zaaktype) === true ? $zaaktype : $zaaktype->jsonSerialize(); + $ztData = is_array($zaaktype) === true ? $zaaktype : $zaaktype->jsonSerialize(); if (empty($ztData['defaultAssignee']) === false) { $body['assignee'] = $ztData['defaultAssignee']; } @@ -154,7 +154,7 @@ public function rulesZakenCreate(array $body): array } } } - } + }//end if return $this->validateZaakFields(result: $this->isValid(body: $body), existingObject: null, isPatch: false); }//end rulesZakenCreate() diff --git a/lib/Service/ZgwZtcRulesService.php b/lib/Service/ZgwZtcRulesService.php index 14b3f6b2..7bfd40d3 100644 --- a/lib/Service/ZgwZtcRulesService.php +++ b/lib/Service/ZgwZtcRulesService.php @@ -8,7 +8,7 @@ * @category Service * @package OCA\Procest\Service * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * diff --git a/lib/Settings/AdminSettings.php b/lib/Settings/AdminSettings.php index 2fb70802..d4b70b06 100644 --- a/lib/Settings/AdminSettings.php +++ b/lib/Settings/AdminSettings.php @@ -8,7 +8,7 @@ * @category Settings * @package OCA\Procest\Settings * - * @author Conduction Development Team + * @author Conduction Development Team * @copyright 2024 Conduction B.V. * @license EUPL-1.2 https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 * diff --git a/lib/Settings/procest_register.json b/lib/Settings/procest_register.json index 3cb0262a..09c25090 100644 --- a/lib/Settings/procest_register.json +++ b/lib/Settings/procest_register.json @@ -3,7 +3,7 @@ "info": { "title": "Procest Case Management Register", "description": "Register containing all schemas for the Procest case management application. Defines case types, status types, role types, result types, decision types, document types, property definitions, voorstel, parafeerroute, parafeeractie, and their instance counterparts.", - "version": "0.5.0" + "version": "0.6.0" }, "x-openregister": { "type": "application", @@ -712,7 +712,7 @@ "task": { "slug": "task", "icon": "CheckboxMarkedOutline", - "version": "1.0.0", + "version": "1.1.0", "x-schema-org-type": "schema:Action", "x-zgw-equivalent": "Taak", "title": "Task", @@ -794,6 +794,49 @@ "description": "JSON-encoded array of checklist items ({id, label, checked})", "visible": false } + }, + "configuration": { + "x-openregister-lifecycle": { + "field": "status", + "initial": "available", + "final": [ + "completed", + "terminated", + "disabled" + ], + "transitions": { + "activate": { + "from": [ + "available" + ], + "to": "active", + "description": "Pick up the task." + }, + "complete": { + "from": [ + "active" + ], + "to": "completed", + "description": "Mark task as completed." + }, + "terminate": { + "from": [ + "available", + "active" + ], + "to": "terminated", + "description": "Terminate the task." + }, + "disable": { + "from": [ + "available", + "active" + ], + "to": "disabled", + "description": "Disable the task." + } + } + } } }, "role": { @@ -982,7 +1025,7 @@ "document": { "slug": "document", "icon": "FileDocumentOutline", - "version": "1.0.0", + "version": "1.1.0", "x-schema-org-type": "schema:DigitalDocument", "x-zgw-equivalent": "EnkelvoudigInformatieObject", "title": "Document", @@ -1092,6 +1135,45 @@ "default": null, "description": "Indicates whether usage rights have been set for this document" } + }, + "configuration": { + "x-openregister-lifecycle": { + "field": "status", + "initial": "in_bewerking", + "final": [ + "gearchiveerd" + ], + "transitions": { + "submit": { + "from": [ + "in_bewerking" + ], + "to": "ter_vaststelling", + "description": "Submit the document for adoption." + }, + "adopt": { + "from": [ + "ter_vaststelling" + ], + "to": "definitief", + "description": "Adopt the document as final." + }, + "archive": { + "from": [ + "definitief" + ], + "to": "gearchiveerd", + "description": "Archive the final document." + }, + "sendBack": { + "from": [ + "ter_vaststelling" + ], + "to": "in_bewerking", + "description": "Send back for revisions." + } + } + } } }, "documentLink": { @@ -1539,7 +1621,7 @@ "voorstel": { "slug": "voorstel", "icon": "FileDocumentEditOutline", - "version": "1.0.0", + "version": "1.1.0", "x-schema-org-type": "schema:CreativeWork", "title": "Voorstel", "description": "A B&W voorstel (proposal) for decision-making in a case", @@ -1651,6 +1733,77 @@ "description": "Reference to the linked decision (set when besluit is registered)", "visible": false } + }, + "configuration": { + "x-openregister-lifecycle": { + "field": "status", + "initial": "concept", + "final": [ + "besloten", + "gearchiveerd" + ], + "transitions": { + "startParafering": { + "from": [ + "concept" + ], + "to": "in_parafering", + "description": "Start initialing route." + }, + "paraferingDone": { + "from": [ + "in_parafering" + ], + "to": "ter_accordering", + "description": "Initialing complete; ready for accordance." + }, + "accord": { + "from": [ + "ter_accordering" + ], + "to": "geaccordeerd", + "description": "Accord the proposal." + }, + "submit": { + "from": [ + "geaccordeerd" + ], + "to": "aangeboden", + "description": "Submit the proposal for decision." + }, + "decide": { + "from": [ + "aangeboden" + ], + "to": "besloten", + "description": "Decision made on the proposal." + }, + "archive": { + "from": [ + "besloten" + ], + "to": "gearchiveerd", + "description": "Archive the proposal." + }, + "sendBack": { + "from": [ + "in_parafering", + "ter_accordering", + "geaccordeerd", + "aangeboden" + ], + "to": "teruggestuurd", + "description": "Send the proposal back for revisions." + }, + "revise": { + "from": [ + "teruggestuurd" + ], + "to": "concept", + "description": "Take a returned proposal back into draft." + } + } + } } }, "parafeerroute": { @@ -1949,7 +2102,7 @@ "hearingSession": { "slug": "hearingSession", "icon": "AccountGroupOutline", - "version": "1.0.0", + "version": "1.1.0", "x-schema-org-type": "schema:Event", "x-zgw-equivalent": "Hoorzitting", "title": "Hearing Session", @@ -2028,6 +2181,49 @@ "type": "string", "description": "Reason for waiving hearing right" } + }, + "configuration": { + "x-openregister-lifecycle": { + "field": "status", + "initial": "gepland", + "final": [ + "uitgevoerd", + "geannuleerd", + "afgezien" + ], + "transitions": { + "invite": { + "from": [ + "gepland" + ], + "to": "uitgenodigd", + "description": "Send hearing invitations." + }, + "execute": { + "from": [ + "uitgenodigd" + ], + "to": "uitgevoerd", + "description": "Mark the hearing as carried out." + }, + "cancel": { + "from": [ + "gepland", + "uitgenodigd" + ], + "to": "geannuleerd", + "description": "Cancel the hearing." + }, + "waive": { + "from": [ + "gepland", + "uitgenodigd" + ], + "to": "afgezien", + "description": "Waive the hearing." + } + } + } } }, "advisoryReport": { @@ -2299,7 +2495,7 @@ "adviesAanvraag": { "slug": "adviesAanvraag", "icon": "CommentQuestionOutline", - "version": "1.0.0", + "version": "1.1.0", "x-schema-org-type": "schema:AskAction", "title": "Advice Request", "description": "A request for internal or external advice on a case, with deadline tracking", @@ -2364,12 +2560,38 @@ "type": "string", "description": "Specific questions for the adviseur" } + }, + "configuration": { + "x-openregister-lifecycle": { + "field": "status", + "initial": "aangevraagd", + "final": [ + "ontvangen", + "verlopen" + ], + "transitions": { + "receive": { + "from": [ + "aangevraagd" + ], + "to": "ontvangen", + "description": "Mark the advice as received." + }, + "expire": { + "from": [ + "aangevraagd" + ], + "to": "verlopen", + "description": "Mark the advice request as expired." + } + } + } } }, "handhavingsactie": { "slug": "handhavingsactie", "icon": "Gavel", - "version": "1.0.0", + "version": "1.1.0", "x-schema-org-type": "schema:LegalForceStatus", "title": "Enforcement Action", "description": "An enforcement action (handhavingsactie) on a case, classified per the Landelijke Handhavingsstrategie (LHS)", @@ -2452,12 +2674,46 @@ "type": "string", "description": "Documented reasoning if the LHS suggestion was overridden" } + }, + "configuration": { + "x-openregister-lifecycle": { + "field": "status", + "initial": "opgelegd", + "final": [ + "geeffectueerd", + "ingetrokken" + ], + "transitions": { + "forfeit": { + "from": [ + "opgelegd" + ], + "to": "verbeurd", + "description": "Mark the enforcement action as forfeited." + }, + "execute": { + "from": [ + "verbeurd" + ], + "to": "geeffectueerd", + "description": "Mark the enforcement action as executed." + }, + "withdraw": { + "from": [ + "opgelegd", + "verbeurd" + ], + "to": "ingetrokken", + "description": "Withdraw the enforcement action." + } + } + } } }, "inspectieChecklist": { "slug": "inspectieChecklist", "icon": "ClipboardCheckOutline", - "version": "1.0.0", + "version": "1.1.0", "x-schema-org-type": "schema:HowTo", "title": "Inspection Checklist", "description": "Configurable inspection checklist template linked to a case type, with versioning support", @@ -2541,6 +2797,31 @@ } } } + }, + "configuration": { + "x-openregister-lifecycle": { + "field": "status", + "initial": "draft", + "final": [ + "archived" + ], + "transitions": { + "activate": { + "from": [ + "draft" + ], + "to": "active", + "description": "Activate the checklist." + }, + "archive": { + "from": [ + "active" + ], + "to": "archived", + "description": "Archive the checklist." + } + } + } } }, "inspectieRapport": { @@ -2703,4 +2984,4 @@ } } } -} \ No newline at end of file +} diff --git a/openspec/changes/rbac-zaaktype/.openspec.yaml b/openspec/changes/rbac-zaaktype/.openspec.yaml new file mode 100644 index 00000000..7112eff1 --- /dev/null +++ b/openspec/changes/rbac-zaaktype/.openspec.yaml @@ -0,0 +1,3 @@ +schema: spec-driven +status: proposed +created: 2026-03-20 diff --git a/openspec/changes/rbac-zaaktype/design.md b/openspec/changes/rbac-zaaktype/design.md new file mode 100644 index 00000000..d71b2564 --- /dev/null +++ b/openspec/changes/rbac-zaaktype/design.md @@ -0,0 +1,14 @@ +# Design: RBAC per Zaaktype + +## Approach +Implement the requirements defined in the spec using OpenRegister's existing service architecture. + +## Files Affected +- `lib/Db/AuditTrail.php` +- `lib/Db/MagicMapper/MagicRbacHandler.php` +- `lib/Db/MultiTenancyTrait.php` +- `lib/Db/Schema.php` +- `lib/Service/ConditionMatcher.php` +- `lib/Service/Object/PermissionHandler.php` +- `lib/Service/OperatorEvaluator.php` +- `lib/Service/PropertyRbacHandler.php` diff --git a/openspec/changes/rbac-zaaktype/proposal.md b/openspec/changes/rbac-zaaktype/proposal.md new file mode 100644 index 00000000..5db2be93 --- /dev/null +++ b/openspec/changes/rbac-zaaktype/proposal.md @@ -0,0 +1,9 @@ +# RBAC per Zaaktype + +> **Note:** Relocated from `openregister/openspec/changes/rbac-zaaktype/` on 2026-04-30. The original framing called this an "abstract extension of OpenRegister's RBAC system" but the requirements use ZGW vocabulary throughout (zaaktype, vertrouwelijkheidaanduiding, Zaakcatalogus, ZGW Autorisaties API, VNG compliance). All zaaktype code already lives in Procest (`AcController`, `ZtcController`, `ZgwBusinessRulesService`, `ZgwMappingService`, `ZgwZrcRulesService`); zero zaaktype code in OpenRegister. The spec is implementation work for ZGW Autorisaties, not a generic RBAC pattern, so it belongs adjacent to the existing `zaaktype-configuratie` change in Procest. OpenRegister provides the underlying RBAC primitives (PermissionHandler, MagicRbacHandler, ConditionMatcher) this spec composes against. + +## Problem +Define zaaktype-scoped authorization layered on top of OpenRegister's existing RBAC primitives. This spec does NOT introduce a new authorization engine — it defines how the existing PermissionHandler and MagicRbacHandler conditional rules can be configured to enforce zaaktype-level access control, as required by the ZGW Autorisaties API. + +## Proposed Solution +Define zaaktype-scoped authorization as an abstract extension of OpenRegister's existing RBAC system. This spec does NOT introduce a new authorization engine — it defines how the existing PermissionHandler and MagicRbacHandler conditional rules can be configured to enforce zaaktype-level access control, as required by the ZGW Autorisaties API. The core RBAC infrastructure (schema-level permissions, property-level filtering, database-level SQL conditions, admin bypass, conditional matching with o diff --git a/openspec/changes/rbac-zaaktype/specs/rbac-zaaktype/spec.md b/openspec/changes/rbac-zaaktype/specs/rbac-zaaktype/spec.md new file mode 100644 index 00000000..d24d5896 --- /dev/null +++ b/openspec/changes/rbac-zaaktype/specs/rbac-zaaktype/spec.md @@ -0,0 +1,528 @@ +--- +status: partial +--- + +# RBAC per Zaaktype + +## Purpose +Define zaaktype-scoped authorization as an abstract extension of OpenRegister's existing RBAC system. This spec does NOT introduce a new authorization engine — it defines how the existing PermissionHandler and MagicRbacHandler conditional rules can be configured to enforce zaaktype-level access control, as required by the ZGW Autorisaties API. The core RBAC infrastructure (schema-level permissions, property-level filtering, database-level SQL conditions, admin bypass, conditional matching with operators) is already fully implemented. This spec documents how that infrastructure maps to zaaktype-scoped CRUD permissions, ZGW Autorisaties API compliance (including vertrouwelijkheidaanduiding enforcement), role-to-zaaktype mapping with per-zaaktype role differentiation, cross-zaaktype coordinator access, permission-aware UI rendering, audit logging of zaaktype-level access decisions, and multi-tenant zaaktype isolation — enabling fine-grained data compartmentalization across departments that is required by 86% of analyzed government tenders. + +**Tender demand**: 86% of analyzed government tenders require RBAC per zaaktype. Dimpact ZAC implements 51+ individual permissions across 5 policy domains with per-zaaktype role differentiation via PABC. Valtimo uses PBAC with conditional permission records evaluated at query time. OpenRegister achieves equivalent functionality through Nextcloud group-based authorization on schemas with conditional matching, avoiding external policy engines. + +## Relationship to Existing Implementation +This spec is a configuration and extension layer on top of existing RBAC infrastructure: + +- **Schema-level RBAC = zaaktype RBAC (fully implemented)**: Each schema maps to a zaaktype. The existing `PermissionHandler::hasPermission()` already enforces per-schema CRUD authorization using Nextcloud groups. Zaaktype-scoped access is achieved by configuring schema `authorization` blocks — no new code needed for basic zaaktype RBAC. +- **Conditional matching = vertrouwelijkheidaanduiding (fully implemented)**: `MagicRbacHandler` with `$in` operator conditions already supports confidentiality-level filtering. Vertrouwelijkheidaanduiding enforcement is a configuration concern using existing operators. +- **Admin bypass (fully implemented)**: `PermissionHandler` checks `in_array('admin', $userGroups)` and returns `true` immediately — maps directly to ZGW `heeftAlleAutorisaties`. +- **Multi-tenancy integration (fully implemented)**: `MultiTenancyTrait` and `MagicRbacHandler::hasConditionalRulesBypassingMultitenancy()` already handle organisation-scoped zaaktype access. +- **Consumer identity mapping (fully implemented)**: `Consumer` entity maps ZGW Applicatie to Nextcloud user, whose group memberships define effective zaaktype scopes. +- **Audit trail (partially implemented)**: `AuditTrail` entity exists with `confidentiality` field, but specific `rbac.permission_granted`/`rbac.permission_revoked` events are not yet logged. +- **What this spec adds**: User-level permission overrides (delegation), permission matrix UI, bulk permission assignment/templates, delegation with expiry, register-level default authorization cascade, and VNG compliance test suite. + +## Requirements + +### Requirement: Authorization policies MUST be configurable per schema (zaaktype) +Each schema in a register MUST support an authorization policy that defines which Nextcloud groups or users may perform CRUD operations on its objects. The authorization block on the schema entity SHALL be the primary mechanism for zaaktype-scoped access control, where each schema maps to a zaaktype or objecttype. + +#### Scenario: Define read-only access for a group on a specific zaaktype +- **GIVEN** a register `zaken` with schema `bezwaarschriften` (representing zaaktype "Bezwaarschrift") +- **AND** group `juridisch-team` is granted `read` permission on `bezwaarschriften` +- **WHEN** a user in `juridisch-team` attempts to list bezwaarschriften objects +- **THEN** the system MUST return the objects +- **AND** when the same user attempts to create or update a bezwaarschrift +- **THEN** the system MUST return HTTP 403 Forbidden + +#### Scenario: Define full CRUD access for a group on a zaaktype +- **GIVEN** schema `vergunningen` with authorization: `{ "read": ["vth-behandelaars"], "create": ["vth-behandelaars"], "update": ["vth-behandelaars"], "delete": ["vth-behandelaars"] }` +- **WHEN** a user in `vth-behandelaars` creates, reads, updates, or deletes a vergunning object +- **THEN** all operations MUST succeed +- **AND** `PermissionHandler::hasPermission()` MUST return `true` for each action + +#### Scenario: Deny access to unauthorized users for a zaaktype +- **GIVEN** schema `bezwaarschriften` with only `juridisch-team` authorized for all CRUD operations +- **WHEN** a user NOT in `juridisch-team` attempts any CRUD operation on bezwaarschriften +- **THEN** the system MUST return HTTP 403 Forbidden +- **AND** `PermissionHandler::checkPermission()` MUST throw an Exception with message containing "does not have permission" +- **AND** the schema MUST NOT appear in the user's schema listing when using RBAC-filtered queries + +#### Scenario: Separate read and write permissions per zaaktype +- **GIVEN** schema `meldingen-openbare-ruimte` with authorization: `{ "read": ["kcc-team", "behandelaars"], "create": ["kcc-team"], "update": ["behandelaars"], "delete": ["admin"] }` +- **WHEN** a user in `kcc-team` (but not `behandelaars`) creates a melding +- **THEN** the create operation MUST succeed +- **AND** when the same user attempts to update the melding +- **THEN** the system MUST return HTTP 403 Forbidden (user can create but not update) + +#### Scenario: Multiple groups authorized for the same zaaktype action +- **GIVEN** schema `klachten` with authorization: `{ "read": ["kcc-team", "juridisch-team", "management"] }` +- **WHEN** a user in any of those three groups reads klachten +- **THEN** access MUST be granted because `PermissionHandler::hasPermission()` iterates over all user groups and returns `true` on first match + +### Requirement: Authorization policies MUST support user-level overrides for delegation +Individual users MUST be grantable permissions independent of group membership to support delegation scenarios such as external advisors, temporary assignments, and escalation paths. User-level overrides SHALL take precedence over group-level denials. + +#### Scenario: Delegated access for a single user on a zaaktype +- **GIVEN** schema `personeelszaken` restricted to group `hr-team` +- **AND** user `extern-adviseur` is individually granted `read` on `personeelszaken` via user-level override +- **WHEN** `extern-adviseur` lists personeelszaken objects +- **THEN** the system MUST return the objects +- **AND** `extern-adviseur` MUST NOT be able to write or delete (only explicitly granted permissions apply) + +#### Scenario: Temporary delegation with expiry +- **GIVEN** schema `bezwaarschriften` restricted to group `juridisch-team` +- **AND** user `vervanger-1` is granted temporary `read,update` access with expiry date `2026-04-01` +- **WHEN** `vervanger-1` accesses bezwaarschriften before the expiry date +- **THEN** access MUST be granted +- **AND** after `2026-04-01`, the delegation MUST automatically expire and access MUST be denied + +#### Scenario: Delegation does not affect group permissions +- **GIVEN** user `jan` is in group `kcc-team` which has `read` on schema `meldingen` +- **AND** `jan` is individually granted `update` on `meldingen` via delegation +- **WHEN** `jan` reads or updates a melding +- **THEN** both operations MUST succeed (group `read` + delegated `update` are combined) +- **AND** revoking the delegation MUST NOT affect `jan`'s group-based `read` permission + +### Requirement: Role-to-zaaktype mapping MUST support per-zaaktype role differentiation +The system MUST support a model where a user can have different roles for different zaaktypes, analogous to ZGW's per-zaaktype autorisatie model and Dimpact ZAC's PABC architecture. This SHALL be achieved through Nextcloud group naming conventions that encode both the role and the zaaktype scope. + +#### Scenario: User has different roles for different zaaktypes +- **GIVEN** user `behandelaar-1` is in groups `vergunningen-behandelaar` and `klachten-raadpleger` +- **AND** schema `vergunningen` has authorization: `{ "read": ["vergunningen-behandelaar", "vergunningen-raadpleger"], "update": ["vergunningen-behandelaar"] }` +- **AND** schema `klachten` has authorization: `{ "read": ["klachten-raadpleger", "klachten-behandelaar"], "update": ["klachten-behandelaar"] }` +- **WHEN** `behandelaar-1` reads klachten +- **THEN** access MUST be granted (via `klachten-raadpleger` group) +- **AND** when `behandelaar-1` updates a klacht, access MUST be denied (not in `klachten-behandelaar`) +- **AND** when `behandelaar-1` updates a vergunning, access MUST be granted (in `vergunningen-behandelaar`) + +#### Scenario: Wildcard domain group grants access to all zaaktypes of a role level +- **GIVEN** group `elk-zaaktype-raadpleger` is referenced in multiple schema authorization rules via a shared group pattern +- **AND** user `manager-1` is in group `elk-zaaktype-raadpleger` +- **WHEN** `manager-1` reads objects from any schema that includes `elk-zaaktype-raadpleger` in its `read` authorization +- **THEN** access MUST be granted across all those schemas + +#### Scenario: Role hierarchy through group composition +- **GIVEN** the role hierarchy: raadpleger (read-only) < behandelaar (read+write) < coordinator (read+write+assign) < beheerder (all) +- **AND** user `coordinator-1` is in groups `vergunningen-coordinator`, `vergunningen-behandelaar`, `vergunningen-raadpleger` +- **WHEN** `coordinator-1` performs any operation on vergunningen +- **THEN** the cumulative permissions from all groups MUST be combined (union of permissions) + +### Requirement: The system MUST enforce a zaaktype x operation x role permission matrix +Administrators MUST be able to configure and view a permission matrix that maps (zaaktype/schema) x (CRUD operation) x (role/group) combinations. This matrix SHALL be the canonical representation of all zaaktype-scoped access control rules. + +#### Scenario: View permission matrix for a register +- **GIVEN** a register `zaakregistratie` with 5 schemas (zaaktypen) and 4 groups +- **WHEN** the admin navigates to the register's authorization settings +- **THEN** a matrix MUST be displayed with schemas as rows and groups as columns +- **AND** each cell MUST show read/create/update/delete checkboxes reflecting current permissions from each schema's `authorization` block + +#### Scenario: Edit permissions via the matrix view +- **GIVEN** the permission matrix is displayed for register `zaakregistratie` +- **WHEN** the admin checks the `update` checkbox for schema `klachten` and group `kcc-team` +- **THEN** the schema's `authorization.update` array MUST be updated to include `kcc-team` +- **AND** the change MUST take effect immediately for subsequent API requests + +#### Scenario: Matrix reflects conditional authorization rules +- **GIVEN** schema `meldingen` has authorization: `{ "read": [{ "group": "behandelaars", "match": { "_organisation": "$organisation" } }] }` +- **WHEN** the permission matrix is displayed +- **THEN** the `read` cell for `behandelaars` on `meldingen` MUST show a conditional indicator (e.g., icon or tooltip) +- **AND** hovering/clicking MUST reveal the match condition: `_organisation = $organisation` + +#### Scenario: Export permission matrix as CSV +- **GIVEN** a register with 20 schemas and 10 groups +- **WHEN** the admin exports the permission matrix +- **THEN** a CSV file MUST be generated with columns: schema, group, read, create, update, delete, conditions +- **AND** each row MUST represent one schema-group combination + +### Requirement: The system MUST support vertrouwelijkheidaanduiding (confidentiality levels) per zaaktype +The ZGW standard defines 8 confidentiality levels (vertrouwelijkheidaanduiding) that MUST be enforceable per zaaktype. Each role/group MUST have a maximum vertrouwelijkheidaanduiding (maxVertrouwelijkheidaanduiding) that limits which objects they can access within a zaaktype based on the object's confidentiality level. + +#### Scenario: Object filtered by vertrouwelijkheidaanduiding +- **GIVEN** schema `zaken` has a property `vertrouwelijkheidaanduiding` with type `string` and enum values: `openbaar`, `beperkt_openbaar`, `intern`, `zaakvertrouwelijk`, `vertrouwelijk`, `confidentieel`, `geheim`, `zeer_geheim` +- **AND** the authorization rule for group `kcc-team` includes a conditional match: `{ "group": "kcc-team", "match": { "vertrouwelijkheidaanduiding": { "$in": ["openbaar", "beperkt_openbaar", "intern"] } } }` +- **WHEN** a user in `kcc-team` lists zaken +- **THEN** `MagicRbacHandler::applyRbacFilters()` MUST add a SQL WHERE clause filtering on the vertrouwelijkheidaanduiding field +- **AND** only zaken with vertrouwelijkheidaanduiding `openbaar`, `beperkt_openbaar`, or `intern` MUST be returned +- **AND** zaken with `vertrouwelijk` or higher MUST NOT be visible + +#### Scenario: Higher clearance group sees more confidential objects +- **GIVEN** group `management` has authorization with match: `{ "vertrouwelijkheidaanduiding": { "$in": ["openbaar", "beperkt_openbaar", "intern", "zaakvertrouwelijk", "vertrouwelijk", "confidentieel"] } }` +- **AND** group `kcc-team` has match: `{ "vertrouwelijkheidaanduiding": { "$in": ["openbaar", "beperkt_openbaar", "intern"] } }` +- **WHEN** a user in `management` and a user in `kcc-team` both list the same schema +- **THEN** the management user MUST see objects up to `confidentieel` +- **AND** the kcc-team user MUST only see objects up to `intern` + +#### Scenario: Admin bypasses vertrouwelijkheidaanduiding filtering +- **GIVEN** a user in the `admin` group +- **WHEN** they list objects from any schema regardless of vertrouwelijkheidaanduiding +- **THEN** all objects MUST be returned because `PermissionHandler::hasPermission()` returns `true` immediately for admin group members + +#### Scenario: Vertrouwelijkheidaanduiding enforcement on single object access +- **GIVEN** a user in `kcc-team` with maxVertrouwelijkheidaanduiding `intern` +- **AND** object `zaak-123` has `vertrouwelijkheidaanduiding: "vertrouwelijk"` +- **WHEN** the user sends GET `/api/objects/{register}/{schema}/zaak-123` +- **THEN** the system MUST return HTTP 403 Forbidden +- **AND** the response MUST NOT leak the object's data + +#### Scenario: Confidentiality level hierarchy ordering +- **GIVEN** the ZGW vertrouwelijkheidaanduiding enum with ordering: `openbaar` (1) < `beperkt_openbaar` (2) < `intern` (3) < `zaakvertrouwelijk` (4) < `vertrouwelijk` (5) < `confidentieel` (6) < `geheim` (7) < `zeer_geheim` (8) +- **WHEN** comparing confidentiality levels for access decisions +- **THEN** the system MUST use ordinal comparison (lower number = less restrictive) +- **AND** a user with maxVertrouwelijkheidaanduiding at level N MUST be able to access objects at level N or below + +### Requirement: Cross-zaaktype access MUST be supported for coordinator and management roles +Users with coordinator or management roles MUST be able to access objects across multiple zaaktypes for work distribution, reporting, and oversight purposes, without requiring individual zaaktype-level permissions for each schema. + +#### Scenario: Coordinator with cross-zaaktype read access +- **GIVEN** user `coordinator-1` is in group `alle-zaken-coordinator` +- **AND** schemas `vergunningen`, `klachten`, `meldingen` all include `alle-zaken-coordinator` in their `read` authorization +- **WHEN** `coordinator-1` lists objects from any of those schemas +- **THEN** access MUST be granted for all three schemas + +#### Scenario: Management dashboard aggregates across zaaktypes +- **GIVEN** user `manager-1` is in group `management` which has `read` on all zaaktype schemas +- **WHEN** `manager-1` queries a cross-schema aggregation endpoint (e.g., GraphQL query spanning multiple schemas) +- **THEN** objects from all authorized schemas MUST be returned +- **AND** schemas where `management` is NOT in the `read` authorization MUST be excluded + +#### Scenario: Coordinator can reassign across zaaktypes +- **GIVEN** user `coordinator-1` has `update` permission on both `vergunningen` and `klachten` schemas +- **WHEN** `coordinator-1` updates a vergunning object's `assignedTo` field +- **THEN** the update MUST succeed +- **AND** `coordinator-1` MUST also be able to update a klacht object's `assignedTo` field in the same session + +### Requirement: Permission checks MUST apply to all API endpoints consistently +All REST API endpoints (list, get, create, update, delete), GraphQL queries and mutations, MCP tool invocations, and public endpoints MUST enforce the zaaktype-scoped authorization policy via `PermissionHandler::checkPermission()` before processing the request. + +#### Scenario: REST API request without zaaktype permission +- **GIVEN** an authenticated API consumer mapped to user `api-user` +- **AND** `api-user` has no permissions on schema `vertrouwelijk-zaaktype` +- **WHEN** the consumer sends GET `/api/objects/{register}/vertrouwelijk-zaaktype` +- **THEN** the system MUST return HTTP 403 Forbidden +- **AND** the response body MUST include a clear error message about missing permission + +#### Scenario: REST API request with read-only zaaktype permission +- **GIVEN** `api-user` has `read` on schema `meldingen` +- **WHEN** the consumer sends POST `/api/objects/{register}/meldingen` +- **THEN** the system MUST return HTTP 403 Forbidden +- **AND** GET requests MUST succeed +- **AND** the error message MUST indicate that `create` permission is required + +#### Scenario: GraphQL query enforces zaaktype RBAC +- **GIVEN** user `medewerker-1` has `read` on schema `vergunningen` but NOT on `bezwaarschriften` +- **WHEN** `medewerker-1` executes a GraphQL query: `{ vergunningen { edges { node { title } } } bezwaarschriften { edges { node { title } } } }` +- **THEN** `vergunningen` data MUST be returned +- **AND** `bezwaarschriften` MUST return a partial error with `extensions.code: "FORBIDDEN"` + +#### Scenario: MCP tool invocation enforces zaaktype RBAC +- **GIVEN** an MCP client authenticated as user `mcp-user` +- **AND** `mcp-user` has `read` on schema `meldingen` but NOT `create` +- **WHEN** the MCP client calls `mcp__openregister__objects` with action `create` on the `meldingen` schema +- **THEN** the MCP response MUST contain an error indicating insufficient permissions + +#### Scenario: Bulk operations enforce per-object zaaktype permission +- **GIVEN** a user submits a bulk update request affecting 50 objects across 3 schemas +- **AND** the user has `update` on 2 of the 3 schemas +- **THEN** objects in authorized schemas MUST be updated +- **AND** objects in the unauthorized schema MUST be rejected with individual error entries +- **AND** a partial success response MUST be returned + +### Requirement: The frontend MUST render permission-aware UI components +The frontend application MUST adapt its UI based on the current user's zaaktype permissions, hiding or disabling actions the user cannot perform and omitting schemas the user cannot access. + +#### Scenario: Schema list filters based on user permissions +- **GIVEN** a register with 10 schemas (zaaktypen) +- **AND** the current user has `read` permission on 6 of them +- **WHEN** the user views the register's schema list in the UI +- **THEN** only the 6 accessible schemas MUST be displayed +- **AND** the 4 inaccessible schemas MUST NOT appear in navigation or listing + +#### Scenario: CRUD buttons disabled based on zaaktype permissions +- **GIVEN** a user has `read` on schema `vergunningen` but NOT `create` or `delete` +- **WHEN** the user views the vergunningen object list +- **THEN** the "New" / "Create" button MUST be hidden or disabled +- **AND** the "Delete" action on individual objects MUST be hidden or disabled +- **AND** the "Edit" action MUST be hidden or disabled (no `update` permission) + +#### Scenario: Form fields reflect property-level RBAC within a zaaktype +- **GIVEN** schema `zaken` has property `interneAantekening` with authorization: `{ "read": [{ "group": "redacteuren" }], "update": [{ "group": "redacteuren" }] }` +- **AND** the user is NOT in group `redacteuren` +- **WHEN** the user views a zaak object detail page +- **THEN** the `interneAantekening` field MUST NOT be rendered in the form +- **AND** `PropertyRbacHandler::filterReadableProperties()` MUST have omitted it from the API response + +#### Scenario: Confidentiality badge displayed for restricted objects +- **GIVEN** objects with varying `vertrouwelijkheidaanduiding` levels are displayed in a list +- **WHEN** the user views the list +- **THEN** each object MUST display a visual indicator of its confidentiality level (e.g., badge or icon) +- **AND** objects near the user's maximum clearance SHOULD display a warning indicator + +### Requirement: All zaaktype access decisions MUST be logged in the audit trail +Every access attempt (granted or denied) against a zaaktype-scoped schema MUST produce an audit trail entry for compliance with BIO (Baseline Informatiebeveiliging Overheid) and AVG requirements. + +#### Scenario: Permission grant event logged +- **GIVEN** admin grants `read,write` on schema `meldingen` to group `kcc-team` +- **THEN** an audit trail entry MUST be created with action `rbac.permission_granted` +- **AND** the entry MUST record the schema UUID, schema title, group name, permissions granted, and the admin user who made the change +- **AND** the entry MUST include a timestamp in ISO 8601 format + +#### Scenario: Permission revocation event logged +- **GIVEN** admin revokes `write` from group `kcc-team` on schema `meldingen` +- **THEN** an audit trail entry MUST be created with action `rbac.permission_revoked` +- **AND** existing sessions of affected users SHOULD have their cached permissions invalidated +- **AND** the audit entry MUST record the previous and new permission states + +#### Scenario: Access denied event logged +- **GIVEN** user `ongeautoriseerd` attempts to read objects from schema `vertrouwelijk` +- **AND** `ongeautoriseerd` has no permissions on `vertrouwelijk` +- **WHEN** the request is denied with HTTP 403 +- **THEN** an audit trail entry MUST be created with action `rbac.access_denied` +- **AND** the entry MUST record: user ID, schema, attempted action, timestamp, IP address +- **AND** the `confidentiality` field on the AuditTrail entity MUST reflect the schema's sensitivity + +#### Scenario: Bulk permission change produces individual audit entries +- **GIVEN** admin assigns permissions on 5 schemas to group `nieuwe-afdeling` in one bulk operation +- **THEN** 5 individual audit trail entries MUST be created (one per schema) +- **AND** each entry MUST be independently queryable + +#### Scenario: Audit trail for vertrouwelijkheidaanduiding-based denial +- **GIVEN** user `kcc-1` with maxVertrouwelijkheidaanduiding `intern` attempts to access object with `vertrouwelijkheidaanduiding: "vertrouwelijk"` +- **WHEN** the request is denied +- **THEN** the audit entry MUST record both the user's max level and the object's actual level +- **AND** the audit entry MUST indicate the denial reason as `confidentiality_level_exceeded` + +### Requirement: Bulk permission assignment MUST be supported for efficient onboarding +Administrators MUST be able to assign a permission template (a set of zaaktype permissions) to a group or user in a single operation, supporting department onboarding and role provisioning. + +#### Scenario: Assign permission template to a new department group +- **GIVEN** a permission template `kcc-standaard` defines: `{ "meldingen": ["read", "create"], "klachten": ["read", "create"], "producten": ["read"] }` +- **AND** a new group `kcc-den-haag` is created +- **WHEN** admin applies template `kcc-standaard` to group `kcc-den-haag` +- **THEN** the authorization blocks of schemas `meldingen`, `klachten`, and `producten` MUST be updated to include `kcc-den-haag` with the specified permissions +- **AND** a single bulk audit trail entry MUST be created referencing all affected schemas + +#### Scenario: Copy permissions from existing group +- **GIVEN** group `kcc-amsterdam` has permissions on 8 schemas +- **WHEN** admin copies all permissions from `kcc-amsterdam` to new group `kcc-rotterdam` +- **THEN** the authorization blocks of all 8 schemas MUST be updated to include `kcc-rotterdam` +- **AND** the permissions MUST be identical to `kcc-amsterdam`'s permissions on each schema + +#### Scenario: Revoke all permissions for a group across all schemas +- **GIVEN** group `vertrekkende-afdeling` has permissions on 12 schemas +- **WHEN** admin revokes all permissions for `vertrekkende-afdeling` +- **THEN** the authorization blocks of all 12 schemas MUST be updated to remove `vertrekkende-afdeling` +- **AND** 12 individual `rbac.permission_revoked` audit entries MUST be created + +### Requirement: Delegation and escalation patterns MUST be supported within zaaktype authorization +The system MUST support delegation (granting temporary access to another user) and escalation (elevating access for a specific case) within the zaaktype authorization framework. + +#### Scenario: Case-specific delegation to another user +- **GIVEN** user `behandelaar-1` is handling case `zaak-456` in schema `vergunningen` +- **AND** `behandelaar-1` delegates `zaak-456` to `collega-2` by updating the object's `_owner` or `assignedTo` field +- **WHEN** `collega-2` accesses `zaak-456` +- **THEN** access MUST be granted via the owner-based access rule in `PermissionHandler::hasGroupPermission()` (where `$objectOwner === $userId`) +- **AND** `collega-2` MUST still require `read` permission on the zaaktype schema to list other objects + +#### Scenario: Escalation to supervisor within same zaaktype +- **GIVEN** case `zaak-789` in schema `bezwaarschriften` needs supervisor review +- **AND** user `supervisor-1` is in group `bezwaarschriften-coordinator` +- **WHEN** `supervisor-1` accesses `zaak-789` +- **THEN** access MUST be granted via the coordinator group's schema-level authorization +- **AND** `supervisor-1` MUST be able to update the case status + +#### Scenario: Cross-zaaktype escalation with temporary delegation +- **GIVEN** case `zaak-101` in schema `vergunningen` requires legal review +- **AND** user `jurist-1` is in group `juridisch-team` which has permissions only on `bezwaarschriften` +- **WHEN** admin grants `jurist-1` temporary individual access to schema `vergunningen` with `read` permission +- **THEN** `jurist-1` MUST be able to read objects in `vergunningen` +- **AND** the delegation MUST NOT affect other users in `juridisch-team` + +### Requirement: ZGW Autorisaties API concepts MUST be mapped to OpenRegister primitives +The system MUST provide a clear mapping from ZGW Autorisaties API concepts (Applicatie, scope, maxVertrouwelijkheidaanduiding, heeftAlleAutorisaties) to OpenRegister's group-based RBAC model, ensuring compliance with VNG standards. + +#### Scenario: ZGW Applicatie maps to Consumer + Nextcloud user +- **GIVEN** a ZGW Applicatie with `clientIds: ["zaaksysteem-1"]` and `heeftAlleAutorisaties: false` +- **WHEN** configured in OpenRegister +- **THEN** a Consumer entity MUST be created with `authorizationType: jwt` and `userId` pointing to a dedicated Nextcloud user +- **AND** the Nextcloud user's group memberships MUST define the Applicatie's effective scopes + +#### Scenario: ZGW scope maps to Nextcloud group +- **GIVEN** the ZGW scopes: `zaken.lezen`, `zaken.aanmaken`, `zaken.bijwerken`, `zaken.verwijderen` +- **WHEN** configuring equivalent access in OpenRegister +- **THEN** Nextcloud groups SHALL be named to match the scope pattern (e.g., `zaken-lezen`, `zaken-aanmaken`) +- **AND** schema authorization blocks SHALL reference these groups: `{ "read": ["zaken-lezen"], "create": ["zaken-aanmaken"], "update": ["zaken-bijwerken"], "delete": ["zaken-verwijderen"] }` + +#### Scenario: ZGW heeftAlleAutorisaties maps to admin group +- **GIVEN** a ZGW Applicatie with `heeftAlleAutorisaties: true` +- **WHEN** the corresponding Nextcloud user is added to the `admin` group +- **THEN** `PermissionHandler::hasPermission()` MUST return `true` immediately for all schemas and actions +- **AND** `MagicRbacHandler::applyRbacFilters()` MUST return without adding WHERE clauses + +#### Scenario: ZGW maxVertrouwelijkheidaanduiding maps to conditional authorization +- **GIVEN** a ZGW Applicatie with autorisatie: `{ "zaaktype": "https://catalogi.nl/zaaktypen/uuid-1", "scopes": ["zaken.lezen"], "maxVertrouwelijkheidaanduiding": "zaakvertrouwelijk" }` +- **WHEN** configured in OpenRegister +- **THEN** the corresponding schema authorization MUST include a conditional match: `{ "group": "zaaksysteem-1-lezen", "match": { "vertrouwelijkheidaanduiding": { "$in": ["openbaar", "beperkt_openbaar", "intern", "zaakvertrouwelijk"] } } }` +- **AND** objects with vertrouwelijkheidaanduiding higher than `zaakvertrouwelijk` MUST be filtered at the database level + +#### Scenario: ZGW Autorisaties API compatibility endpoint +- **GIVEN** the system exposes ZGW-compatible API endpoints via the zgw-api-mapping spec +- **WHEN** an external system queries the equivalent of `/autorisaties/v1/applicaties` +- **THEN** the response MUST be translatable to ZGW Autorisaties API format via Twig mapping templates +- **AND** each Applicatie's scopes MUST reflect the Nextcloud user's effective group-based permissions + +### Requirement: Zaakcatalogus inheritance MUST be supported for zaaktype authorization defaults +When a register models a zaakcatalogus (catalog of zaaktypen), schemas (zaaktypen) within that catalogus SHALL be able to inherit default authorization rules from the catalogus level, with per-zaaktype overrides. + +#### Scenario: Schema inherits default authorization from register +- **GIVEN** register `zaakregistratie` has a default authorization policy: `{ "read": ["alle-medewerkers"], "create": ["behandelaars"] }` +- **AND** schema `standaard-zaak` has no explicit authorization block +- **WHEN** a user in `alle-medewerkers` reads `standaard-zaak` objects +- **THEN** the system MUST fall back to the register's default authorization +- **AND** access MUST be granted + +#### Scenario: Schema-level authorization overrides register defaults +- **GIVEN** register `zaakregistratie` has default authorization allowing `alle-medewerkers` to read +- **AND** schema `vertrouwelijk-zaaktype` has explicit authorization: `{ "read": ["directie"] }` +- **WHEN** a user in `alle-medewerkers` (but NOT `directie`) reads `vertrouwelijk-zaaktype` +- **THEN** the schema-level authorization MUST take precedence +- **AND** access MUST be denied with HTTP 403 + +#### Scenario: New zaaktype automatically inherits catalogus permissions +- **GIVEN** register `zaakregistratie` has default authorization rules +- **WHEN** a new schema is created in `zaakregistratie` without specifying authorization +- **THEN** the new schema MUST inherit the register's default authorization +- **AND** the inherited rules MUST be visible in the schema's authorization configuration + +### Requirement: Multi-tenant zaaktype isolation MUST restrict cross-tenant visibility +In multi-tenant deployments, zaaktype authorization MUST be combined with organisation-level isolation so that users can only access objects belonging to their active organisation AND matching their zaaktype permissions. + +#### Scenario: Same zaaktype, different organisations +- **GIVEN** schema `vergunningen` is used by organisations `gemeente-a` and `gemeente-b` +- **AND** user `behandelaar-a` (active org: `gemeente-a`) is in group `vergunningen-behandelaar` +- **AND** user `behandelaar-b` (active org: `gemeente-b`) is in group `vergunningen-behandelaar` +- **WHEN** `behandelaar-a` lists vergunningen +- **THEN** only vergunningen with `_organisation = gemeente-a` MUST be returned +- **AND** vergunningen from `gemeente-b` MUST NOT be visible + +#### Scenario: Cross-tenant zaaktype access for SaaS administrators +- **GIVEN** user `saas-admin` is in the `admin` group +- **WHEN** `saas-admin` lists vergunningen +- **THEN** vergunningen from ALL organisations MUST be returned +- **AND** `MultiTenancyTrait` MUST be bypassed for admin users + +#### Scenario: RBAC conditional rule with organisation scoping +- **GIVEN** schema `meldingen` has authorization: `{ "read": [{ "group": "behandelaars", "match": { "_organisation": "$organisation" } }] }` +- **AND** user `jan` is in `behandelaars` with active organisation `org-uuid-1` +- **WHEN** `jan` queries meldingen +- **THEN** `MagicRbacHandler::resolveDynamicValue('$organisation')` MUST return `org-uuid-1` +- **AND** the SQL condition MUST include `t._organisation = 'org-uuid-1'` +- **AND** multi-tenancy filtering and RBAC filtering MUST work together additively + +#### Scenario: Organisation switch changes effective zaaktype access +- **GIVEN** user `jan` is a member of two organisations: `gemeente-a` and `gemeente-b` +- **AND** `jan` has `vergunningen-behandelaar` permissions in both +- **WHEN** `jan` switches active organisation from `gemeente-a` to `gemeente-b` +- **THEN** subsequent queries MUST filter on `_organisation = gemeente-b` +- **AND** no data from `gemeente-a` MUST be returned + +### Requirement: Admin users MUST bypass all zaaktype authorization policies +Users with Nextcloud admin or OpenRegister admin role MUST have unrestricted access to all schemas and objects regardless of zaaktype-level authorization configuration. + +#### Scenario: Admin bypasses zaaktype RBAC +- **GIVEN** schema `vertrouwelijk` with access restricted to `directie` group +- **WHEN** a Nextcloud admin user accesses `vertrouwelijk` objects +- **THEN** all CRUD operations MUST succeed regardless of group membership +- **AND** `PermissionHandler::hasPermission()` MUST detect `in_array('admin', $userGroups)` and return `true` immediately + +#### Scenario: Admin sees all zaaktypen in schema listing +- **GIVEN** a register with 15 schemas, each with different authorization groups +- **WHEN** an admin user views the schema listing +- **THEN** all 15 schemas MUST be visible +- **AND** no RBAC filtering MUST be applied to the schema list + +#### Scenario: Admin bypasses vertrouwelijkheidaanduiding restrictions +- **GIVEN** objects with `vertrouwelijkheidaanduiding: "zeer_geheim"` +- **WHEN** an admin user queries these objects +- **THEN** all objects MUST be returned regardless of confidentiality level +- **AND** no SQL WHERE clause for confidentiality MUST be added + +### Requirement: VNG compliance testing MUST validate zaaktype authorization behavior +Automated tests MUST verify that the zaaktype-scoped RBAC implementation complies with ZGW Autorisaties API patterns, ensuring interoperability with other VNG-compliant systems. + +#### Scenario: Test zaaktype-scoped read filtering +- **GIVEN** a test register with 3 schemas and 3 groups with varying permissions +- **WHEN** the VNG compliance test suite runs +- **THEN** each user MUST only see objects from schemas they are authorized for +- **AND** the test MUST verify HTTP 403 for unauthorized schema access +- **AND** the test MUST verify that list endpoints return empty results (not 403) when the user has `read` permission but no objects exist + +#### Scenario: Test vertrouwelijkheidaanduiding filtering +- **GIVEN** objects at all 8 confidentiality levels in a single schema +- **AND** a user with maxVertrouwelijkheidaanduiding `intern` +- **WHEN** the compliance test runs +- **THEN** only objects with levels `openbaar`, `beperkt_openbaar`, and `intern` MUST be returned +- **AND** the test MUST verify exact count matches + +#### Scenario: Test heeftAlleAutorisaties (admin bypass) +- **GIVEN** a user mapped to the `admin` group +- **WHEN** the compliance test accesses all schemas and all confidentiality levels +- **THEN** all requests MUST succeed with HTTP 200 +- **AND** no authorization filtering MUST be applied + +#### Scenario: Test cross-zaaktype isolation between API consumers +- **GIVEN** two API consumers (Consumer entities) with different zaaktype permissions +- **WHEN** each consumer authenticates and queries the same register +- **THEN** each MUST only receive objects from their authorized schemas +- **AND** neither consumer MUST be able to infer the existence of unauthorized schemas from API responses + +## Current Implementation Status +- **Fully implemented -- schema-level RBAC**: `PermissionHandler` (`lib/Service/Object/PermissionHandler.php`) enforces authorization policies per schema. It checks group membership for CRUD operations and returns HTTP 403 for unauthorized access. The handler supports admin bypass via `in_array('admin', $userGroups)`, owner-based access via `$objectOwner === $userId`, and public/authenticated pseudo-groups. +- **Fully implemented -- property-level RBAC within zaaktype**: `PropertyRbacHandler` (`lib/Service/PropertyRbacHandler.php`) enforces field-level authorization within schemas, supporting read/update restrictions per property with conditional matching (group + match conditions). +- **Fully implemented -- database-level RBAC filtering**: `MagicRbacHandler` (`lib/Db/MagicMapper/MagicRbacHandler.php`) applies RBAC filters at the SQL query level with dynamic variable resolution (`$organisation`, `$userId`, `$now`), operator conditions (`$eq`, `$ne`, `$gt`, `$gte`, `$lt`, `$lte`, `$in`, `$nin`, `$exists`), ensuring unauthorized objects are never loaded into PHP memory. +- **Fully implemented -- admin bypass**: The `PermissionHandler` checks for admin group membership and bypasses all authorization checks for admin users. `PropertyRbacHandler::isAdmin()` and `MagicRbacHandler` also bypass filtering for admin users. +- **Fully implemented -- conditional authorization**: `ConditionMatcher` (`lib/Service/ConditionMatcher.php`) and `OperatorEvaluator` (`lib/Service/OperatorEvaluator.php`) evaluate conditional RBAC rules with organisation matching, user identity, and custom conditions. This enables vertrouwelijkheidaanduiding filtering via `$in` operator conditions. +- **Fully implemented -- multi-tenancy integration**: `MultiTenancyTrait` (`lib/Db/MultiTenancyTrait.php`) enforces organisation-scoped access alongside RBAC, providing tenant isolation per zaaktype. +- **Fully implemented -- schema authorization configuration**: `Schema` entity (`lib/Db/Schema.php`) stores authorization blocks defining group-based access rules per CRUD operation as JSON. +- **Fully implemented -- audit trail entity**: `AuditTrail` entity (`lib/Db/AuditTrail.php`) includes a `confidentiality` field for recording data sensitivity levels, supporting compliance logging. +- **Partially implemented -- audit trail for RBAC changes**: Audit trail exists for object changes (`AuditTrailController`) but specific `rbac.permission_granted`/`rbac.permission_revoked` events for authorization policy changes are not explicitly logged as discrete audit events. +- **Not implemented -- user-level overrides**: Individual user permissions independent of group membership are not directly supported. Users must be added to groups for authorization. Delegation is possible via object ownership (`_owner` field) but not via user-level permission grants on schemas. +- **Not implemented -- permission matrix UI**: No admin UI displaying a matrix of schemas vs groups with CRUD checkboxes exists. Schema authorization is configured via the schema editor JSON, not a dedicated matrix view. +- **Not implemented -- bulk permission assignment**: No template-based or copy-from-group permission assignment feature exists. Each schema's authorization must be configured individually. +- **Not implemented -- delegation with expiry**: Time-limited user-level permission grants are not supported. Delegation currently relies on object ownership transfer. +- **Not implemented -- register-level default authorization**: Schemas without authorization blocks default to open access; there is no register-level fallback configuration. +- **Not implemented -- VNG compliance test suite**: No automated test suite validates ZGW Autorisaties API compliance specifically. + +## Standards & References +- **ZGW Autorisaties API (VNG)** -- Dutch government authorization API standard defining Applicatie, scopes, maxVertrouwelijkheidaanduiding, and heeftAlleAutorisaties concepts. OpenRegister maps these to Consumer entities, Nextcloud groups, conditional match rules, and admin group membership respectively. +- **Vertrouwelijkheidaanduiding enum (ZGW Catalogi API)** -- 8-level confidentiality classification: `openbaar`, `beperkt_openbaar`, `intern`, `zaakvertrouwelijk`, `vertrouwelijk`, `confidentieel`, `geheim`, `zeer_geheim`. Enforced via conditional `$in` match rules on the vertrouwelijkheidaanduiding property. +- **BIO (Baseline Informatiebeveiliging Overheid)** -- Dutch government baseline information security standard requiring role-based access control, audit trails for access decisions, and confidentiality level enforcement. +- **AVG/GDPR** -- Data compartmentalization requirements mandating that personal data is only accessible to authorized roles with logged access decisions. +- **Nextcloud Group-based access control (IGroupManager)** -- Primary authorization primitive; group memberships drive all RBAC decisions. +- **OAuth 2.0 scopes (RFC 6749)** -- ZGW scopes map to Nextcloud groups which map to OAuth2 scopes in generated OAS (see rbac-scopes spec). +- **Common Ground principles** -- Role-based access in Dutch government systems following the Common Ground architecture. +- **NIST RBAC model (SP 800-162)** -- Reference model for role-based access control with role hierarchies and constraints. + +## Cross-References +- **`auth-system`** -- Defines the authentication layer (multi-auth, Consumer entity, CORS) that resolves identities before zaaktype RBAC is evaluated. The `PermissionHandler` depends on `IUserSession::getUser()` being set by `AuthorizationService`. +- **`rbac-scopes`** -- Maps Nextcloud groups to OAuth2 scopes in generated OAS and documents the ZGW Autorisaties mapping guide. The scope mapping depends on the group-based authorization configured per this spec. +- **`row-field-level-security`** -- Extends zaaktype-level RBAC with row-level security (filtering by field values like `_organisation`) and field-level security (property visibility per group). Uses `MagicRbacHandler` and `PropertyRbacHandler` which are also used for zaaktype RBAC. +- **`zgw-api-mapping`** -- Defines Twig-based field mapping between OpenRegister's English schema properties and ZGW Dutch API fields, including `vertrouwelijkheidaanduiding` enum value mapping via `zgw_enum` filter. +- **`audit-trail-immutable`** -- Provides the immutable audit trail infrastructure that zaaktype access events are logged to. + +## Specificity Assessment +- **Specific and largely implemented**: The core RBAC infrastructure (schema-level, property-level, database-level filtering, admin bypass, conditional matching with operators) is fully in place and supports zaaktype-scoped access control. +- **Well-defined ZGW mapping**: Clear mapping from ZGW Autorisaties API concepts (Applicatie, scope, maxVertrouwelijkheidaanduiding, heeftAlleAutorisaties) to OpenRegister primitives (Consumer, Nextcloud group, conditional match, admin group). +- **Vertrouwelijkheidaanduiding supported via existing operators**: The `$in` operator in conditional match rules already enables confidentiality-level filtering without new code -- only configuration documentation is needed. +- **Competitive parity with Dimpact ZAC**: ZAC's 51+ permissions across 5 policy domains are mapped to OpenRegister's schema-level + property-level authorization with conditional matching, avoiding the need for an external policy engine like OPA. +- **Missing implementations**: + - User-level overrides (delegation without group membership) -- design decision needed: store on schema vs. separate entity + - Permission matrix UI -- frontend development needed for a dedicated matrix view + - RBAC change audit events -- explicit `rbac.permission_granted`/`rbac.permission_revoked` logging + - Bulk permission assignment -- template/copy-from-group functionality + - Register-level default authorization inheritance + - Delegation with expiry -- time-limited permission grants + - VNG compliance test suite -- automated ZGW Autorisaties compatibility tests +- **Open questions**: + - Should user-level overrides be stored on the schema authorization block (as special `user:xxx` entries) or as a separate `SchemaUserPermission` entity? + - Should the permission matrix UI be a standalone page or integrated into the register detail view? + - Should RBAC policy changes be versioned for rollback capability? + - How should the register-level default authorization interact with explicit empty authorization blocks on schemas? diff --git a/openspec/changes/rbac-zaaktype/tasks.md b/openspec/changes/rbac-zaaktype/tasks.md new file mode 100644 index 00000000..700777ce --- /dev/null +++ b/openspec/changes/rbac-zaaktype/tasks.md @@ -0,0 +1,18 @@ +# Tasks: RBAC per Zaaktype + +- [ ] Implement: Authorization policies MUST be configurable per schema (zaaktype) +- [ ] Implement: Authorization policies MUST support user-level overrides for delegation +- [ ] Implement: Role-to-zaaktype mapping MUST support per-zaaktype role differentiation +- [ ] Implement: The system MUST enforce a zaaktype x operation x role permission matrix +- [ ] Implement: The system MUST support vertrouwelijkheidaanduiding (confidentiality levels) per zaaktype +- [ ] Implement: Cross-zaaktype access MUST be supported for coordinator and management roles +- [ ] Implement: Permission checks MUST apply to all API endpoints consistently +- [ ] Implement: The frontend MUST render permission-aware UI components +- [ ] Implement: All zaaktype access decisions MUST be logged in the audit trail +- [ ] Implement: Bulk permission assignment MUST be supported for efficient onboarding +- [ ] Implement: Delegation and escalation patterns MUST be supported within zaaktype authorization +- [ ] Implement: ZGW Autorisaties API concepts MUST be mapped to OpenRegister primitives +- [ ] Implement: Zaakcatalogus inheritance MUST be supported for zaaktype authorization defaults +- [ ] Implement: Multi-tenant zaaktype isolation MUST restrict cross-tenant visibility +- [ ] Implement: Admin users MUST bypass all zaaktype authorization policies +- [ ] Implement: VNG compliance testing MUST validate zaaktype authorization behavior diff --git a/openspec/coverage-report.json b/openspec/coverage-report.json new file mode 100644 index 00000000..c972d102 --- /dev/null +++ b/openspec/coverage-report.json @@ -0,0 +1,11550 @@ +{ + "generated_at": "2026-04-20T08:44:01Z", + "app": "procest", + "branch": "fix/header-info-email-phpcs", + "scanner_version": "1", + "scope": { + "php_files_scanned": 89, + "frontend_files_scanned": 183, + "php_methods_classified": 764, + "frontend_units_classified": 318, + "total_reqs": 331 + }, + "buckets": { + "annotated": [], + "plumbing": [ + { + "file": "lib/AppInfo/Application.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/BackgroundJob/AppointmentReminderJob.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/BackgroundJob/BerichtenboxReadStatusJob.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/BackgroundJob/ShareMaintenanceJob.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/Controller/AiController.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/Controller/AppointmentController.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/Controller/BerichtenboxController.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/Controller/CaseDefinitionController.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/Controller/CaseSharingController.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/Controller/ConsultationController.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/Controller/DashboardController.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/Controller/EmailController.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/Controller/GisProxyController.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/Controller/LegesController.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/Controller/PublicAppointmentController.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/Controller/PublicShareController.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/Controller/SettingsController.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/Controller/StufController.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/Controller/TemplateController.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/Controller/TenantController.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/Dashboard/CasesOverviewWidget.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/Dashboard/CasesOverviewWidget.php", + "method": "getId", + "reason": "dashboard-widget-boilerplate" + }, + { + "file": "lib/Dashboard/CasesOverviewWidget.php", + "method": "getTitle", + "reason": "dashboard-widget-boilerplate" + }, + { + "file": "lib/Dashboard/CasesOverviewWidget.php", + "method": "getOrder", + "reason": "dashboard-widget-boilerplate" + }, + { + "file": "lib/Dashboard/CasesOverviewWidget.php", + "method": "getIconClass", + "reason": "dashboard-widget-boilerplate" + }, + { + "file": "lib/Dashboard/CasesOverviewWidget.php", + "method": "getUrl", + "reason": "dashboard-widget-boilerplate" + }, + { + "file": "lib/Dashboard/CasesOverviewWidget.php", + "method": "load", + "reason": "dashboard-widget-boilerplate" + }, + { + "file": "lib/Dashboard/DeadlineAlertsWidget.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/Dashboard/DeadlineAlertsWidget.php", + "method": "getId", + "reason": "dashboard-widget-boilerplate" + }, + { + "file": "lib/Dashboard/DeadlineAlertsWidget.php", + "method": "getTitle", + "reason": "dashboard-widget-boilerplate" + }, + { + "file": "lib/Dashboard/DeadlineAlertsWidget.php", + "method": "getOrder", + "reason": "dashboard-widget-boilerplate" + }, + { + "file": "lib/Dashboard/DeadlineAlertsWidget.php", + "method": "getIconClass", + "reason": "dashboard-widget-boilerplate" + }, + { + "file": "lib/Dashboard/DeadlineAlertsWidget.php", + "method": "getUrl", + "reason": "dashboard-widget-boilerplate" + }, + { + "file": "lib/Dashboard/DeadlineAlertsWidget.php", + "method": "load", + "reason": "dashboard-widget-boilerplate" + }, + { + "file": "lib/Dashboard/MyTasksWidget.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/Dashboard/MyTasksWidget.php", + "method": "getId", + "reason": "dashboard-widget-boilerplate" + }, + { + "file": "lib/Dashboard/MyTasksWidget.php", + "method": "getTitle", + "reason": "dashboard-widget-boilerplate" + }, + { + "file": "lib/Dashboard/MyTasksWidget.php", + "method": "getOrder", + "reason": "dashboard-widget-boilerplate" + }, + { + "file": "lib/Dashboard/MyTasksWidget.php", + "method": "getIconClass", + "reason": "dashboard-widget-boilerplate" + }, + { + "file": "lib/Dashboard/MyTasksWidget.php", + "method": "getUrl", + "reason": "dashboard-widget-boilerplate" + }, + { + "file": "lib/Dashboard/MyTasksWidget.php", + "method": "load", + "reason": "dashboard-widget-boilerplate" + }, + { + "file": "lib/Dashboard/OverdueCasesWidget.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/Dashboard/OverdueCasesWidget.php", + "method": "getId", + "reason": "dashboard-widget-boilerplate" + }, + { + "file": "lib/Dashboard/OverdueCasesWidget.php", + "method": "getTitle", + "reason": "dashboard-widget-boilerplate" + }, + { + "file": "lib/Dashboard/OverdueCasesWidget.php", + "method": "getOrder", + "reason": "dashboard-widget-boilerplate" + }, + { + "file": "lib/Dashboard/OverdueCasesWidget.php", + "method": "getIconClass", + "reason": "dashboard-widget-boilerplate" + }, + { + "file": "lib/Dashboard/OverdueCasesWidget.php", + "method": "getUrl", + "reason": "dashboard-widget-boilerplate" + }, + { + "file": "lib/Dashboard/OverdueCasesWidget.php", + "method": "load", + "reason": "dashboard-widget-boilerplate" + }, + { + "file": "lib/Dashboard/StalledCasesWidget.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/Dashboard/StalledCasesWidget.php", + "method": "getId", + "reason": "dashboard-widget-boilerplate" + }, + { + "file": "lib/Dashboard/StalledCasesWidget.php", + "method": "getTitle", + "reason": "dashboard-widget-boilerplate" + }, + { + "file": "lib/Dashboard/StalledCasesWidget.php", + "method": "getOrder", + "reason": "dashboard-widget-boilerplate" + }, + { + "file": "lib/Dashboard/StalledCasesWidget.php", + "method": "getIconClass", + "reason": "dashboard-widget-boilerplate" + }, + { + "file": "lib/Dashboard/StalledCasesWidget.php", + "method": "getUrl", + "reason": "dashboard-widget-boilerplate" + }, + { + "file": "lib/Dashboard/StalledCasesWidget.php", + "method": "load", + "reason": "dashboard-widget-boilerplate" + }, + { + "file": "lib/Dashboard/StartCaseWidget.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/Dashboard/StartCaseWidget.php", + "method": "getId", + "reason": "dashboard-widget-boilerplate" + }, + { + "file": "lib/Dashboard/StartCaseWidget.php", + "method": "getTitle", + "reason": "dashboard-widget-boilerplate" + }, + { + "file": "lib/Dashboard/StartCaseWidget.php", + "method": "getOrder", + "reason": "dashboard-widget-boilerplate" + }, + { + "file": "lib/Dashboard/StartCaseWidget.php", + "method": "getIconClass", + "reason": "dashboard-widget-boilerplate" + }, + { + "file": "lib/Dashboard/StartCaseWidget.php", + "method": "getUrl", + "reason": "dashboard-widget-boilerplate" + }, + { + "file": "lib/Dashboard/StartCaseWidget.php", + "method": "load", + "reason": "dashboard-widget-boilerplate" + }, + { + "file": "lib/Dashboard/TaskRemindersWidget.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/Dashboard/TaskRemindersWidget.php", + "method": "getId", + "reason": "dashboard-widget-boilerplate" + }, + { + "file": "lib/Dashboard/TaskRemindersWidget.php", + "method": "getTitle", + "reason": "dashboard-widget-boilerplate" + }, + { + "file": "lib/Dashboard/TaskRemindersWidget.php", + "method": "getOrder", + "reason": "dashboard-widget-boilerplate" + }, + { + "file": "lib/Dashboard/TaskRemindersWidget.php", + "method": "getIconClass", + "reason": "dashboard-widget-boilerplate" + }, + { + "file": "lib/Dashboard/TaskRemindersWidget.php", + "method": "getUrl", + "reason": "dashboard-widget-boilerplate" + }, + { + "file": "lib/Dashboard/TaskRemindersWidget.php", + "method": "load", + "reason": "dashboard-widget-boilerplate" + }, + { + "file": "lib/Listener/DeepLinkRegistrationListener.php", + "method": "handle", + "reason": "listener-single-dispatch" + }, + { + "file": "lib/Middleware/TenantMiddleware.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/Middleware/ZgwAuthException.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/Middleware/ZgwAuthMiddleware.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/Service/AiService.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/Service/AppointmentBackend/AppointmentBackendInterface.php", + "method": "getTimeslots", + "reason": "interface-or-trait" + }, + { + "file": "lib/Service/AppointmentBackend/AppointmentBackendInterface.php", + "method": "bookAppointment", + "reason": "interface-or-trait" + }, + { + "file": "lib/Service/AppointmentBackend/AppointmentBackendInterface.php", + "method": "cancelAppointment", + "reason": "interface-or-trait" + }, + { + "file": "lib/Service/AppointmentBackend/AppointmentBackendInterface.php", + "method": "rescheduleAppointment", + "reason": "interface-or-trait" + }, + { + "file": "lib/Service/AppointmentBackend/JccBackend.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/Service/AppointmentBackend/LocalBackend.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/Service/AppointmentBackend/QmaticBackend.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/Service/AppointmentService.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/Service/BerichtenboxAdapter/BerichtenboxAdapterInterface.php", + "method": "sendMessage", + "reason": "interface-or-trait" + }, + { + "file": "lib/Service/BerichtenboxAdapter/BerichtenboxAdapterInterface.php", + "method": "getReadStatus", + "reason": "interface-or-trait" + }, + { + "file": "lib/Service/BerichtenboxAdapter/MockAdapter.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/Service/BerichtenboxService.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/Service/CaseDefinitionExportService.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/Service/CaseDefinitionImportService.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/Service/CaseEmailService.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/Service/CaseSharingService.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/Service/CaseTransferService.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/Service/ConsultationService.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/Service/DsoIntakeService.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/Service/GisProxyService.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/Service/LegesCalculationService.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/Service/LegesExportService.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/Service/NotificatieService.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/Service/SettingsService.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/Service/StufFieldMappingService.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/Service/StufMessageBuilder.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/Service/TemplateLibraryService.php", + "method": "__construct", + "reason": "magic-method" + }, + { + "file": "lib/Service/TenantService.php", + "method": "__construct", + "reason": "magic-method" + } + ], + "bucket_1": [ + { + "file": "lib/AppInfo/Application.php", + "method": "register", + "class": "Application", + "visibility": "public", + "capability": "procest-app-scaffold", + "req_id": "REQ-001", + "req_title": "1: App MUST be a valid Nextcloud app with proper metadata", + "confidence": 0.95, + "needs_review": false, + "signal": "explicit: Application::register = NC app registration boot (REQ-001)", + "inherits_from": null + }, + { + "file": "lib/AppInfo/Application.php", + "method": "boot", + "class": "Application", + "visibility": "public", + "capability": "procest-app-scaffold", + "req_id": "REQ-001", + "req_title": "1: App MUST be a valid Nextcloud app with proper metadata", + "confidence": 0.95, + "needs_review": false, + "signal": "explicit: Application::boot = NC app boot hook", + "inherits_from": null + }, + { + "file": "lib/Controller/AcController.php", + "method": "__construct", + "class": "AcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-007", + "req_title": "NRC (Notificaties API) compatibility MUST be supported", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: AcController=AC API", + "inherits_from": null + }, + { + "file": "lib/Controller/AcController.php", + "method": "index", + "class": "AcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-007", + "req_title": "NRC (Notificaties API) compatibility MUST be supported", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: AcController=AC API", + "inherits_from": null + }, + { + "file": "lib/Controller/AcController.php", + "method": "create", + "class": "AcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-007", + "req_title": "NRC (Notificaties API) compatibility MUST be supported", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: AcController=AC API", + "inherits_from": null + }, + { + "file": "lib/Controller/AcController.php", + "method": "show", + "class": "AcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-007", + "req_title": "NRC (Notificaties API) compatibility MUST be supported", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: AcController=AC API", + "inherits_from": null + }, + { + "file": "lib/Controller/AcController.php", + "method": "update", + "class": "AcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-007", + "req_title": "NRC (Notificaties API) compatibility MUST be supported", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: AcController=AC API", + "inherits_from": null + }, + { + "file": "lib/Controller/AcController.php", + "method": "patch", + "class": "AcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-007", + "req_title": "NRC (Notificaties API) compatibility MUST be supported", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: AcController=AC API", + "inherits_from": null + }, + { + "file": "lib/Controller/AcController.php", + "method": "destroy", + "class": "AcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-007", + "req_title": "NRC (Notificaties API) compatibility MUST be supported", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: AcController=AC API", + "inherits_from": null + }, + { + "file": "lib/Controller/BrcController.php", + "method": "__construct", + "class": "BrcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-006", + "req_title": "BRC (Besluiten API) resources MUST be mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: BrcController=BRC API, REQ-006 covers BRC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/BrcController.php", + "method": "index", + "class": "BrcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-006", + "req_title": "BRC (Besluiten API) resources MUST be mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: BrcController=BRC API, REQ-006 covers BRC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/BrcController.php", + "method": "create", + "class": "BrcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-006", + "req_title": "BRC (Besluiten API) resources MUST be mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: BrcController=BRC API, REQ-006 covers BRC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/BrcController.php", + "method": "show", + "class": "BrcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-006", + "req_title": "BRC (Besluiten API) resources MUST be mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: BrcController=BRC API, REQ-006 covers BRC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/BrcController.php", + "method": "update", + "class": "BrcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-006", + "req_title": "BRC (Besluiten API) resources MUST be mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: BrcController=BRC API, REQ-006 covers BRC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/BrcController.php", + "method": "patch", + "class": "BrcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-006", + "req_title": "BRC (Besluiten API) resources MUST be mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: BrcController=BRC API, REQ-006 covers BRC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/BrcController.php", + "method": "destroy", + "class": "BrcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-006", + "req_title": "BRC (Besluiten API) resources MUST be mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: BrcController=BRC API, REQ-006 covers BRC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/BrcController.php", + "method": "audittrailIndex", + "class": "BrcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-006", + "req_title": "BRC (Besluiten API) resources MUST be mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: BrcController=BRC API, REQ-006 covers BRC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/BrcController.php", + "method": "audittrailShow", + "class": "BrcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-006", + "req_title": "BRC (Besluiten API) resources MUST be mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: BrcController=BRC API, REQ-006 covers BRC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/DashboardController.php", + "method": "page", + "class": "DashboardController", + "visibility": "public", + "capability": "procest-app-scaffold", + "req_id": "REQ-002", + "req_title": "2: App MUST provide a single-page application entry point", + "confidence": 0.93, + "needs_review": false, + "signal": "explicit: Vue SPA entry point (REQ-002)", + "inherits_from": null + }, + { + "file": "lib/Controller/DrcController.php", + "method": "__construct", + "class": "DrcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-005", + "req_title": "DRC (Documenten API) resources MUST be mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: DrcController=DRC API, REQ-005 covers DRC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/DrcController.php", + "method": "index", + "class": "DrcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-005", + "req_title": "DRC (Documenten API) resources MUST be mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: DrcController=DRC API, REQ-005 covers DRC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/DrcController.php", + "method": "create", + "class": "DrcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-005", + "req_title": "DRC (Documenten API) resources MUST be mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: DrcController=DRC API, REQ-005 covers DRC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/DrcController.php", + "method": "show", + "class": "DrcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-005", + "req_title": "DRC (Documenten API) resources MUST be mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: DrcController=DRC API, REQ-005 covers DRC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/DrcController.php", + "method": "update", + "class": "DrcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-005", + "req_title": "DRC (Documenten API) resources MUST be mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: DrcController=DRC API, REQ-005 covers DRC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/DrcController.php", + "method": "patch", + "class": "DrcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-005", + "req_title": "DRC (Documenten API) resources MUST be mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: DrcController=DRC API, REQ-005 covers DRC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/DrcController.php", + "method": "destroy", + "class": "DrcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-005", + "req_title": "DRC (Documenten API) resources MUST be mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: DrcController=DRC API, REQ-005 covers DRC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/DrcController.php", + "method": "download", + "class": "DrcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-005", + "req_title": "DRC (Documenten API) resources MUST be mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: DrcController=DRC API, REQ-005 covers DRC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/DrcController.php", + "method": "lock", + "class": "DrcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-005", + "req_title": "DRC (Documenten API) resources MUST be mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: DrcController=DRC API, REQ-005 covers DRC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/DrcController.php", + "method": "unlock", + "class": "DrcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-005", + "req_title": "DRC (Documenten API) resources MUST be mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: DrcController=DRC API, REQ-005 covers DRC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/DrcController.php", + "method": "audittrailIndex", + "class": "DrcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-005", + "req_title": "DRC (Documenten API) resources MUST be mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: DrcController=DRC API, REQ-005 covers DRC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/DrcController.php", + "method": "audittrailShow", + "class": "DrcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-005", + "req_title": "DRC (Documenten API) resources MUST be mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: DrcController=DRC API, REQ-005 covers DRC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/DrcController.php", + "method": "uploadChunk", + "class": "DrcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-005", + "req_title": "DRC (Documenten API) resources MUST be mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: DrcController=DRC API, REQ-005 covers DRC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/GisProxyController.php", + "method": "proxy", + "class": "GisProxyController", + "visibility": "public", + "capability": "wms-wfs-layers", + "req_id": "REQ-LAYER-03", + "req_title": "GIS Proxy Endpoint", + "confidence": 0.93, + "needs_review": false, + "signal": "name+path keyword match", + "inherits_from": null + }, + { + "file": "lib/Controller/HealthController.php", + "method": "__construct", + "class": "HealthController", + "visibility": "public", + "capability": "prometheus-metrics", + "req_id": "REQ-PROM-004", + "req_title": "Health Check Endpoint", + "confidence": 0.83, + "needs_review": true, + "signal": "explicit: Health endpoint helpers", + "inherits_from": null + }, + { + "file": "lib/Controller/HealthController.php", + "method": "index", + "class": "HealthController", + "visibility": "public", + "capability": "prometheus-metrics", + "req_id": "REQ-PROM-004", + "req_title": "Health Check Endpoint", + "confidence": 0.97, + "needs_review": false, + "signal": "explicit: /health endpoint", + "inherits_from": null + }, + { + "file": "lib/Controller/InspectionController.php", + "method": "__construct", + "class": "InspectionController", + "visibility": "public", + "capability": "inspection-checklists", + "req_id": "REQ-001", + "req_title": "Inspection checklist schema", + "confidence": 0.83, + "needs_review": true, + "signal": "explicit: Inspection controller methods", + "inherits_from": null + }, + { + "file": "lib/Controller/InspectionController.php", + "method": "index", + "class": "InspectionController", + "visibility": "public", + "capability": "inspection-checklists", + "req_id": "REQ-001", + "req_title": "Inspection checklist schema", + "confidence": 0.83, + "needs_review": true, + "signal": "explicit: Inspection controller methods", + "inherits_from": null + }, + { + "file": "lib/Controller/InspectionController.php", + "method": "captureLocation", + "class": "InspectionController", + "visibility": "public", + "capability": "inspection-checklists", + "req_id": "REQ-001", + "req_title": "Inspection checklist schema", + "confidence": 0.83, + "needs_review": true, + "signal": "explicit: Inspection controller methods", + "inherits_from": null + }, + { + "file": "lib/Controller/InspectionController.php", + "method": "completeChecklistItem", + "class": "InspectionController", + "visibility": "public", + "capability": "inspection-checklists", + "req_id": "REQ-001", + "req_title": "Inspection checklist schema", + "confidence": 0.83, + "needs_review": true, + "signal": "explicit: Inspection controller methods", + "inherits_from": null + }, + { + "file": "lib/Controller/InspectionController.php", + "method": "addPhoto", + "class": "InspectionController", + "visibility": "public", + "capability": "inspection-checklists", + "req_id": "REQ-001", + "req_title": "Inspection checklist schema", + "confidence": 0.83, + "needs_review": true, + "signal": "explicit: Inspection controller methods", + "inherits_from": null + }, + { + "file": "lib/Controller/InspectionController.php", + "method": "complete", + "class": "InspectionController", + "visibility": "public", + "capability": "inspection-checklists", + "req_id": "REQ-001", + "req_title": "Inspection checklist schema", + "confidence": 0.83, + "needs_review": true, + "signal": "explicit: Inspection controller methods", + "inherits_from": null + }, + { + "file": "lib/Controller/MetricsController.php", + "method": "__construct", + "class": "MetricsController", + "visibility": "public", + "capability": "prometheus-metrics", + "req_id": "REQ-PROM-001", + "req_title": "Metrics Endpoint", + "confidence": 0.83, + "needs_review": true, + "signal": "explicit: Metrics endpoint helpers \u2014 private fall back here via Pass B", + "inherits_from": null + }, + { + "file": "lib/Controller/MetricsController.php", + "method": "index", + "class": "MetricsController", + "visibility": "public", + "capability": "prometheus-metrics", + "req_id": "REQ-PROM-001", + "req_title": "Metrics Endpoint", + "confidence": 0.97, + "needs_review": false, + "signal": "explicit: /metrics endpoint", + "inherits_from": null + }, + { + "file": "lib/Controller/MilestoneController.php", + "method": "__construct", + "class": "MilestoneController", + "visibility": "public", + "capability": "doorlooptijd-dashboard", + "req_id": "REQ-006", + "req_title": "Average processing time per case type table [V1]", + "confidence": 0.8, + "needs_review": true, + "signal": "explicit: Milestone endpoints", + "inherits_from": null + }, + { + "file": "lib/Controller/MilestoneController.php", + "method": "progress", + "class": "MilestoneController", + "visibility": "public", + "capability": "doorlooptijd-dashboard", + "req_id": "REQ-006", + "req_title": "Average processing time per case type table [V1]", + "confidence": 0.8, + "needs_review": true, + "signal": "explicit: Milestone endpoints", + "inherits_from": null + }, + { + "file": "lib/Controller/MilestoneController.php", + "method": "mark", + "class": "MilestoneController", + "visibility": "public", + "capability": "doorlooptijd-dashboard", + "req_id": "REQ-006", + "req_title": "Average processing time per case type table [V1]", + "confidence": 0.8, + "needs_review": true, + "signal": "explicit: Milestone endpoints", + "inherits_from": null + }, + { + "file": "lib/Controller/MilestoneController.php", + "method": "reverse", + "class": "MilestoneController", + "visibility": "public", + "capability": "doorlooptijd-dashboard", + "req_id": "REQ-006", + "req_title": "Average processing time per case type table [V1]", + "confidence": 0.8, + "needs_review": true, + "signal": "explicit: Milestone endpoints", + "inherits_from": null + }, + { + "file": "lib/Controller/NrcController.php", + "method": "__construct", + "class": "NrcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-008", + "req_title": "Bidirectional mapping MUST support both inbound and outbound transformations", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: NrcController=NRC API", + "inherits_from": null + }, + { + "file": "lib/Controller/NrcController.php", + "method": "index", + "class": "NrcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-008", + "req_title": "Bidirectional mapping MUST support both inbound and outbound transformations", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: NrcController=NRC API", + "inherits_from": null + }, + { + "file": "lib/Controller/NrcController.php", + "method": "create", + "class": "NrcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-008", + "req_title": "Bidirectional mapping MUST support both inbound and outbound transformations", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: NrcController=NRC API", + "inherits_from": null + }, + { + "file": "lib/Controller/NrcController.php", + "method": "show", + "class": "NrcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-008", + "req_title": "Bidirectional mapping MUST support both inbound and outbound transformations", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: NrcController=NRC API", + "inherits_from": null + }, + { + "file": "lib/Controller/NrcController.php", + "method": "update", + "class": "NrcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-008", + "req_title": "Bidirectional mapping MUST support both inbound and outbound transformations", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: NrcController=NRC API", + "inherits_from": null + }, + { + "file": "lib/Controller/NrcController.php", + "method": "patch", + "class": "NrcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-008", + "req_title": "Bidirectional mapping MUST support both inbound and outbound transformations", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: NrcController=NRC API", + "inherits_from": null + }, + { + "file": "lib/Controller/NrcController.php", + "method": "destroy", + "class": "NrcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-008", + "req_title": "Bidirectional mapping MUST support both inbound and outbound transformations", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: NrcController=NRC API", + "inherits_from": null + }, + { + "file": "lib/Controller/NrcController.php", + "method": "notificatieCreate", + "class": "NrcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-008", + "req_title": "Bidirectional mapping MUST support both inbound and outbound transformations", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: NrcController=NRC API", + "inherits_from": null + }, + { + "file": "lib/Controller/NrcController.php", + "method": "audittrailIndex", + "class": "NrcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-008", + "req_title": "Bidirectional mapping MUST support both inbound and outbound transformations", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: NrcController=NRC API", + "inherits_from": null + }, + { + "file": "lib/Controller/NrcController.php", + "method": "audittrailShow", + "class": "NrcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-008", + "req_title": "Bidirectional mapping MUST support both inbound and outbound transformations", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: NrcController=NRC API", + "inherits_from": null + }, + { + "file": "lib/Controller/ParaferingController.php", + "method": "__construct", + "class": "ParaferingController", + "visibility": "public", + "capability": "parafering-actions", + "req_id": "REQ-002", + "req_title": "Paraferen Action (Approve)", + "confidence": 0.78, + "needs_review": true, + "signal": "explicit: Parafering controller", + "inherits_from": null + }, + { + "file": "lib/Controller/ParaferingController.php", + "method": "createVoorstel", + "class": "ParaferingController", + "visibility": "public", + "capability": "voorstel-management", + "req_id": "REQ-002", + "req_title": "Create Voorstel from Case", + "confidence": 0.9, + "needs_review": false, + "signal": "explicit: Create voorstel from case", + "inherits_from": null + }, + { + "file": "lib/Controller/ParaferingController.php", + "method": "startParafering", + "class": "ParaferingController", + "visibility": "public", + "capability": "parafering-actions", + "req_id": "REQ-002", + "req_title": "Paraferen Action (Approve)", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: Parafering route start", + "inherits_from": null + }, + { + "file": "lib/Controller/ParaferingController.php", + "method": "paraferen", + "class": "ParaferingController", + "visibility": "public", + "capability": "parafering-actions", + "req_id": "REQ-002", + "req_title": "Paraferen Action (Approve)", + "confidence": 0.78, + "needs_review": true, + "signal": "explicit: Parafering controller", + "inherits_from": null + }, + { + "file": "lib/Controller/ParaferingController.php", + "method": "terugsturen", + "class": "ParaferingController", + "visibility": "public", + "capability": "parafering-actions", + "req_id": "REQ-002", + "req_title": "Paraferen Action (Approve)", + "confidence": 0.78, + "needs_review": true, + "signal": "explicit: Parafering controller", + "inherits_from": null + }, + { + "file": "lib/Controller/ParaferingController.php", + "method": "adviseren", + "class": "ParaferingController", + "visibility": "public", + "capability": "parafering-actions", + "req_id": "REQ-002", + "req_title": "Paraferen Action (Approve)", + "confidence": 0.78, + "needs_review": true, + "signal": "explicit: Parafering controller", + "inherits_from": null + }, + { + "file": "lib/Controller/ParaferingController.php", + "method": "auditTrail", + "class": "ParaferingController", + "visibility": "public", + "capability": "parafering-actions", + "req_id": "REQ-002", + "req_title": "Paraferen Action (Approve)", + "confidence": 0.78, + "needs_review": true, + "signal": "explicit: Parafering controller", + "inherits_from": null + }, + { + "file": "lib/Controller/ZgwMappingController.php", + "method": "__construct", + "class": "ZgwMappingController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: ZGW mapping admin endpoints", + "inherits_from": null + }, + { + "file": "lib/Controller/ZgwMappingController.php", + "method": "index", + "class": "ZgwMappingController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: ZGW mapping admin endpoints", + "inherits_from": null + }, + { + "file": "lib/Controller/ZgwMappingController.php", + "method": "show", + "class": "ZgwMappingController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: ZGW mapping admin endpoints", + "inherits_from": null + }, + { + "file": "lib/Controller/ZgwMappingController.php", + "method": "update", + "class": "ZgwMappingController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: ZGW mapping admin endpoints", + "inherits_from": null + }, + { + "file": "lib/Controller/ZgwMappingController.php", + "method": "destroy", + "class": "ZgwMappingController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: ZGW mapping admin endpoints", + "inherits_from": null + }, + { + "file": "lib/Controller/ZgwMappingController.php", + "method": "reset", + "class": "ZgwMappingController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: ZGW mapping admin endpoints", + "inherits_from": null + }, + { + "file": "lib/Controller/ZrcController.php", + "method": "__construct", + "class": "ZrcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-003", + "req_title": "ZRC (Zaken API) resources MUST be fully mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: ZrcController=ZRC API, REQ-003 covers ZRC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/ZrcController.php", + "method": "index", + "class": "ZrcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-003", + "req_title": "ZRC (Zaken API) resources MUST be fully mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: ZrcController=ZRC API, REQ-003 covers ZRC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/ZrcController.php", + "method": "create", + "class": "ZrcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-003", + "req_title": "ZRC (Zaken API) resources MUST be fully mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: ZrcController=ZRC API, REQ-003 covers ZRC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/ZrcController.php", + "method": "show", + "class": "ZrcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-003", + "req_title": "ZRC (Zaken API) resources MUST be fully mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: ZrcController=ZRC API, REQ-003 covers ZRC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/ZrcController.php", + "method": "update", + "class": "ZrcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-003", + "req_title": "ZRC (Zaken API) resources MUST be fully mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: ZrcController=ZRC API, REQ-003 covers ZRC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/ZrcController.php", + "method": "patch", + "class": "ZrcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-003", + "req_title": "ZRC (Zaken API) resources MUST be fully mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: ZrcController=ZRC API, REQ-003 covers ZRC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/ZrcController.php", + "method": "destroy", + "class": "ZrcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-003", + "req_title": "ZRC (Zaken API) resources MUST be fully mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: ZrcController=ZRC API, REQ-003 covers ZRC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/ZrcController.php", + "method": "zaakeigenschappenIndex", + "class": "ZrcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-003", + "req_title": "ZRC (Zaken API) resources MUST be fully mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: ZrcController=ZRC API, REQ-003 covers ZRC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/ZrcController.php", + "method": "zaakeigenschappenCreate", + "class": "ZrcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-003", + "req_title": "ZRC (Zaken API) resources MUST be fully mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: ZrcController=ZRC API, REQ-003 covers ZRC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/ZrcController.php", + "method": "zaakeigenschappenShow", + "class": "ZrcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-003", + "req_title": "ZRC (Zaken API) resources MUST be fully mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: ZrcController=ZRC API, REQ-003 covers ZRC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/ZrcController.php", + "method": "zaakeigenschappenUpdate", + "class": "ZrcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-003", + "req_title": "ZRC (Zaken API) resources MUST be fully mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: ZrcController=ZRC API, REQ-003 covers ZRC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/ZrcController.php", + "method": "zaakeigenschappenPatch", + "class": "ZrcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-003", + "req_title": "ZRC (Zaken API) resources MUST be fully mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: ZrcController=ZRC API, REQ-003 covers ZRC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/ZrcController.php", + "method": "zaakeigenschappenDestroy", + "class": "ZrcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-003", + "req_title": "ZRC (Zaken API) resources MUST be fully mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: ZrcController=ZRC API, REQ-003 covers ZRC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/ZrcController.php", + "method": "zaakbesluitenIndex", + "class": "ZrcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-003", + "req_title": "ZRC (Zaken API) resources MUST be fully mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: ZrcController=ZRC API, REQ-003 covers ZRC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/ZrcController.php", + "method": "zoek", + "class": "ZrcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-003", + "req_title": "ZRC (Zaken API) resources MUST be fully mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: ZrcController=ZRC API, REQ-003 covers ZRC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/ZrcController.php", + "method": "audittrailIndex", + "class": "ZrcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-003", + "req_title": "ZRC (Zaken API) resources MUST be fully mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: ZrcController=ZRC API, REQ-003 covers ZRC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/ZrcController.php", + "method": "audittrailShow", + "class": "ZrcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-003", + "req_title": "ZRC (Zaken API) resources MUST be fully mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: ZrcController=ZRC API, REQ-003 covers ZRC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/ZtcController.php", + "method": "__construct", + "class": "ZtcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-004", + "req_title": "ZTC (Catalogi API) resources MUST be fully mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: ZtcController=ZTC API, REQ-004 covers ZTC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/ZtcController.php", + "method": "index", + "class": "ZtcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-004", + "req_title": "ZTC (Catalogi API) resources MUST be fully mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: ZtcController=ZTC API, REQ-004 covers ZTC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/ZtcController.php", + "method": "create", + "class": "ZtcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-004", + "req_title": "ZTC (Catalogi API) resources MUST be fully mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: ZtcController=ZTC API, REQ-004 covers ZTC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/ZtcController.php", + "method": "show", + "class": "ZtcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-004", + "req_title": "ZTC (Catalogi API) resources MUST be fully mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: ZtcController=ZTC API, REQ-004 covers ZTC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/ZtcController.php", + "method": "update", + "class": "ZtcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-004", + "req_title": "ZTC (Catalogi API) resources MUST be fully mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: ZtcController=ZTC API, REQ-004 covers ZTC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/ZtcController.php", + "method": "patch", + "class": "ZtcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-004", + "req_title": "ZTC (Catalogi API) resources MUST be fully mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: ZtcController=ZTC API, REQ-004 covers ZTC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/ZtcController.php", + "method": "destroy", + "class": "ZtcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-004", + "req_title": "ZTC (Catalogi API) resources MUST be fully mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: ZtcController=ZTC API, REQ-004 covers ZTC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/ZtcController.php", + "method": "publishZaaktype", + "class": "ZtcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-004", + "req_title": "ZTC (Catalogi API) resources MUST be fully mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: ZtcController=ZTC API, REQ-004 covers ZTC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/ZtcController.php", + "method": "publishBesluittype", + "class": "ZtcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-004", + "req_title": "ZTC (Catalogi API) resources MUST be fully mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: ZtcController=ZTC API, REQ-004 covers ZTC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/ZtcController.php", + "method": "publishInformatieobjecttype", + "class": "ZtcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-004", + "req_title": "ZTC (Catalogi API) resources MUST be fully mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: ZtcController=ZTC API, REQ-004 covers ZTC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/ZtcController.php", + "method": "audittrailIndex", + "class": "ZtcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-004", + "req_title": "ZTC (Catalogi API) resources MUST be fully mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: ZtcController=ZTC API, REQ-004 covers ZTC mappability", + "inherits_from": null + }, + { + "file": "lib/Controller/ZtcController.php", + "method": "audittrailShow", + "class": "ZtcController", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-004", + "req_title": "ZTC (Catalogi API) resources MUST be fully mappable", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: ZtcController=ZTC API, REQ-004 covers ZTC mappability", + "inherits_from": null + }, + { + "file": "lib/Repair/InitializeSettings.php", + "method": "__construct", + "class": "InitializeSettings", + "visibility": "public", + "capability": "procest-app-scaffold", + "req_id": "REQ-006", + "req_title": "6: App MUST provide admin settings page", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: Settings initialization on install", + "inherits_from": null + }, + { + "file": "lib/Repair/InitializeSettings.php", + "method": "getName", + "class": "InitializeSettings", + "visibility": "public", + "capability": "procest-app-scaffold", + "req_id": "REQ-006", + "req_title": "6: App MUST provide admin settings page", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: Settings initialization on install", + "inherits_from": null + }, + { + "file": "lib/Repair/InitializeSettings.php", + "method": "run", + "class": "InitializeSettings", + "visibility": "public", + "capability": "procest-app-scaffold", + "req_id": "REQ-006", + "req_title": "6: App MUST provide admin settings page", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: Settings initialization on install", + "inherits_from": null + }, + { + "file": "lib/Repair/LoadDefaultZgwMappings.php", + "method": "__construct", + "class": "LoadDefaultZgwMappings", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.9, + "needs_review": false, + "signal": "explicit: Seeds default ZGW mappings on install", + "inherits_from": null + }, + { + "file": "lib/Repair/LoadDefaultZgwMappings.php", + "method": "getName", + "class": "LoadDefaultZgwMappings", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.9, + "needs_review": false, + "signal": "explicit: Seeds default ZGW mappings on install", + "inherits_from": null + }, + { + "file": "lib/Repair/LoadDefaultZgwMappings.php", + "method": "run", + "class": "LoadDefaultZgwMappings", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.9, + "needs_review": false, + "signal": "explicit: Seeds default ZGW mappings on install", + "inherits_from": null + }, + { + "file": "lib/Repair/LoadDefaultZgwMappings.php", + "method": "getDefaultMappings", + "class": "LoadDefaultZgwMappings", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.9, + "needs_review": false, + "signal": "explicit: Seeds default ZGW mappings on install", + "inherits_from": null + }, + { + "file": "lib/Repair/SeedBezwaarBeroepData.php", + "method": "__construct", + "class": "SeedBezwaarBeroepData", + "visibility": "public", + "capability": "vth-case-type-seed", + "req_id": "REQ-001", + "req_title": "VTH case type seed data for Vergunningen", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: Seed repair step", + "inherits_from": null + }, + { + "file": "lib/Repair/SeedBezwaarBeroepData.php", + "method": "getName", + "class": "SeedBezwaarBeroepData", + "visibility": "public", + "capability": "vth-case-type-seed", + "req_id": "REQ-001", + "req_title": "VTH case type seed data for Vergunningen", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: Seed repair step", + "inherits_from": null + }, + { + "file": "lib/Repair/SeedBezwaarBeroepData.php", + "method": "run", + "class": "SeedBezwaarBeroepData", + "visibility": "public", + "capability": "vth-case-type-seed", + "req_id": "REQ-001", + "req_title": "VTH case type seed data for Vergunningen", + "confidence": 0.92, + "needs_review": false, + "signal": "explicit: Seed repair step", + "inherits_from": null + }, + { + "file": "lib/Sections/SettingsSection.php", + "method": "__construct", + "class": "SettingsSection", + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.95, + "needs_review": false, + "signal": "explicit: IIconSection implementation", + "inherits_from": null + }, + { + "file": "lib/Sections/SettingsSection.php", + "method": "getID", + "class": "SettingsSection", + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.95, + "needs_review": false, + "signal": "explicit: IIconSection implementation", + "inherits_from": null + }, + { + "file": "lib/Sections/SettingsSection.php", + "method": "getName", + "class": "SettingsSection", + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.95, + "needs_review": false, + "signal": "explicit: IIconSection implementation", + "inherits_from": null + }, + { + "file": "lib/Sections/SettingsSection.php", + "method": "getPriority", + "class": "SettingsSection", + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.95, + "needs_review": false, + "signal": "explicit: IIconSection implementation", + "inherits_from": null + }, + { + "file": "lib/Sections/SettingsSection.php", + "method": "getIcon", + "class": "SettingsSection", + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.95, + "needs_review": false, + "signal": "explicit: IIconSection implementation", + "inherits_from": null + }, + { + "file": "lib/Service/CaseEmailService.php", + "method": "extractCaseNumber", + "class": "CaseEmailService", + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.75, + "needs_review": true, + "signal": "name+path keyword match", + "inherits_from": null + }, + { + "file": "lib/Service/CaseEmailService.php", + "method": "getTemplatesForCaseType", + "class": "CaseEmailService", + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.75, + "needs_review": true, + "signal": "name+path keyword match", + "inherits_from": null + }, + { + "file": "lib/Service/ChecklistService.php", + "method": "__construct", + "class": "ChecklistService", + "visibility": "public", + "capability": "inspection-checklists", + "req_id": "REQ-001", + "req_title": "Inspection checklist schema", + "confidence": 0.82, + "needs_review": true, + "signal": "explicit: Checklist validation and progress", + "inherits_from": null + }, + { + "file": "lib/Service/ChecklistService.php", + "method": "completeItem", + "class": "ChecklistService", + "visibility": "public", + "capability": "inspection-checklists", + "req_id": "REQ-001", + "req_title": "Inspection checklist schema", + "confidence": 0.82, + "needs_review": true, + "signal": "explicit: Checklist validation and progress", + "inherits_from": null + }, + { + "file": "lib/Service/ChecklistService.php", + "method": "getProgress", + "class": "ChecklistService", + "visibility": "public", + "capability": "inspection-checklists", + "req_id": "REQ-001", + "req_title": "Inspection checklist schema", + "confidence": 0.82, + "needs_review": true, + "signal": "explicit: Checklist validation and progress", + "inherits_from": null + }, + { + "file": "lib/Service/ChecklistService.php", + "method": "validateCompletion", + "class": "ChecklistService", + "visibility": "public", + "capability": "inspection-checklists", + "req_id": "REQ-001", + "req_title": "Inspection checklist schema", + "confidence": 0.82, + "needs_review": true, + "signal": "explicit: Checklist validation and progress", + "inherits_from": null + }, + { + "file": "lib/Service/ChecklistService.php", + "method": "getConformitySummary", + "class": "ChecklistService", + "visibility": "public", + "capability": "inspection-checklists", + "req_id": "REQ-001", + "req_title": "Inspection checklist schema", + "confidence": 0.82, + "needs_review": true, + "signal": "explicit: Checklist validation and progress", + "inherits_from": null + }, + { + "file": "lib/Service/GisProxyService.php", + "method": "proxyRequest", + "class": "GisProxyService", + "visibility": "public", + "capability": "wms-wfs-layers", + "req_id": "REQ-LAYER-03", + "req_title": "GIS Proxy Endpoint", + "confidence": 0.93, + "needs_review": false, + "signal": "name+path keyword match", + "inherits_from": null + }, + { + "file": "lib/Service/InspectionService.php", + "method": "__construct", + "class": "InspectionService", + "visibility": "public", + "capability": "inspection-checklists", + "req_id": "REQ-003", + "req_title": "Inspection rapport creation", + "confidence": 0.83, + "needs_review": true, + "signal": "explicit: Inspection service methods", + "inherits_from": null + }, + { + "file": "lib/Service/InspectionService.php", + "method": "getInspections", + "class": "InspectionService", + "visibility": "public", + "capability": "inspection-checklists", + "req_id": "REQ-003", + "req_title": "Inspection rapport creation", + "confidence": 0.83, + "needs_review": true, + "signal": "explicit: Inspection service methods", + "inherits_from": null + }, + { + "file": "lib/Service/InspectionService.php", + "method": "captureLocation", + "class": "InspectionService", + "visibility": "public", + "capability": "inspection-checklists", + "req_id": "REQ-003", + "req_title": "Inspection rapport creation", + "confidence": 0.83, + "needs_review": true, + "signal": "explicit: Inspection service methods", + "inherits_from": null + }, + { + "file": "lib/Service/InspectionService.php", + "method": "addPhoto", + "class": "InspectionService", + "visibility": "public", + "capability": "inspection-checklists", + "req_id": "REQ-003", + "req_title": "Inspection rapport creation", + "confidence": 0.83, + "needs_review": true, + "signal": "explicit: Inspection service methods", + "inherits_from": null + }, + { + "file": "lib/Service/InspectionService.php", + "method": "completeInspection", + "class": "InspectionService", + "visibility": "public", + "capability": "inspection-checklists", + "req_id": "REQ-003", + "req_title": "Inspection rapport creation", + "confidence": 0.83, + "needs_review": true, + "signal": "explicit: Inspection service methods", + "inherits_from": null + }, + { + "file": "lib/Service/MilestoneService.php", + "method": "__construct", + "class": "MilestoneService", + "visibility": "public", + "capability": "doorlooptijd-dashboard", + "req_id": "REQ-006", + "req_title": "Average processing time per case type table [V1]", + "confidence": 0.8, + "needs_review": true, + "signal": "explicit: Milestones = doorloop milestones", + "inherits_from": null + }, + { + "file": "lib/Service/MilestoneService.php", + "method": "getMilestones", + "class": "MilestoneService", + "visibility": "public", + "capability": "doorlooptijd-dashboard", + "req_id": "REQ-006", + "req_title": "Average processing time per case type table [V1]", + "confidence": 0.8, + "needs_review": true, + "signal": "explicit: Milestones = doorloop milestones", + "inherits_from": null + }, + { + "file": "lib/Service/MilestoneService.php", + "method": "getCaseProgress", + "class": "MilestoneService", + "visibility": "public", + "capability": "doorlooptijd-dashboard", + "req_id": "REQ-006", + "req_title": "Average processing time per case type table [V1]", + "confidence": 0.8, + "needs_review": true, + "signal": "explicit: Milestones = doorloop milestones", + "inherits_from": null + }, + { + "file": "lib/Service/MilestoneService.php", + "method": "markMilestone", + "class": "MilestoneService", + "visibility": "public", + "capability": "doorlooptijd-dashboard", + "req_id": "REQ-006", + "req_title": "Average processing time per case type table [V1]", + "confidence": 0.8, + "needs_review": true, + "signal": "explicit: Milestones = doorloop milestones", + "inherits_from": null + }, + { + "file": "lib/Service/MilestoneService.php", + "method": "reverseMilestone", + "class": "MilestoneService", + "visibility": "public", + "capability": "doorlooptijd-dashboard", + "req_id": "REQ-006", + "req_title": "Average processing time per case type table [V1]", + "confidence": 0.8, + "needs_review": true, + "signal": "explicit: Milestones = doorloop milestones", + "inherits_from": null + }, + { + "file": "lib/Service/MilestoneService.php", + "method": "getDurationAnalytics", + "class": "MilestoneService", + "visibility": "public", + "capability": "doorlooptijd-dashboard", + "req_id": "REQ-006", + "req_title": "Average processing time per case type table [V1]", + "confidence": 0.8, + "needs_review": true, + "signal": "explicit: Milestones = doorloop milestones", + "inherits_from": null + }, + { + "file": "lib/Service/ParaferingNotificationService.php", + "method": "__construct", + "class": "ParaferingNotificationService", + "visibility": "public", + "capability": "parafering-actions", + "req_id": "REQ-002", + "req_title": "Paraferen Action (Approve)", + "confidence": 0.78, + "needs_review": true, + "signal": "explicit: Parafering notifications \u2014 NEEDS-REVIEW specific REQ", + "inherits_from": null + }, + { + "file": "lib/Service/ParaferingNotificationService.php", + "method": "notifyStepActivated", + "class": "ParaferingNotificationService", + "visibility": "public", + "capability": "parafering-actions", + "req_id": "REQ-002", + "req_title": "Paraferen Action (Approve)", + "confidence": 0.78, + "needs_review": true, + "signal": "explicit: Parafering notifications \u2014 NEEDS-REVIEW specific REQ", + "inherits_from": null + }, + { + "file": "lib/Service/ParaferingNotificationService.php", + "method": "notifyVoorstelReturned", + "class": "ParaferingNotificationService", + "visibility": "public", + "capability": "parafering-actions", + "req_id": "REQ-002", + "req_title": "Paraferen Action (Approve)", + "confidence": 0.78, + "needs_review": true, + "signal": "explicit: Parafering notifications \u2014 NEEDS-REVIEW specific REQ", + "inherits_from": null + }, + { + "file": "lib/Service/ParaferingNotificationService.php", + "method": "notifyParaferingReminder", + "class": "ParaferingNotificationService", + "visibility": "public", + "capability": "parafering-actions", + "req_id": "REQ-002", + "req_title": "Paraferen Action (Approve)", + "confidence": 0.78, + "needs_review": true, + "signal": "explicit: Parafering notifications \u2014 NEEDS-REVIEW specific REQ", + "inherits_from": null + }, + { + "file": "lib/Service/ParaferingService.php", + "method": "__construct", + "class": "ParaferingService", + "visibility": "public", + "capability": "parafering-actions", + "req_id": "REQ-002", + "req_title": "Paraferen Action (Approve)", + "confidence": 0.78, + "needs_review": true, + "signal": "explicit: Parafering service \u2014 specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "lib/Service/ParaferingService.php", + "method": "createVoorstel", + "class": "ParaferingService", + "visibility": "public", + "capability": "voorstel-management", + "req_id": "REQ-002", + "req_title": "Create Voorstel from Case", + "confidence": 0.9, + "needs_review": false, + "signal": "explicit: Create voorstel from case", + "inherits_from": null + }, + { + "file": "lib/Service/ParaferingService.php", + "method": "startParafering", + "class": "ParaferingService", + "visibility": "public", + "capability": "parafering-actions", + "req_id": "REQ-002", + "req_title": "Paraferen Action (Approve)", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: Parafering route start", + "inherits_from": null + }, + { + "file": "lib/Service/ParaferingService.php", + "method": "executeAction", + "class": "ParaferingService", + "visibility": "public", + "capability": "parafering-actions", + "req_id": "REQ-002", + "req_title": "Paraferen Action (Approve)", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: Parafering action execution", + "inherits_from": null + }, + { + "file": "lib/Service/ParaferingService.php", + "method": "getAuditTrail", + "class": "ParaferingService", + "visibility": "public", + "capability": "parafering-audit-trail", + "req_id": "REQ-001", + "req_title": "Immutable Parafering Audit Trail", + "confidence": 0.9, + "needs_review": false, + "signal": "explicit: Audit trail query", + "inherits_from": null + }, + { + "file": "lib/Service/ParaferingService.php", + "method": "getCurrentStep", + "class": "ParaferingService", + "visibility": "public", + "capability": "parafering-actions", + "req_id": "REQ-002", + "req_title": "Paraferen Action (Approve)", + "confidence": 0.78, + "needs_review": true, + "signal": "explicit: Parafering service \u2014 specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "lib/Service/ParaferingService.php", + "method": "overrideRoute", + "class": "ParaferingService", + "visibility": "public", + "capability": "parafering-actions", + "req_id": "REQ-002", + "req_title": "Paraferen Action (Approve)", + "confidence": 0.78, + "needs_review": true, + "signal": "explicit: Parafering service \u2014 specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "lib/Service/SeedDataService.php", + "method": "__construct", + "class": "SeedDataService", + "visibility": "public", + "capability": "vth-case-type-seed", + "req_id": "REQ-001", + "req_title": "VTH case type seed data for Vergunningen", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: Seed data service", + "inherits_from": null + }, + { + "file": "lib/Service/SeedDataService.php", + "method": "seedBezwaarBeroepData", + "class": "SeedDataService", + "visibility": "public", + "capability": "vth-case-type-seed", + "req_id": "REQ-001", + "req_title": "VTH case type seed data for Vergunningen", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: Seed data service", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwBusinessRulesService.php", + "method": "__construct", + "class": "ZgwBusinessRulesService", + "visibility": "public", + "capability": "zgw-business-rules-compliance", + "req_id": "ZRC-007", + "req_title": "Eindstatus and Zaak Closing", + "confidence": 0.78, + "needs_review": true, + "signal": "explicit: Business rules dispatcher \u2014 routes to *RulesService", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwBusinessRulesService.php", + "method": "validate", + "class": "ZgwBusinessRulesService", + "visibility": "public", + "capability": "zgw-business-rules-compliance", + "req_id": "ZRC-007", + "req_title": "Eindstatus and Zaak Closing", + "confidence": 0.78, + "needs_review": true, + "signal": "explicit: Business rules dispatcher \u2014 routes to *RulesService", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwDocumentService.php", + "method": "__construct", + "class": "ZgwDocumentService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-005", + "req_title": "DRC (Documenten API) resources MUST be mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "explicit: ZGW document handling (DRC mappability helpers)", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwDocumentService.php", + "method": "storeBase64", + "class": "ZgwDocumentService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-005", + "req_title": "DRC (Documenten API) resources MUST be mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "explicit: ZGW document handling (DRC mappability helpers)", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwDocumentService.php", + "method": "storeRaw", + "class": "ZgwDocumentService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-005", + "req_title": "DRC (Documenten API) resources MUST be mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "explicit: ZGW document handling (DRC mappability helpers)", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwDocumentService.php", + "method": "getContent", + "class": "ZgwDocumentService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-005", + "req_title": "DRC (Documenten API) resources MUST be mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "explicit: ZGW document handling (DRC mappability helpers)", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwDocumentService.php", + "method": "fileExists", + "class": "ZgwDocumentService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-005", + "req_title": "DRC (Documenten API) resources MUST be mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "explicit: ZGW document handling (DRC mappability helpers)", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwDocumentService.php", + "method": "deleteFiles", + "class": "ZgwDocumentService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-005", + "req_title": "DRC (Documenten API) resources MUST be mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "explicit: ZGW document handling (DRC mappability helpers)", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwDocumentService.php", + "method": "getMimeType", + "class": "ZgwDocumentService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-005", + "req_title": "DRC (Documenten API) resources MUST be mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "explicit: ZGW document handling (DRC mappability helpers)", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwDocumentService.php", + "method": "storeChunk", + "class": "ZgwDocumentService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-005", + "req_title": "DRC (Documenten API) resources MUST be mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "explicit: ZGW document handling (DRC mappability helpers)", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwDocumentService.php", + "method": "getUploadedChunks", + "class": "ZgwDocumentService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-005", + "req_title": "DRC (Documenten API) resources MUST be mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "explicit: ZGW document handling (DRC mappability helpers)", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwDocumentService.php", + "method": "mergeChunks", + "class": "ZgwDocumentService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-005", + "req_title": "DRC (Documenten API) resources MUST be mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "explicit: ZGW document handling (DRC mappability helpers)", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwMappingService.php", + "method": "__construct", + "class": "ZgwMappingService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: Explicit mapping-layer service", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwMappingService.php", + "method": "getMapping", + "class": "ZgwMappingService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: Explicit mapping-layer service", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwMappingService.php", + "method": "saveMapping", + "class": "ZgwMappingService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: Explicit mapping-layer service", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwMappingService.php", + "method": "listMappings", + "class": "ZgwMappingService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: Explicit mapping-layer service", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwMappingService.php", + "method": "deleteMapping", + "class": "ZgwMappingService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: Explicit mapping-layer service", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwMappingService.php", + "method": "getResourceKeys", + "class": "ZgwMappingService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: Explicit mapping-layer service", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwMappingService.php", + "method": "hasMapping", + "class": "ZgwMappingService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: Explicit mapping-layer service", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwMappingService.php", + "method": "resetToDefault", + "class": "ZgwMappingService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: Explicit mapping-layer service", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwPaginationHelper.php", + "method": "wrapResults", + "class": "ZgwPaginationHelper", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-002", + "req_title": "ZGW API routes MUST be exposed via OpenRegister's Endpoint system", + "confidence": 0.82, + "needs_review": true, + "signal": "explicit: ZGW pagination helper \u2014 covers REQ-002 endpoint system", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwRulesBase.php", + "method": "__construct", + "class": "ZgwRulesBase", + "visibility": "public", + "capability": "zgw-business-rules-compliance", + "req_id": "ZRC-007", + "req_title": "Eindstatus and Zaak Closing", + "confidence": 0.75, + "needs_review": true, + "signal": "explicit: Rules base class \u2014 shared helpers inherited by all rules services", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwRulesBase.php", + "method": "setContext", + "class": "ZgwRulesBase", + "visibility": "public", + "capability": "zgw-business-rules-compliance", + "req_id": "ZRC-007", + "req_title": "Eindstatus and Zaak Closing", + "confidence": 0.75, + "needs_review": true, + "signal": "explicit: Rules base class \u2014 shared helpers inherited by all rules services", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwService.php", + "method": "__construct", + "class": "ZgwService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-002", + "req_title": "ZGW API routes MUST be exposed via OpenRegister's Endpoint system", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: Central ZGW orchestrator \u2014 REQ-by-REQ mapping deferred to annotate", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwService.php", + "method": "getObjectService", + "class": "ZgwService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-002", + "req_title": "ZGW API routes MUST be exposed via OpenRegister's Endpoint system", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: Central ZGW orchestrator \u2014 REQ-by-REQ mapping deferred to annotate", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwService.php", + "method": "getConsumerMapper", + "class": "ZgwService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-002", + "req_title": "ZGW API routes MUST be exposed via OpenRegister's Endpoint system", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: Central ZGW orchestrator \u2014 REQ-by-REQ mapping deferred to annotate", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwService.php", + "method": "getZgwMappingService", + "class": "ZgwService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-002", + "req_title": "ZGW API routes MUST be exposed via OpenRegister's Endpoint system", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: Central ZGW orchestrator \u2014 REQ-by-REQ mapping deferred to annotate", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwService.php", + "method": "getPaginationHelper", + "class": "ZgwService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-002", + "req_title": "ZGW API routes MUST be exposed via OpenRegister's Endpoint system", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: Central ZGW orchestrator \u2014 REQ-by-REQ mapping deferred to annotate", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwService.php", + "method": "getDocumentService", + "class": "ZgwService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-002", + "req_title": "ZGW API routes MUST be exposed via OpenRegister's Endpoint system", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: Central ZGW orchestrator \u2014 REQ-by-REQ mapping deferred to annotate", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwService.php", + "method": "getBusinessRulesService", + "class": "ZgwService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-002", + "req_title": "ZGW API routes MUST be exposed via OpenRegister's Endpoint system", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: Central ZGW orchestrator \u2014 REQ-by-REQ mapping deferred to annotate", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwService.php", + "method": "getLogger", + "class": "ZgwService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-002", + "req_title": "ZGW API routes MUST be exposed via OpenRegister's Endpoint system", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: Central ZGW orchestrator \u2014 REQ-by-REQ mapping deferred to annotate", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwService.php", + "method": "loadMappingConfig", + "class": "ZgwService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-002", + "req_title": "ZGW API routes MUST be exposed via OpenRegister's Endpoint system", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: Central ZGW orchestrator \u2014 REQ-by-REQ mapping deferred to annotate", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwService.php", + "method": "translateQueryParams", + "class": "ZgwService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-002", + "req_title": "ZGW API routes MUST be exposed via OpenRegister's Endpoint system", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: Central ZGW orchestrator \u2014 REQ-by-REQ mapping deferred to annotate", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwService.php", + "method": "createOutboundMapping", + "class": "ZgwService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-002", + "req_title": "ZGW API routes MUST be exposed via OpenRegister's Endpoint system", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: Central ZGW orchestrator \u2014 REQ-by-REQ mapping deferred to annotate", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwService.php", + "method": "createInboundMapping", + "class": "ZgwService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-002", + "req_title": "ZGW API routes MUST be exposed via OpenRegister's Endpoint system", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: Central ZGW orchestrator \u2014 REQ-by-REQ mapping deferred to annotate", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwService.php", + "method": "applyOutboundMapping", + "class": "ZgwService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-002", + "req_title": "ZGW API routes MUST be exposed via OpenRegister's Endpoint system", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: Central ZGW orchestrator \u2014 REQ-by-REQ mapping deferred to annotate", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwService.php", + "method": "applyInboundMapping", + "class": "ZgwService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-002", + "req_title": "ZGW API routes MUST be exposed via OpenRegister's Endpoint system", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: Central ZGW orchestrator \u2014 REQ-by-REQ mapping deferred to annotate", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwService.php", + "method": "getRequestBody", + "class": "ZgwService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-002", + "req_title": "ZGW API routes MUST be exposed via OpenRegister's Endpoint system", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: Central ZGW orchestrator \u2014 REQ-by-REQ mapping deferred to annotate", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwService.php", + "method": "resolvePathUuid", + "class": "ZgwService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-002", + "req_title": "ZGW API routes MUST be exposed via OpenRegister's Endpoint system", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: Central ZGW orchestrator \u2014 REQ-by-REQ mapping deferred to annotate", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwService.php", + "method": "updateCachedBodyField", + "class": "ZgwService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-002", + "req_title": "ZGW API routes MUST be exposed via OpenRegister's Endpoint system", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: Central ZGW orchestrator \u2014 REQ-by-REQ mapping deferred to annotate", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwService.php", + "method": "buildBaseUrl", + "class": "ZgwService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-002", + "req_title": "ZGW API routes MUST be exposed via OpenRegister's Endpoint system", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: Central ZGW orchestrator \u2014 REQ-by-REQ mapping deferred to annotate", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwService.php", + "method": "validateJwtAuth", + "class": "ZgwService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-002", + "req_title": "ZGW API routes MUST be exposed via OpenRegister's Endpoint system", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: Central ZGW orchestrator \u2014 REQ-by-REQ mapping deferred to annotate", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwService.php", + "method": "consumerHasScope", + "class": "ZgwService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-002", + "req_title": "ZGW API routes MUST be exposed via OpenRegister's Endpoint system", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: Central ZGW orchestrator \u2014 REQ-by-REQ mapping deferred to annotate", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwService.php", + "method": "getConsumerAuthorisaties", + "class": "ZgwService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-002", + "req_title": "ZGW API routes MUST be exposed via OpenRegister's Endpoint system", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: Central ZGW orchestrator \u2014 REQ-by-REQ mapping deferred to annotate", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwService.php", + "method": "publishNotification", + "class": "ZgwService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-002", + "req_title": "ZGW API routes MUST be exposed via OpenRegister's Endpoint system", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: Central ZGW orchestrator \u2014 REQ-by-REQ mapping deferred to annotate", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwService.php", + "method": "buildValidationError", + "class": "ZgwService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-002", + "req_title": "ZGW API routes MUST be exposed via OpenRegister's Endpoint system", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: Central ZGW orchestrator \u2014 REQ-by-REQ mapping deferred to annotate", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwService.php", + "method": "unavailableResponse", + "class": "ZgwService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-002", + "req_title": "ZGW API routes MUST be exposed via OpenRegister's Endpoint system", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: Central ZGW orchestrator \u2014 REQ-by-REQ mapping deferred to annotate", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwService.php", + "method": "mappingNotFoundResponse", + "class": "ZgwService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-002", + "req_title": "ZGW API routes MUST be exposed via OpenRegister's Endpoint system", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: Central ZGW orchestrator \u2014 REQ-by-REQ mapping deferred to annotate", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwService.php", + "method": "handleIndex", + "class": "ZgwService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-002", + "req_title": "ZGW API routes MUST be exposed via OpenRegister's Endpoint system", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: Central ZGW orchestrator \u2014 REQ-by-REQ mapping deferred to annotate", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwService.php", + "method": "handleCreate", + "class": "ZgwService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-002", + "req_title": "ZGW API routes MUST be exposed via OpenRegister's Endpoint system", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: Central ZGW orchestrator \u2014 REQ-by-REQ mapping deferred to annotate", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwService.php", + "method": "handleShow", + "class": "ZgwService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-002", + "req_title": "ZGW API routes MUST be exposed via OpenRegister's Endpoint system", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: Central ZGW orchestrator \u2014 REQ-by-REQ mapping deferred to annotate", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwService.php", + "method": "handleUpdate", + "class": "ZgwService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-002", + "req_title": "ZGW API routes MUST be exposed via OpenRegister's Endpoint system", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: Central ZGW orchestrator \u2014 REQ-by-REQ mapping deferred to annotate", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwService.php", + "method": "handleDestroy", + "class": "ZgwService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-002", + "req_title": "ZGW API routes MUST be exposed via OpenRegister's Endpoint system", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: Central ZGW orchestrator \u2014 REQ-by-REQ mapping deferred to annotate", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwService.php", + "method": "handleAudittrailIndex", + "class": "ZgwService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-002", + "req_title": "ZGW API routes MUST be exposed via OpenRegister's Endpoint system", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: Central ZGW orchestrator \u2014 REQ-by-REQ mapping deferred to annotate", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwService.php", + "method": "handleAudittrailShow", + "class": "ZgwService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-002", + "req_title": "ZGW API routes MUST be exposed via OpenRegister's Endpoint system", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: Central ZGW orchestrator \u2014 REQ-by-REQ mapping deferred to annotate", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwService.php", + "method": "resolveZaakClosed", + "class": "ZgwService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-002", + "req_title": "ZGW API routes MUST be exposed via OpenRegister's Endpoint system", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: Central ZGW orchestrator \u2014 REQ-by-REQ mapping deferred to annotate", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwService.php", + "method": "resolveZaakClosedFromBody", + "class": "ZgwService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-002", + "req_title": "ZGW API routes MUST be exposed via OpenRegister's Endpoint system", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: Central ZGW orchestrator \u2014 REQ-by-REQ mapping deferred to annotate", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwService.php", + "method": "resolveParentZaaktypeDraft", + "class": "ZgwService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-002", + "req_title": "ZGW API routes MUST be exposed via OpenRegister's Endpoint system", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: Central ZGW orchestrator \u2014 REQ-by-REQ mapping deferred to annotate", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwService.php", + "method": "resolveParentZaaktypeDraftFromBody", + "class": "ZgwService", + "visibility": "public", + "capability": "zgw-api-mapping", + "req_id": "REQ-002", + "req_title": "ZGW API routes MUST be exposed via OpenRegister's Endpoint system", + "confidence": 0.85, + "needs_review": false, + "signal": "explicit: Central ZGW orchestrator \u2014 REQ-by-REQ mapping deferred to annotate", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwZrcRulesService.php", + "method": "rulesZakenCreate", + "class": "ZgwZrcRulesService", + "visibility": "public", + "capability": "zgw-business-rules-compliance", + "req_id": "ZRC-007", + "req_title": "Eindstatus and Zaak Closing", + "confidence": 0.78, + "needs_review": true, + "signal": "explicit: ZRC rules service \u2014 specific ZRC-NNN REQ per method requires reading body", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwZrcRulesService.php", + "method": "rulesZakenUpdate", + "class": "ZgwZrcRulesService", + "visibility": "public", + "capability": "zgw-business-rules-compliance", + "req_id": "ZRC-007", + "req_title": "Eindstatus and Zaak Closing", + "confidence": 0.78, + "needs_review": true, + "signal": "explicit: ZRC rules service \u2014 specific ZRC-NNN REQ per method requires reading body", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwZrcRulesService.php", + "method": "rulesZakenPatch", + "class": "ZgwZrcRulesService", + "visibility": "public", + "capability": "zgw-business-rules-compliance", + "req_id": "ZRC-007", + "req_title": "Eindstatus and Zaak Closing", + "confidence": 0.78, + "needs_review": true, + "signal": "explicit: ZRC rules service \u2014 specific ZRC-NNN REQ per method requires reading body", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwZrcRulesService.php", + "method": "rulesStatussenCreate", + "class": "ZgwZrcRulesService", + "visibility": "public", + "capability": "zgw-business-rules-compliance", + "req_id": "ZRC-007", + "req_title": "Eindstatus and Zaak Closing", + "confidence": 0.78, + "needs_review": true, + "signal": "explicit: ZRC rules service \u2014 specific ZRC-NNN REQ per method requires reading body", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwZrcRulesService.php", + "method": "rulesResultatenCreate", + "class": "ZgwZrcRulesService", + "visibility": "public", + "capability": "zgw-business-rules-compliance", + "req_id": "ZRC-007", + "req_title": "Eindstatus and Zaak Closing", + "confidence": 0.78, + "needs_review": true, + "signal": "explicit: ZRC rules service \u2014 specific ZRC-NNN REQ per method requires reading body", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwZrcRulesService.php", + "method": "rulesRollenCreate", + "class": "ZgwZrcRulesService", + "visibility": "public", + "capability": "zgw-business-rules-compliance", + "req_id": "ZRC-007", + "req_title": "Eindstatus and Zaak Closing", + "confidence": 0.78, + "needs_review": true, + "signal": "explicit: ZRC rules service \u2014 specific ZRC-NNN REQ per method requires reading body", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwZrcRulesService.php", + "method": "rulesZaakinformatieobjectenCreate", + "class": "ZgwZrcRulesService", + "visibility": "public", + "capability": "zgw-business-rules-compliance", + "req_id": "ZRC-007", + "req_title": "Eindstatus and Zaak Closing", + "confidence": 0.78, + "needs_review": true, + "signal": "explicit: ZRC rules service \u2014 specific ZRC-NNN REQ per method requires reading body", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwZrcRulesService.php", + "method": "rulesZaakinformatieobjectenUpdate", + "class": "ZgwZrcRulesService", + "visibility": "public", + "capability": "zgw-business-rules-compliance", + "req_id": "ZRC-007", + "req_title": "Eindstatus and Zaak Closing", + "confidence": 0.78, + "needs_review": true, + "signal": "explicit: ZRC rules service \u2014 specific ZRC-NNN REQ per method requires reading body", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwZrcRulesService.php", + "method": "rulesZaakinformatieobjectenPatch", + "class": "ZgwZrcRulesService", + "visibility": "public", + "capability": "zgw-business-rules-compliance", + "req_id": "ZRC-007", + "req_title": "Eindstatus and Zaak Closing", + "confidence": 0.78, + "needs_review": true, + "signal": "explicit: ZRC rules service \u2014 specific ZRC-NNN REQ per method requires reading body", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwZrcRulesService.php", + "method": "rulesZaakeigenschappenCreate", + "class": "ZgwZrcRulesService", + "visibility": "public", + "capability": "zgw-business-rules-compliance", + "req_id": "ZRC-007", + "req_title": "Eindstatus and Zaak Closing", + "confidence": 0.78, + "needs_review": true, + "signal": "explicit: ZRC rules service \u2014 specific ZRC-NNN REQ per method requires reading body", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwZrcRulesService.php", + "method": "detectEindstatus", + "class": "ZgwZrcRulesService", + "visibility": "public", + "capability": "zgw-business-rules-compliance", + "req_id": "ZRC-007", + "req_title": "Eindstatus and Zaak Closing", + "confidence": 0.78, + "needs_review": true, + "signal": "explicit: ZRC rules service \u2014 specific ZRC-NNN REQ per method requires reading body", + "inherits_from": null + }, + { + "file": "lib/Service/ZgwZrcRulesService.php", + "method": "filterZakenForConsumer", + "class": "ZgwZrcRulesService", + "visibility": "public", + "capability": "zgw-business-rules-compliance", + "req_id": "ZRC-007", + "req_title": "Eindstatus and Zaak Closing", + "confidence": 0.78, + "needs_review": true, + "signal": "explicit: ZRC rules service \u2014 specific ZRC-NNN REQ per method requires reading body", + "inherits_from": null + }, + { + "file": "lib/Settings/AdminSettings.php", + "method": "__construct", + "class": "AdminSettings", + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.95, + "needs_review": false, + "signal": "explicit: ISettings implementation for panel registration", + "inherits_from": null + }, + { + "file": "lib/Settings/AdminSettings.php", + "method": "getForm", + "class": "AdminSettings", + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.95, + "needs_review": false, + "signal": "explicit: ISettings implementation for panel registration", + "inherits_from": null + }, + { + "file": "lib/Settings/AdminSettings.php", + "method": "getSection", + "class": "AdminSettings", + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.95, + "needs_review": false, + "signal": "explicit: ISettings implementation for panel registration", + "inherits_from": null + }, + { + "file": "lib/Settings/AdminSettings.php", + "method": "getPriority", + "class": "AdminSettings", + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.95, + "needs_review": false, + "signal": "explicit: ISettings implementation for panel registration", + "inherits_from": null + }, + { + "file": "lib/Controller/AcController.php", + "method": "findConsumerByUuid", + "class": "AcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-007", + "req_title": "NRC (Notificaties API) compatibility MUST be supported", + "confidence": 0.75, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/AcController.php", + "method": "validateApplicatieBody", + "class": "AcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-007", + "req_title": "NRC (Notificaties API) compatibility MUST be supported", + "confidence": 0.75, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/AcController.php", + "method": "validateClientIdUniqueness", + "class": "AcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-007", + "req_title": "NRC (Notificaties API) compatibility MUST be supported", + "confidence": 0.75, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/AcController.php", + "method": "validateAutorisatieConsistency", + "class": "AcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-007", + "req_title": "NRC (Notificaties API) compatibility MUST be supported", + "confidence": 0.75, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/AcController.php", + "method": "validateAutorisatieScopes", + "class": "AcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-007", + "req_title": "NRC (Notificaties API) compatibility MUST be supported", + "confidence": 0.75, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/AcController.php", + "method": "scopesContain", + "class": "AcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-007", + "req_title": "NRC (Notificaties API) compatibility MUST be supported", + "confidence": 0.75, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/AcController.php", + "method": "getConsumerClientIds", + "class": "AcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-007", + "req_title": "NRC (Notificaties API) compatibility MUST be supported", + "confidence": 0.75, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/AcController.php", + "method": "consumerToApplicatie", + "class": "AcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-007", + "req_title": "NRC (Notificaties API) compatibility MUST be supported", + "confidence": 0.75, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/AcController.php", + "method": "applicatieToConsumer", + "class": "AcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-007", + "req_title": "NRC (Notificaties API) compatibility MUST be supported", + "confidence": 0.75, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/BrcController.php", + "method": "createBesluitWithZaakSync", + "class": "BrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-006", + "req_title": "BRC (Besluiten API) resources MUST be mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/BrcController.php", + "method": "syncZaakBesluitToZrc", + "class": "BrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-006", + "req_title": "BRC (Besluiten API) resources MUST be mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/BrcController.php", + "method": "indexBesluitInformatieObjecten", + "class": "BrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-006", + "req_title": "BRC (Besluiten API) resources MUST be mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/BrcController.php", + "method": "createBesluitInformatieObject", + "class": "BrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-006", + "req_title": "BRC (Besluiten API) resources MUST be mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/BrcController.php", + "method": "createOioInDrc", + "class": "BrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-006", + "req_title": "BRC (Besluiten API) resources MUST be mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/BrcController.php", + "method": "deleteOiosForBesluit", + "class": "BrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-006", + "req_title": "BRC (Besluiten API) resources MUST be mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/BrcController.php", + "method": "destroyBesluitInformatieObject", + "class": "BrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-006", + "req_title": "BRC (Besluiten API) resources MUST be mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/BrcController.php", + "method": "deleteOioByBesluitAndIo", + "class": "BrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-006", + "req_title": "BRC (Besluiten API) resources MUST be mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/BrcController.php", + "method": "destroyBesluit", + "class": "BrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-006", + "req_title": "BRC (Besluiten API) resources MUST be mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/DrcController.php", + "method": "indexFlatArray", + "class": "DrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-005", + "req_title": "DRC (Documenten API) resources MUST be mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/DrcController.php", + "method": "lockFallback", + "class": "DrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-005", + "req_title": "DRC (Documenten API) resources MUST be mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/DrcController.php", + "method": "unlockFallback", + "class": "DrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-005", + "req_title": "DRC (Documenten API) resources MUST be mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/DrcController.php", + "method": "findOioRelationsForEio", + "class": "DrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-005", + "req_title": "DRC (Documenten API) resources MUST be mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/DrcController.php", + "method": "searchRelationsInSchema", + "class": "DrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-005", + "req_title": "DRC (Documenten API) resources MUST be mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/DrcController.php", + "method": "extractIdsFromResults", + "class": "DrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-005", + "req_title": "DRC (Documenten API) resources MUST be mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/DrcController.php", + "method": "cascadeDeleteGebruiksrechten", + "class": "DrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-005", + "req_title": "DRC (Documenten API) resources MUST be mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/DrcController.php", + "method": "updateIndicatieGebruiksrecht", + "class": "DrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-005", + "req_title": "DRC (Documenten API) resources MUST be mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/DrcController.php", + "method": "getGebruiksrechtData", + "class": "DrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-005", + "req_title": "DRC (Documenten API) resources MUST be mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/DrcController.php", + "method": "checkAndClearIndicatieGebruiksrecht", + "class": "DrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-005", + "req_title": "DRC (Documenten API) resources MUST be mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/DrcController.php", + "method": "setIndicatieGebruiksrecht", + "class": "DrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-005", + "req_title": "DRC (Documenten API) resources MUST be mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/DrcController.php", + "method": "enrichWithBestandsdelen", + "class": "DrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-005", + "req_title": "DRC (Documenten API) resources MUST be mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/DrcController.php", + "method": "parseFileParts", + "class": "DrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-005", + "req_title": "DRC (Documenten API) resources MUST be mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/DrcController.php", + "method": "buildBestandsdelenArray", + "class": "DrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-005", + "req_title": "DRC (Documenten API) resources MUST be mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/DrcController.php", + "method": "handleEioUpdate", + "class": "DrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-005", + "req_title": "DRC (Documenten API) resources MUST be mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/DrcController.php", + "method": "checkDocumentLock", + "class": "DrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-005", + "req_title": "DRC (Documenten API) resources MUST be mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/DrcController.php", + "method": "resolveStoredLockId", + "class": "DrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-005", + "req_title": "DRC (Documenten API) resources MUST be mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/DrcController.php", + "method": "storeLockIdInData", + "class": "DrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-005", + "req_title": "DRC (Documenten API) resources MUST be mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/DrcController.php", + "method": "clearLockIdInData", + "class": "DrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-005", + "req_title": "DRC (Documenten API) resources MUST be mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/HealthController.php", + "method": "checkDatabase", + "class": "HealthController", + "visibility": "private", + "capability": "prometheus-metrics", + "req_id": "REQ-PROM-004", + "req_title": "Health Check Endpoint", + "confidence": 0.87, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "index()" + }, + { + "file": "lib/Controller/HealthController.php", + "method": "checkOpenRegister", + "class": "HealthController", + "visibility": "private", + "capability": "prometheus-metrics", + "req_id": "REQ-PROM-004", + "req_title": "Health Check Endpoint", + "confidence": 0.87, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "index()" + }, + { + "file": "lib/Controller/HealthController.php", + "method": "checkFilesystem", + "class": "HealthController", + "visibility": "private", + "capability": "prometheus-metrics", + "req_id": "REQ-PROM-004", + "req_title": "Health Check Endpoint", + "confidence": 0.87, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "index()" + }, + { + "file": "lib/Controller/HealthController.php", + "method": "getAppVersion", + "class": "HealthController", + "visibility": "private", + "capability": "prometheus-metrics", + "req_id": "REQ-PROM-004", + "req_title": "Health Check Endpoint", + "confidence": 0.87, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "index()" + }, + { + "file": "lib/Controller/InspectionController.php", + "method": "getRequestBody", + "class": "InspectionController", + "visibility": "private", + "capability": "inspection-checklists", + "req_id": "REQ-001", + "req_title": "Inspection checklist schema", + "confidence": 0.73, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/MetricsController.php", + "method": "collectMetrics", + "class": "MetricsController", + "visibility": "private", + "capability": "prometheus-metrics", + "req_id": "REQ-PROM-001", + "req_title": "Metrics Endpoint", + "confidence": 0.87, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "index()" + }, + { + "file": "lib/Controller/MetricsController.php", + "method": "getCached", + "class": "MetricsController", + "visibility": "private", + "capability": "prometheus-metrics", + "req_id": "REQ-PROM-001", + "req_title": "Metrics Endpoint", + "confidence": 0.87, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "index()" + }, + { + "file": "lib/Controller/MetricsController.php", + "method": "checkDatabaseHealth", + "class": "MetricsController", + "visibility": "private", + "capability": "prometheus-metrics", + "req_id": "REQ-PROM-001", + "req_title": "Metrics Endpoint", + "confidence": 0.87, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "index()" + }, + { + "file": "lib/Controller/MetricsController.php", + "method": "getCaseCounts", + "class": "MetricsController", + "visibility": "private", + "capability": "prometheus-metrics", + "req_id": "REQ-PROM-001", + "req_title": "Metrics Endpoint", + "confidence": 0.87, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "index()" + }, + { + "file": "lib/Controller/MetricsController.php", + "method": "getOverdueCasesCount", + "class": "MetricsController", + "visibility": "private", + "capability": "prometheus-metrics", + "req_id": "REQ-PROM-001", + "req_title": "Metrics Endpoint", + "confidence": 0.87, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "index()" + }, + { + "file": "lib/Controller/MetricsController.php", + "method": "getCasesCreatedTodayCount", + "class": "MetricsController", + "visibility": "private", + "capability": "prometheus-metrics", + "req_id": "REQ-PROM-001", + "req_title": "Metrics Endpoint", + "confidence": 0.87, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "index()" + }, + { + "file": "lib/Controller/MetricsController.php", + "method": "getTaskCounts", + "class": "MetricsController", + "visibility": "private", + "capability": "prometheus-metrics", + "req_id": "REQ-PROM-001", + "req_title": "Metrics Endpoint", + "confidence": 0.87, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "index()" + }, + { + "file": "lib/Controller/MetricsController.php", + "method": "getOverdueTasksCount", + "class": "MetricsController", + "visibility": "private", + "capability": "prometheus-metrics", + "req_id": "REQ-PROM-001", + "req_title": "Metrics Endpoint", + "confidence": 0.87, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "index()" + }, + { + "file": "lib/Controller/MetricsController.php", + "method": "getAppVersion", + "class": "MetricsController", + "visibility": "private", + "capability": "prometheus-metrics", + "req_id": "REQ-PROM-001", + "req_title": "Metrics Endpoint", + "confidence": 0.87, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "index()" + }, + { + "file": "lib/Controller/MetricsController.php", + "method": "getNextcloudVersion", + "class": "MetricsController", + "visibility": "private", + "capability": "prometheus-metrics", + "req_id": "REQ-PROM-001", + "req_title": "Metrics Endpoint", + "confidence": 0.87, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "index()" + }, + { + "file": "lib/Controller/MetricsController.php", + "method": "sanitizeLabel", + "class": "MetricsController", + "visibility": "private", + "capability": "prometheus-metrics", + "req_id": "REQ-PROM-001", + "req_title": "Metrics Endpoint", + "confidence": 0.87, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "index()" + }, + { + "file": "lib/Controller/ParaferingController.php", + "method": "handleAction", + "class": "ParaferingController", + "visibility": "private", + "capability": "voorstel-management", + "req_id": "REQ-002", + "req_title": "Create Voorstel from Case", + "confidence": 0.8, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "createVoorstel()" + }, + { + "file": "lib/Controller/ParaferingController.php", + "method": "getRequestBody", + "class": "ParaferingController", + "visibility": "private", + "capability": "voorstel-management", + "req_id": "REQ-002", + "req_title": "Create Voorstel from Case", + "confidence": 0.8, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "createVoorstel()" + }, + { + "file": "lib/Controller/ZrcController.php", + "method": "checkZaakReadAccess", + "class": "ZrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-003", + "req_title": "ZRC (Zaken API) resources MUST be fully mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/ZrcController.php", + "method": "filterZakenByAuthorisation", + "class": "ZrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-003", + "req_title": "ZRC (Zaken API) resources MUST be fully mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/ZrcController.php", + "method": "permissionDeniedResponse", + "class": "ZrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-003", + "req_title": "ZRC (Zaken API) resources MUST be fully mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/ZrcController.php", + "method": "preValidateZaakBody", + "class": "ZrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-003", + "req_title": "ZRC (Zaken API) resources MUST be fully mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/ZrcController.php", + "method": "preValidateProductenOfDiensten", + "class": "ZrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-003", + "req_title": "ZRC (Zaken API) resources MUST be fully mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/ZrcController.php", + "method": "destroyZaak", + "class": "ZrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-003", + "req_title": "ZRC (Zaken API) resources MUST be fully mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/ZrcController.php", + "method": "resolveZaakClosedForExisting", + "class": "ZrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-003", + "req_title": "ZRC (Zaken API) resources MUST be fully mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/ZrcController.php", + "method": "checkReopenScope", + "class": "ZrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-003", + "req_title": "ZRC (Zaken API) resources MUST be fully mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/ZrcController.php", + "method": "checkIndicatieGebruiksrechtBeforeClose", + "class": "ZrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-003", + "req_title": "ZRC (Zaken API) resources MUST be fully mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/ZrcController.php", + "method": "isEindstatusByVolgnummer", + "class": "ZrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-003", + "req_title": "ZRC (Zaken API) resources MUST be fully mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/ZrcController.php", + "method": "handleEindstatusEffect", + "class": "ZrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-003", + "req_title": "ZRC (Zaken API) resources MUST be fully mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/ZrcController.php", + "method": "setIndicatieGebruiksrechtOnClose", + "class": "ZrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-003", + "req_title": "ZRC (Zaken API) resources MUST be fully mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/ZrcController.php", + "method": "handleResultaatCreated", + "class": "ZrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-003", + "req_title": "ZRC (Zaken API) resources MUST be fully mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/ZrcController.php", + "method": "deriveArchiefactiedatum", + "class": "ZrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-003", + "req_title": "ZRC (Zaken API) resources MUST be fully mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/ZrcController.php", + "method": "resolveArchiveBaseDate", + "class": "ZrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-003", + "req_title": "ZRC (Zaken API) resources MUST be fully mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/ZrcController.php", + "method": "resolveEigenschapDate", + "class": "ZrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-003", + "req_title": "ZRC (Zaken API) resources MUST be fully mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/ZrcController.php", + "method": "resolveBesluitDate", + "class": "ZrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-003", + "req_title": "ZRC (Zaken API) resources MUST be fully mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/ZrcController.php", + "method": "enrichZioResponse", + "class": "ZrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-003", + "req_title": "ZRC (Zaken API) resources MUST be fully mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/ZrcController.php", + "method": "enrichZioJsonResponse", + "class": "ZrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-003", + "req_title": "ZRC (Zaken API) resources MUST be fully mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/ZrcController.php", + "method": "syncCreateObjectInformatieObject", + "class": "ZrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-003", + "req_title": "ZRC (Zaken API) resources MUST be fully mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/ZrcController.php", + "method": "getZioDataForOioSync", + "class": "ZrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-003", + "req_title": "ZRC (Zaken API) resources MUST be fully mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/ZrcController.php", + "method": "syncDeleteObjectInformatieObject", + "class": "ZrcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-003", + "req_title": "ZRC (Zaken API) resources MUST be fully mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/ZtcController.php", + "method": "resolveParentDraft", + "class": "ZtcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-004", + "req_title": "ZTC (Catalogi API) resources MUST be fully mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/ZtcController.php", + "method": "handlePublish", + "class": "ZtcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-004", + "req_title": "ZTC (Catalogi API) resources MUST be fully mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/ZtcController.php", + "method": "enrichCrossReferences", + "class": "ZtcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-004", + "req_title": "ZTC (Catalogi API) resources MUST be fully mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/ZtcController.php", + "method": "enrichBesluittype", + "class": "ZtcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-004", + "req_title": "ZTC (Catalogi API) resources MUST be fully mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/ZtcController.php", + "method": "enrichZaaktype", + "class": "ZtcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-004", + "req_title": "ZTC (Catalogi API) resources MUST be fully mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/ZtcController.php", + "method": "filterByDatumGeldigheid", + "class": "ZtcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-004", + "req_title": "ZTC (Catalogi API) resources MUST be fully mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/ZtcController.php", + "method": "filterValidUrls", + "class": "ZtcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-004", + "req_title": "ZTC (Catalogi API) resources MUST be fully mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/ZtcController.php", + "method": "isUrlValid", + "class": "ZtcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-004", + "req_title": "ZTC (Catalogi API) resources MUST be fully mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Controller/ZtcController.php", + "method": "resolveIotByOmschrijving", + "class": "ZtcController", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-004", + "req_title": "ZTC (Catalogi API) resources MUST be fully mappable", + "confidence": 0.82, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Repair/LoadDefaultZgwMappings.php", + "method": "patchExistingMappings", + "class": "LoadDefaultZgwMappings", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.8, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Repair/LoadDefaultZgwMappings.php", + "method": "tplUrl", + "class": "LoadDefaultZgwMappings", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.8, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Repair/LoadDefaultZgwMappings.php", + "method": "getZaakMapping", + "class": "LoadDefaultZgwMappings", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.8, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Repair/LoadDefaultZgwMappings.php", + "method": "getZaakTypeMapping", + "class": "LoadDefaultZgwMappings", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.8, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Repair/LoadDefaultZgwMappings.php", + "method": "getStatusMapping", + "class": "LoadDefaultZgwMappings", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.8, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Repair/LoadDefaultZgwMappings.php", + "method": "getStatusTypeMapping", + "class": "LoadDefaultZgwMappings", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.8, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Repair/LoadDefaultZgwMappings.php", + "method": "getResultaatMapping", + "class": "LoadDefaultZgwMappings", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.8, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Repair/LoadDefaultZgwMappings.php", + "method": "getResultaatTypeMapping", + "class": "LoadDefaultZgwMappings", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.8, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Repair/LoadDefaultZgwMappings.php", + "method": "getRolMapping", + "class": "LoadDefaultZgwMappings", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.8, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Repair/LoadDefaultZgwMappings.php", + "method": "getRolTypeMapping", + "class": "LoadDefaultZgwMappings", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.8, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Repair/LoadDefaultZgwMappings.php", + "method": "getEigenschapMapping", + "class": "LoadDefaultZgwMappings", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.8, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Repair/LoadDefaultZgwMappings.php", + "method": "getBesluitMapping", + "class": "LoadDefaultZgwMappings", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.8, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Repair/LoadDefaultZgwMappings.php", + "method": "getBesluitTypeMapping", + "class": "LoadDefaultZgwMappings", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.8, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Repair/LoadDefaultZgwMappings.php", + "method": "getInformatieObjectTypeMapping", + "class": "LoadDefaultZgwMappings", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.8, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Repair/LoadDefaultZgwMappings.php", + "method": "getEnkelvoudigInformatieObjectMapping", + "class": "LoadDefaultZgwMappings", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.8, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Repair/LoadDefaultZgwMappings.php", + "method": "getObjectInformatieObjectMapping", + "class": "LoadDefaultZgwMappings", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.8, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Repair/LoadDefaultZgwMappings.php", + "method": "getGebruiksrechtenMapping", + "class": "LoadDefaultZgwMappings", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.8, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Repair/LoadDefaultZgwMappings.php", + "method": "getKanaalMapping", + "class": "LoadDefaultZgwMappings", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.8, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Repair/LoadDefaultZgwMappings.php", + "method": "getAbonnementMapping", + "class": "LoadDefaultZgwMappings", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.8, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Repair/LoadDefaultZgwMappings.php", + "method": "getCatalogusMapping", + "class": "LoadDefaultZgwMappings", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.8, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Repair/LoadDefaultZgwMappings.php", + "method": "getZaaktypeInformatieobjecttypeMapping", + "class": "LoadDefaultZgwMappings", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.8, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Repair/LoadDefaultZgwMappings.php", + "method": "getApplicatieMapping", + "class": "LoadDefaultZgwMappings", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.8, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Repair/LoadDefaultZgwMappings.php", + "method": "createDefaultApplicaties", + "class": "LoadDefaultZgwMappings", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.8, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Repair/LoadDefaultZgwMappings.php", + "method": "getDefaultApplicaties", + "class": "LoadDefaultZgwMappings", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.8, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Repair/LoadDefaultZgwMappings.php", + "method": "createDefaultKanalen", + "class": "LoadDefaultZgwMappings", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.8, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Repair/LoadDefaultZgwMappings.php", + "method": "getDefaultKanalen", + "class": "LoadDefaultZgwMappings", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.8, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Repair/LoadDefaultZgwMappings.php", + "method": "getZaakeigenschapMapping", + "class": "LoadDefaultZgwMappings", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.8, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Repair/LoadDefaultZgwMappings.php", + "method": "getZaakinformatieobjectMapping", + "class": "LoadDefaultZgwMappings", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.8, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Repair/LoadDefaultZgwMappings.php", + "method": "getZaakobjectMapping", + "class": "LoadDefaultZgwMappings", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.8, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Repair/LoadDefaultZgwMappings.php", + "method": "getKlantcontactMapping", + "class": "LoadDefaultZgwMappings", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.8, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Repair/LoadDefaultZgwMappings.php", + "method": "getBesluitinformatieobjectMapping", + "class": "LoadDefaultZgwMappings", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.8, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Repair/LoadDefaultZgwMappings.php", + "method": "getVerzendingMapping", + "class": "LoadDefaultZgwMappings", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-001", + "req_title": "Mapping engine MUST support ZGW-specific Twig filters and functions", + "confidence": 0.8, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Service/CaseEmailService.php", + "method": "loadTemplate", + "class": "CaseEmailService", + "visibility": "private", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.7, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "extractCaseNumber()" + }, + { + "file": "lib/Service/CaseEmailService.php", + "method": "loadCaseData", + "class": "CaseEmailService", + "visibility": "private", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.7, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "extractCaseNumber()" + }, + { + "file": "lib/Service/CaseEmailService.php", + "method": "recordSentEmail", + "class": "CaseEmailService", + "visibility": "private", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.7, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "extractCaseNumber()" + }, + { + "file": "lib/Service/CaseEmailService.php", + "method": "recordReceivedEmail", + "class": "CaseEmailService", + "visibility": "private", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.7, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "extractCaseNumber()" + }, + { + "file": "lib/Service/CaseEmailService.php", + "method": "findCaseByIdentifier", + "class": "CaseEmailService", + "visibility": "private", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.7, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "extractCaseNumber()" + }, + { + "file": "lib/Service/GisProxyService.php", + "method": "isUrlAllowed", + "class": "GisProxyService", + "visibility": "private", + "capability": "wms-wfs-layers", + "req_id": "REQ-LAYER-03", + "req_title": "GIS Proxy Endpoint", + "confidence": 0.83, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "proxyRequest()" + }, + { + "file": "lib/Service/GisProxyService.php", + "method": "checkRateLimit", + "class": "GisProxyService", + "visibility": "private", + "capability": "wms-wfs-layers", + "req_id": "REQ-LAYER-03", + "req_title": "GIS Proxy Endpoint", + "confidence": 0.83, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "proxyRequest()" + }, + { + "file": "lib/Service/GisProxyService.php", + "method": "parseCapabilities", + "class": "GisProxyService", + "visibility": "private", + "capability": "wms-wfs-layers", + "req_id": "REQ-LAYER-03", + "req_title": "GIS Proxy Endpoint", + "confidence": 0.83, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "proxyRequest()" + }, + { + "file": "lib/Service/GisProxyService.php", + "method": "xmlToArray", + "class": "GisProxyService", + "visibility": "private", + "capability": "wms-wfs-layers", + "req_id": "REQ-LAYER-03", + "req_title": "GIS Proxy Endpoint", + "confidence": 0.83, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "proxyRequest()" + }, + { + "file": "lib/Service/InspectionService.php", + "method": "calculateDistance", + "class": "InspectionService", + "visibility": "private", + "capability": "inspection-checklists", + "req_id": "REQ-003", + "req_title": "Inspection rapport creation", + "confidence": 0.73, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Service/MilestoneService.php", + "method": "getMilestoneRecords", + "class": "MilestoneService", + "visibility": "private", + "capability": "doorlooptijd-dashboard", + "req_id": "REQ-006", + "req_title": "Average processing time per case type table [V1]", + "confidence": 0.7, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Service/ParaferingService.php", + "method": "advanceStep", + "class": "ParaferingService", + "visibility": "private", + "capability": "voorstel-management", + "req_id": "REQ-002", + "req_title": "Create Voorstel from Case", + "confidence": 0.8, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "createVoorstel()" + }, + { + "file": "lib/Service/ParaferingService.php", + "method": "handleParallelStep", + "class": "ParaferingService", + "visibility": "private", + "capability": "voorstel-management", + "req_id": "REQ-002", + "req_title": "Create Voorstel from Case", + "confidence": 0.8, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "createVoorstel()" + }, + { + "file": "lib/Service/ParaferingService.php", + "method": "generateId", + "class": "ParaferingService", + "visibility": "private", + "capability": "voorstel-management", + "req_id": "REQ-002", + "req_title": "Create Voorstel from Case", + "confidence": 0.8, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "createVoorstel()" + }, + { + "file": "lib/Service/SeedDataService.php", + "method": "seedCaseType", + "class": "SeedDataService", + "visibility": "private", + "capability": "vth-case-type-seed", + "req_id": "REQ-001", + "req_title": "VTH case type seed data for Vergunningen", + "confidence": 0.75, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Service/SeedDataService.php", + "method": "resolveWorkflowReferences", + "class": "SeedDataService", + "visibility": "private", + "capability": "vth-case-type-seed", + "req_id": "REQ-001", + "req_title": "VTH case type seed data for Vergunningen", + "confidence": 0.75, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Service/SeedDataService.php", + "method": "createObject", + "class": "SeedDataService", + "visibility": "private", + "capability": "vth-case-type-seed", + "req_id": "REQ-001", + "req_title": "VTH case type seed data for Vergunningen", + "confidence": 0.75, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Service/SeedDataService.php", + "method": "findByFilter", + "class": "SeedDataService", + "visibility": "private", + "capability": "vth-case-type-seed", + "req_id": "REQ-001", + "req_title": "VTH case type seed data for Vergunningen", + "confidence": 0.75, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Service/SeedDataService.php", + "method": "getObjectService", + "class": "SeedDataService", + "visibility": "private", + "capability": "vth-case-type-seed", + "req_id": "REQ-001", + "req_title": "VTH case type seed data for Vergunningen", + "confidence": 0.75, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Service/SeedDataService.php", + "method": "getConfigValue", + "class": "SeedDataService", + "visibility": "private", + "capability": "vth-case-type-seed", + "req_id": "REQ-001", + "req_title": "VTH case type seed data for Vergunningen", + "confidence": 0.75, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Service/SeedDataService.php", + "method": "getObjectId", + "class": "SeedDataService", + "visibility": "private", + "capability": "vth-case-type-seed", + "req_id": "REQ-001", + "req_title": "VTH case type seed data for Vergunningen", + "confidence": 0.75, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Service/SeedDataService.php", + "method": "generateUUID", + "class": "SeedDataService", + "visibility": "private", + "capability": "vth-case-type-seed", + "req_id": "REQ-001", + "req_title": "VTH case type seed data for Vergunningen", + "confidence": 0.75, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Service/ZgwBusinessRulesService.php", + "method": "dispatchToRegister", + "class": "ZgwBusinessRulesService", + "visibility": "private", + "capability": "zgw-business-rules-compliance", + "req_id": "ZRC-007", + "req_title": "Eindstatus and Zaak Closing", + "confidence": 0.7, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Service/ZgwBusinessRulesService.php", + "method": "dispatchZrc", + "class": "ZgwBusinessRulesService", + "visibility": "private", + "capability": "zgw-business-rules-compliance", + "req_id": "ZRC-007", + "req_title": "Eindstatus and Zaak Closing", + "confidence": 0.7, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Service/ZgwBusinessRulesService.php", + "method": "dispatchZtc", + "class": "ZgwBusinessRulesService", + "visibility": "private", + "capability": "zgw-business-rules-compliance", + "req_id": "ZRC-007", + "req_title": "Eindstatus and Zaak Closing", + "confidence": 0.7, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Service/ZgwBusinessRulesService.php", + "method": "dispatchDrc", + "class": "ZgwBusinessRulesService", + "visibility": "private", + "capability": "zgw-business-rules-compliance", + "req_id": "ZRC-007", + "req_title": "Eindstatus and Zaak Closing", + "confidence": 0.7, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Service/ZgwBusinessRulesService.php", + "method": "dispatchBrc", + "class": "ZgwBusinessRulesService", + "visibility": "private", + "capability": "zgw-business-rules-compliance", + "req_id": "ZRC-007", + "req_title": "Eindstatus and Zaak Closing", + "confidence": 0.7, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Service/ZgwBusinessRulesService.php", + "method": "isValid", + "class": "ZgwBusinessRulesService", + "visibility": "private", + "capability": "zgw-business-rules-compliance", + "req_id": "ZRC-007", + "req_title": "Eindstatus and Zaak Closing", + "confidence": 0.7, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Service/ZgwDocumentService.php", + "method": "getDocumentFolder", + "class": "ZgwDocumentService", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-005", + "req_title": "DRC (Documenten API) resources MUST be mappable", + "confidence": 0.72, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Service/ZgwDocumentService.php", + "method": "getUserFolder", + "class": "ZgwDocumentService", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-005", + "req_title": "DRC (Documenten API) resources MUST be mappable", + "confidence": 0.72, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Service/ZgwRulesBase.php", + "method": "isValid", + "class": "ZgwRulesBase", + "visibility": "protected", + "capability": "zgw-business-rules-compliance", + "req_id": "ZRC-007", + "req_title": "Eindstatus and Zaak Closing", + "confidence": 0.7, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Service/ZgwRulesBase.php", + "method": "error", + "class": "ZgwRulesBase", + "visibility": "protected", + "capability": "zgw-business-rules-compliance", + "req_id": "ZRC-007", + "req_title": "Eindstatus and Zaak Closing", + "confidence": 0.7, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Service/ZgwRulesBase.php", + "method": "fieldError", + "class": "ZgwRulesBase", + "visibility": "protected", + "capability": "zgw-business-rules-compliance", + "req_id": "ZRC-007", + "req_title": "Eindstatus and Zaak Closing", + "confidence": 0.7, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Service/ZgwRulesBase.php", + "method": "fieldImmutableError", + "class": "ZgwRulesBase", + "visibility": "protected", + "capability": "zgw-business-rules-compliance", + "req_id": "ZRC-007", + "req_title": "Eindstatus and Zaak Closing", + "confidence": 0.7, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Service/ZgwRulesBase.php", + "method": "extractUuid", + "class": "ZgwRulesBase", + "visibility": "protected", + "capability": "zgw-business-rules-compliance", + "req_id": "ZRC-007", + "req_title": "Eindstatus and Zaak Closing", + "confidence": 0.7, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Service/ZgwRulesBase.php", + "method": "isValidUrl", + "class": "ZgwRulesBase", + "visibility": "protected", + "capability": "zgw-business-rules-compliance", + "req_id": "ZRC-007", + "req_title": "Eindstatus and Zaak Closing", + "confidence": 0.7, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Service/ZgwRulesBase.php", + "method": "validateTypeUrl", + "class": "ZgwRulesBase", + "visibility": "protected", + "capability": "zgw-business-rules-compliance", + "req_id": "ZRC-007", + "req_title": "Eindstatus and Zaak Closing", + "confidence": 0.7, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Service/ZgwRulesBase.php", + "method": "validateInformatieobjectUrl", + "class": "ZgwRulesBase", + "visibility": "protected", + "capability": "zgw-business-rules-compliance", + "req_id": "ZRC-007", + "req_title": "Eindstatus and Zaak Closing", + "confidence": 0.7, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Service/ZgwRulesBase.php", + "method": "validateExternalUrl", + "class": "ZgwRulesBase", + "visibility": "protected", + "capability": "zgw-business-rules-compliance", + "req_id": "ZRC-007", + "req_title": "Eindstatus and Zaak Closing", + "confidence": 0.7, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Service/ZgwRulesBase.php", + "method": "fetchExternalUrl", + "class": "ZgwRulesBase", + "visibility": "protected", + "capability": "zgw-business-rules-compliance", + "req_id": "ZRC-007", + "req_title": "Eindstatus and Zaak Closing", + "confidence": 0.7, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Service/ZgwRulesBase.php", + "method": "generateIdentificatie", + "class": "ZgwRulesBase", + "visibility": "protected", + "capability": "zgw-business-rules-compliance", + "req_id": "ZRC-007", + "req_title": "Eindstatus and Zaak Closing", + "confidence": 0.7, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Service/ZgwRulesBase.php", + "method": "findObjectByField", + "class": "ZgwRulesBase", + "visibility": "protected", + "capability": "zgw-business-rules-compliance", + "req_id": "ZRC-007", + "req_title": "Eindstatus and Zaak Closing", + "confidence": 0.7, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Service/ZgwRulesBase.php", + "method": "findAllObjectsByField", + "class": "ZgwRulesBase", + "visibility": "protected", + "capability": "zgw-business-rules-compliance", + "req_id": "ZRC-007", + "req_title": "Eindstatus and Zaak Closing", + "confidence": 0.7, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Service/ZgwRulesBase.php", + "method": "findBySchemaKey", + "class": "ZgwRulesBase", + "visibility": "protected", + "capability": "zgw-business-rules-compliance", + "req_id": "ZRC-007", + "req_title": "Eindstatus and Zaak Closing", + "confidence": 0.7, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Service/ZgwRulesBase.php", + "method": "checkFieldUniqueness", + "class": "ZgwRulesBase", + "visibility": "protected", + "capability": "zgw-business-rules-compliance", + "req_id": "ZRC-007", + "req_title": "Eindstatus and Zaak Closing", + "confidence": 0.7, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Service/ZgwService.php", + "method": "mapAuditTrailToZgw", + "class": "ZgwService", + "visibility": "private", + "capability": "zgw-api-mapping", + "req_id": "REQ-002", + "req_title": "ZGW API routes MUST be exposed via OpenRegister's Endpoint system", + "confidence": 0.75, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "__construct()" + }, + { + "file": "lib/Service/ZgwZrcRulesService.php", + "method": "deriveVertrouwelijkheidaanduiding", + "class": "ZgwZrcRulesService", + "visibility": "private", + "capability": "zgw-business-rules-compliance", + "req_id": "ZRC-007", + "req_title": "Eindstatus and Zaak Closing", + "confidence": 0.7, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "rulesZakenCreate()" + }, + { + "file": "lib/Service/ZgwZrcRulesService.php", + "method": "validateSubResourceType", + "class": "ZgwZrcRulesService", + "visibility": "private", + "capability": "zgw-business-rules-compliance", + "req_id": "ZRC-007", + "req_title": "Eindstatus and Zaak Closing", + "confidence": 0.7, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "rulesZakenCreate()" + }, + { + "file": "lib/Service/ZgwZrcRulesService.php", + "method": "validateZioInformatieobjecttype", + "class": "ZgwZrcRulesService", + "visibility": "private", + "capability": "zgw-business-rules-compliance", + "req_id": "ZRC-007", + "req_title": "Eindstatus and Zaak Closing", + "confidence": 0.7, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "rulesZakenCreate()" + }, + { + "file": "lib/Service/ZgwZrcRulesService.php", + "method": "validateZaakFields", + "class": "ZgwZrcRulesService", + "visibility": "private", + "capability": "zgw-business-rules-compliance", + "req_id": "ZRC-007", + "req_title": "Eindstatus and Zaak Closing", + "confidence": 0.7, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "rulesZakenCreate()" + }, + { + "file": "lib/Service/ZgwZrcRulesService.php", + "method": "validateHoofdzaakNesting", + "class": "ZgwZrcRulesService", + "visibility": "private", + "capability": "zgw-business-rules-compliance", + "req_id": "ZRC-007", + "req_title": "Eindstatus and Zaak Closing", + "confidence": 0.7, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "rulesZakenCreate()" + }, + { + "file": "lib/Service/ZgwZrcRulesService.php", + "method": "validateProductenOfDiensten", + "class": "ZgwZrcRulesService", + "visibility": "private", + "capability": "zgw-business-rules-compliance", + "req_id": "ZRC-007", + "req_title": "Eindstatus and Zaak Closing", + "confidence": 0.7, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "rulesZakenCreate()" + }, + { + "file": "lib/Service/ZgwZrcRulesService.php", + "method": "checkZioImmutability", + "class": "ZgwZrcRulesService", + "visibility": "private", + "capability": "zgw-business-rules-compliance", + "req_id": "ZRC-007", + "req_title": "Eindstatus and Zaak Closing", + "confidence": 0.7, + "needs_review": true, + "signal": "Pass B \u2014 inherited from public sibling in same class", + "inherits_from": "rulesZakenCreate()" + }, + { + "file": "src/App.vue", + "method": "onSidebarSearch", + "class": null, + "visibility": "public", + "capability": "procest-app-scaffold", + "req_id": "REQ-001", + "req_title": "1: App MUST be a valid Nextcloud app with proper metadata", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/App.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "procest-app-scaffold", + "req_id": "REQ-001", + "req_title": "1: App MUST be a valid Nextcloud app with proper metadata", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/components/map/AddressSearch.vue", + "method": "onInput", + "class": null, + "visibility": "public", + "capability": "map-component", + "req_id": "REQ-MAP-01", + "req_title": "Base Map Component", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/components/map/AddressSearch.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "map-component", + "req_id": "REQ-MAP-01", + "req_title": "Base Map Component", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/components/map/CaseMap.vue", + "method": "initMap", + "class": null, + "visibility": "public", + "capability": "map-component", + "req_id": "REQ-MAP-01", + "req_title": "Base Map Component", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/components/map/LocationPicker.vue", + "method": "initMap", + "class": null, + "visibility": "public", + "capability": "map-component", + "req_id": "REQ-MAP-01", + "req_title": "Base Map Component", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/components/map/LocationPicker.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "map-component", + "req_id": "REQ-MAP-01", + "req_title": "Base Map Component", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/components/map/LocationPicker.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "map-component", + "req_id": "REQ-MAP-01", + "req_title": "Base Map Component", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/components/map/MapLayerSwitcher.vue", + "method": "toggleLayer", + "class": null, + "visibility": "public", + "capability": "map-component", + "req_id": "REQ-MAP-01", + "req_title": "Base Map Component", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/components/map/MapLayerSwitcher.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "map-component", + "req_id": "REQ-MAP-01", + "req_title": "Base Map Component", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/components/map/SpatialFilter.vue", + "method": "initDrawLayer", + "class": null, + "visibility": "public", + "capability": "map-component", + "req_id": "REQ-MAP-01", + "req_title": "Base Map Component", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/navigation/MainMenu.vue", + "method": "openLink", + "class": null, + "visibility": "public", + "capability": "procest-app-scaffold", + "req_id": "REQ-001", + "req_title": "1: App MUST be a valid Nextcloud app with proper metadata", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/CaseMapView.vue", + "method": "loadData", + "class": null, + "visibility": "public", + "capability": "case-map-overview", + "req_id": "REQ-OVERVIEW-01", + "req_title": "Cases Map View", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/Dashboard.vue", + "method": "loadDashboardData", + "class": null, + "visibility": "public", + "capability": "dashboard", + "req_id": "REQ-DASH-001", + "req_title": "KPI Cards Row [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/Dashboard.vue", + "method": "for", + "class": null, + "visibility": "public", + "capability": "dashboard", + "req_id": "REQ-DASH-001", + "req_title": "KPI Cards Row [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/DoorlooptijdDashboard.vue", + "method": "loadData", + "class": null, + "visibility": "public", + "capability": "doorlooptijd-dashboard", + "req_id": "REQ-001", + "req_title": "SLA compliance rate widget [V1]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/MyWork.vue", + "method": "getCaseTypeName", + "class": null, + "visibility": "public", + "capability": "my-work", + "req_id": "REQ-MYWORK-001", + "req_title": "Personal Workload View [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/Werkvoorraad.vue", + "method": "loadData", + "class": null, + "visibility": "public", + "capability": "my-work", + "req_id": "REQ-MYWORK-001", + "req_title": "Personal Workload View [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/Werkvoorraad.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "my-work", + "req_id": "REQ-MYWORK-001", + "req_title": "Personal Workload View [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/Werkvoorraad.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "my-work", + "req_id": "REQ-MYWORK-001", + "req_title": "Personal Workload View [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/CaseCreateDialog.vue", + "method": "loadCaseTypes", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/CaseDetail.vue", + "method": "getTaskPriorityLabel", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/CaseList.vue", + "method": "loadCaseTypes", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/CaseList.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/CaseList.vue", + "method": "for", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/ActivityTimeline.vue", + "method": "getIcon", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/AddParticipantDialog.vue", + "method": "submit", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/AddParticipantDialog.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/AdvicePanel.vue", + "method": "defaultDeadline", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/AdviceRequestPanel.vue", + "method": "getStatusLabel", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/AiAssistantPanel.vue", + "method": "askQuestion", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/AiAssistantPanel.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/AiClassifyDialog.vue", + "method": "classify", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/AiExtractDialog.vue", + "method": "extract", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/AiSuggestionCard.vue", + "method": "formatValue", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/AiSuggestionCard.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/AiSummaryPanel.vue", + "method": "generate", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/AppointmentBookingDialog.vue", + "method": "loadSlots", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/AppointmentBookingDialog.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/AppointmentSection.vue", + "method": "loadAppointments", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/BerichtenboxComposeDialog.vue", + "method": "validate", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/BerichtenboxComposeDialog.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/BerichtenboxTab.vue", + "method": "loadMessages", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/CaseTransferDialog.vue", + "method": "submitTransfer", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/ConsultationPanel.vue", + "method": "getStatusLabel", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/CreateShareDialog.vue", + "method": "createShare", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/CustomPropertiesPanel.vue", + "method": "loadData", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/DecisionsSection.vue", + "method": "loadData", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/DocumentAssessmentPanel.vue", + "method": "getAssessment", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/DocumentChecklist.vue", + "method": "loadData", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/EmailComposer.vue", + "method": "onTemplateSelected", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/EmailComposer.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/EmailThread.vue", + "method": "formatDateTime", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/EmailThread.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/EmailThread.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/EnforcementPanel.vue", + "method": "statusLabel", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/EnforcementWizard.vue", + "method": "submit", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/InspectionChecklistPanel.vue", + "method": "startInspection", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/InspectionPanel.vue", + "method": "resultLabel", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/LocationTab.vue", + "method": "loadAddress", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/LocationTab.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/MilestoneProgress.vue", + "method": "stepClass", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/ParticipantsSection.vue", + "method": "fetchData", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/QuickStatusDropdown.vue", + "method": "onStatusChange", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/QuickStatusDropdown.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/ResultSection.vue", + "method": "formatPeriod", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/ResultSection.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/ResultSection.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/ResultSection.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/ShareTab.vue", + "method": "permissionLabel", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/StatusTimeline.vue", + "method": "isPassed", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/SubCasesSection.vue", + "method": "fetchSubCases", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/SubCasesSection.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/SubCasesSection.vue", + "method": "for", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/TenantSwitcher.vue", + "method": "switchTenant", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/TenantSwitcher.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/VoorstellenPanel.vue", + "method": "loadVoorstellen", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/WooIntakeForm.vue", + "method": "update", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/WorkflowTransitions.vue", + "method": "loadWorkflow", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/WorkflowTransitions.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/WorkflowTransitions.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/beroep/BeroepEscalationPanel.vue", + "method": "escalate", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/beroep/CourtProceedingsPanel.vue", + "method": "getRulingLabel", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/bezwaar/AdvisoryReportPanel.vue", + "method": "getAdviceTypeLabel", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/bezwaar/BezwaarDecisionForm.vue", + "method": "getDispositionLabel", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/bezwaar/BezwaarIntakeForm.vue", + "method": "loadExistingObjection", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/bezwaar/BezwaarIntakeForm.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/bezwaar/BezwaarIntakeForm.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/bezwaar/BezwaarTimeline.vue", + "method": "getAdviceTypeLabel", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/components/bezwaar/HearingPanel.vue", + "method": "getHearingStatusLabel", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/widgets/CaseDocumentsWidget.vue", + "method": "getFileIcon", + "class": null, + "visibility": "public", + "capability": "case-dashboard-view", + "req_id": "REQ-CDV-01", + "req_title": "Integrated Case Working Screen", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/widgets/CaseDocumentsWidget.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "case-dashboard-view", + "req_id": "REQ-CDV-01", + "req_title": "Integrated Case Working Screen", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/widgets/CaseDocumentsWidget.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "case-dashboard-view", + "req_id": "REQ-CDV-01", + "req_title": "Integrated Case Working Screen", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/widgets/CaseDocumentsWidget.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "case-dashboard-view", + "req_id": "REQ-CDV-01", + "req_title": "Integrated Case Working Screen", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/widgets/CaseDocumentsWidget.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "case-dashboard-view", + "req_id": "REQ-CDV-01", + "req_title": "Integrated Case Working Screen", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/widgets/CasePropertiesWidget.vue", + "method": "save", + "class": null, + "visibility": "public", + "capability": "case-dashboard-view", + "req_id": "REQ-CDV-01", + "req_title": "Integrated Case Working Screen", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/widgets/CasePropertiesWidget.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "case-dashboard-view", + "req_id": "REQ-CDV-01", + "req_title": "Integrated Case Working Screen", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/widgets/CaseTasksWidget.vue", + "method": "dueDateClass", + "class": null, + "visibility": "public", + "capability": "case-dashboard-view", + "req_id": "REQ-CDV-01", + "req_title": "Integrated Case Working Screen", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/widgets/CaseTasksWidget.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "case-dashboard-view", + "req_id": "REQ-CDV-01", + "req_title": "Integrated Case Working Screen", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/widgets/CaseTasksWidget.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "case-dashboard-view", + "req_id": "REQ-CDV-01", + "req_title": "Integrated Case Working Screen", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/widgets/CaseTimelineWidget.vue", + "method": "onStatusSelected", + "class": null, + "visibility": "public", + "capability": "case-dashboard-view", + "req_id": "REQ-CDV-01", + "req_title": "Integrated Case Working Screen", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/cases/widgets/CaseTimelineWidget.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "case-dashboard-view", + "req_id": "REQ-CDV-01", + "req_title": "Integrated Case Working Screen", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/complaints/ComplaintDetail.vue", + "method": "loadComplaint", + "class": null, + "visibility": "public", + "capability": "bezwaar-lifecycle", + "req_id": "REQ-001", + "req_title": "Bezwaar Case Type Pre-Seeded Configuration", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/complaints/ComplaintList.vue", + "method": "loadComplaints", + "class": null, + "visibility": "public", + "capability": "bezwaar-lifecycle", + "req_id": "REQ-001", + "req_title": "Bezwaar Case Type Pre-Seeded Configuration", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/complaints/components/ComplaintCreateDialog.vue", + "method": "validate", + "class": null, + "visibility": "public", + "capability": "bezwaar-lifecycle", + "req_id": "REQ-001", + "req_title": "Bezwaar Case Type Pre-Seeded Configuration", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/complaints/components/ComplaintCreateDialog.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "bezwaar-lifecycle", + "req_id": "REQ-001", + "req_title": "Bezwaar Case Type Pre-Seeded Configuration", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/dashboard/ActivityFeed.vue", + "method": "typeIcon", + "class": null, + "visibility": "public", + "capability": "dashboard", + "req_id": "REQ-DASH-001", + "req_title": "KPI Cards Row [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/dashboard/CaseMapWidget.vue", + "method": "getColor", + "class": null, + "visibility": "public", + "capability": "case-map-overview", + "req_id": "REQ-OVERVIEW-01", + "req_title": "Cases Map View", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/dashboard/CaseMapWidget.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "case-map-overview", + "req_id": "REQ-OVERVIEW-01", + "req_title": "Cases Map View", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/dashboard/CaseMapWidget.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "case-map-overview", + "req_id": "REQ-OVERVIEW-01", + "req_title": "Cases Map View", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/dashboard/CaseMapWidget.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "case-map-overview", + "req_id": "REQ-OVERVIEW-01", + "req_title": "Cases Map View", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/dashboard/OverduePanel.vue", + "method": "severityClass", + "class": null, + "visibility": "public", + "capability": "signalering-widgets", + "req_id": "REQ-001", + "req_title": "Deadline Alerts Widget [V1]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/dashboard/OverduePanel.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "signalering-widgets", + "req_id": "REQ-001", + "req_title": "Deadline Alerts Widget [V1]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/dashboard/OverduePanel.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "signalering-widgets", + "req_id": "REQ-001", + "req_title": "Deadline Alerts Widget [V1]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/dashboard/StatusChart.vue", + "method": "barWidth", + "class": null, + "visibility": "public", + "capability": "dashboard", + "req_id": "REQ-DASH-001", + "req_title": "KPI Cards Row [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/settings/AdminRoot.vue", + "method": "reimport", + "class": null, + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/settings/CaseTypeAdmin.vue", + "method": "openDetail", + "class": null, + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/settings/CaseTypeDetail.vue", + "method": "loadCaseType", + "class": null, + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/settings/CaseTypeDetail.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/settings/CaseTypeList.vue", + "method": "fetchCaseTypes", + "class": null, + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/settings/CaseTypeList.vue", + "method": "for", + "class": null, + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/settings/MapLayerSettings.vue", + "method": "emptyForm", + "class": null, + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/settings/ParafeerRouteAdmin.vue", + "method": "loadData", + "class": null, + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/settings/PartnerAdmin.vue", + "method": "editPartner", + "class": null, + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/settings/Settings.vue", + "method": "save", + "class": null, + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/settings/Settings.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/settings/Settings.vue", + "method": "setTimeout", + "class": null, + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/settings/WorkflowEditor.vue", + "method": "loadData", + "class": null, + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/settings/ZgwMappingSettings.vue", + "method": "editMapping", + "class": null, + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/settings/components/DurationPicker.vue", + "method": "onDaysChange", + "class": null, + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/settings/components/DurationPicker.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/settings/components/LhsMatrixAdmin.vue", + "method": "updateCell", + "class": null, + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/settings/components/LhsMatrixAdmin.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/settings/components/StepConfigPanel.vue", + "method": "parseChecklist", + "class": null, + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/settings/components/StepConfigPanel.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/settings/components/StepConfigPanel.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/settings/components/TransitionConfigPanel.vue", + "method": "parseGuards", + "class": null, + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/settings/components/TransitionConfigPanel.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/settings/components/TransitionConfigPanel.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/settings/components/VthTemplateLibrary.vue", + "method": "selectTemplate", + "class": null, + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/settings/components/WorkflowNode.vue", + "method": "onMouseDown", + "class": null, + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/settings/components/WorkflowPalette.vue", + "method": "onDragStart", + "class": null, + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/settings/tabs/AiSettingsTab.vue", + "method": "updateSetting", + "class": null, + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/settings/tabs/AppointmentSettingsTab.vue", + "method": "saveBackend", + "class": null, + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/settings/tabs/BerichtenboxSettingsTab.vue", + "method": "testConnection", + "class": null, + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/settings/tabs/ChecklistAdmin.vue", + "method": "createChecklist", + "class": null, + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/settings/tabs/DocumentTypesTab.vue", + "method": "loadItems", + "class": null, + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/settings/tabs/PropertiesTab.vue", + "method": "fetchPropertyDefs", + "class": null, + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/settings/tabs/ResultTypesTab.vue", + "method": "loadItems", + "class": null, + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/settings/tabs/ResultsTab.vue", + "method": "formatPeriod", + "class": null, + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/settings/tabs/ResultsTab.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/settings/tabs/ResultsTab.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/settings/tabs/RoleTypesTab.vue", + "method": "loadItems", + "class": null, + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/settings/tabs/RolesTab.vue", + "method": "genericRoleLabel", + "class": null, + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/settings/tabs/StatusesTab.vue", + "method": "getEmptyForm", + "class": null, + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/settings/tabs/TemplatesTab.vue", + "method": "loadTemplates", + "class": null, + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/settings/tabs/TemplatesTab.vue", + "method": "generateUrl", + "class": null, + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/settings/tabs/TenantSettingsTab.vue", + "method": "create", + "class": null, + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/settings/tabs/WorkflowTab.vue", + "method": "loadVersions", + "class": null, + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/settings/tabs/WorkflowTab.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "admin-settings", + "req_id": "REQ-ADMIN-001", + "req_title": "Nextcloud Admin Panel Registration [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/tasks/TaskCreateDialog.vue", + "method": "submit", + "class": null, + "visibility": "public", + "capability": "task-management", + "req_id": "REQ-TASK-001", + "req_title": "Task CRUD", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/tasks/TaskCreateDialog.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "task-management", + "req_id": "REQ-TASK-001", + "req_title": "Task CRUD", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/tasks/TaskDetail.vue", + "method": "startEditing", + "class": null, + "visibility": "public", + "capability": "task-management", + "req_id": "REQ-TASK-001", + "req_title": "Task CRUD", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/tasks/TaskList.vue", + "method": "getPriorityLabel", + "class": null, + "visibility": "public", + "capability": "task-management", + "req_id": "REQ-TASK-001", + "req_title": "Task CRUD", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/voorstellen/VoorstelDetail.vue", + "method": "loadVoorstel", + "class": null, + "visibility": "public", + "capability": "voorstel-management", + "req_id": "REQ-001", + "req_title": "Voorstel Schema Registration", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/voorstellen/VoorstelList.vue", + "method": "loadVoorstellen", + "class": null, + "visibility": "public", + "capability": "voorstel-management", + "req_id": "REQ-001", + "req_title": "Voorstel Schema Registration", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/voorstellen/components/AuditTrail.vue", + "method": "formatAction", + "class": null, + "visibility": "public", + "capability": "voorstel-management", + "req_id": "REQ-001", + "req_title": "Voorstel Schema Registration", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/voorstellen/components/BesluitRegistration.vue", + "method": "register", + "class": null, + "visibility": "public", + "capability": "voorstel-management", + "req_id": "REQ-001", + "req_title": "Voorstel Schema Registration", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/voorstellen/components/BesluitRegistration.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "voorstel-management", + "req_id": "REQ-001", + "req_title": "Voorstel Schema Registration", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/voorstellen/components/ParafeerActionBar.vue", + "method": "formatStepType", + "class": null, + "visibility": "public", + "capability": "voorstel-management", + "req_id": "REQ-001", + "req_title": "Voorstel Schema Registration", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/voorstellen/components/ParafeerInbox.vue", + "method": "loadVoorstellen", + "class": null, + "visibility": "public", + "capability": "voorstel-management", + "req_id": "REQ-001", + "req_title": "Voorstel Schema Registration", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/voorstellen/components/ProgressTimeline.vue", + "method": "isCompleted", + "class": null, + "visibility": "public", + "capability": "voorstel-management", + "req_id": "REQ-001", + "req_title": "Voorstel Schema Registration", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/voorstellen/components/VoorstelCreateDialog.vue", + "method": "onCaseSelected", + "class": null, + "visibility": "public", + "capability": "voorstel-management", + "req_id": "REQ-001", + "req_title": "Voorstel Schema Registration", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/voorstellen/components/VoorstelCreateDialog.vue", + "method": "if", + "class": null, + "visibility": "public", + "capability": "voorstel-management", + "req_id": "REQ-001", + "req_title": "Voorstel Schema Registration", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/widgets/CasesOverviewWidget.vue", + "method": "onShow", + "class": null, + "visibility": "public", + "capability": "dashboard", + "req_id": "REQ-DASH-001", + "req_title": "KPI Cards Row [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/widgets/DeadlineAlertsWidget.vue", + "method": "onShow", + "class": null, + "visibility": "public", + "capability": "signalering-widgets", + "req_id": "REQ-001", + "req_title": "Deadline Alerts Widget [V1]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/widgets/MyTasksWidget.vue", + "method": "onShow", + "class": null, + "visibility": "public", + "capability": "my-work", + "req_id": "REQ-MYWORK-001", + "req_title": "Personal Workload View [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/widgets/OverdueCasesWidget.vue", + "method": "onShow", + "class": null, + "visibility": "public", + "capability": "signalering-widgets", + "req_id": "REQ-001", + "req_title": "Deadline Alerts Widget [V1]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/widgets/StalledCasesWidget.vue", + "method": "onShow", + "class": null, + "visibility": "public", + "capability": "signalering-widgets", + "req_id": "REQ-001", + "req_title": "Deadline Alerts Widget [V1]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/widgets/StartCaseWidget.vue", + "method": "fetchCaseTypes", + "class": null, + "visibility": "public", + "capability": "dashboard", + "req_id": "REQ-DASH-001", + "req_title": "KPI Cards Row [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/views/widgets/TaskRemindersWidget.vue", + "method": "onShow", + "class": null, + "visibility": "public", + "capability": "signalering-widgets", + "req_id": "REQ-001", + "req_title": "Deadline Alerts Widget [V1]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/services/coordinateService.js", + "method": "isRDCoordinate", + "class": null, + "visibility": "public", + "capability": "pdok-integration", + "req_id": "REQ-PDOK-01", + "req_title": "PDOK Tile Services (Base Maps)", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/services/coordinateService.js", + "method": "rdToWgs84", + "class": null, + "visibility": "public", + "capability": "pdok-integration", + "req_id": "REQ-PDOK-01", + "req_title": "PDOK Tile Services (Base Maps)", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/services/coordinateService.js", + "method": "wgs84ToRd", + "class": null, + "visibility": "public", + "capability": "pdok-integration", + "req_id": "REQ-PDOK-01", + "req_title": "PDOK Tile Services (Base Maps)", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/services/coordinateService.js", + "method": "ensureWgs84", + "class": null, + "visibility": "public", + "capability": "pdok-integration", + "req_id": "REQ-PDOK-01", + "req_title": "PDOK Tile Services (Base Maps)", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/services/coordinateService.js", + "method": "convertCoordinates", + "class": null, + "visibility": "public", + "capability": "pdok-integration", + "req_id": "REQ-PDOK-01", + "req_title": "PDOK Tile Services (Base Maps)", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/services/gisProxyService.js", + "method": "proxyRequest", + "class": null, + "visibility": "public", + "capability": "wms-wfs-layers", + "req_id": "REQ-LAYER-01", + "req_title": "Admin Layer Configuration", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/services/gisProxyService.js", + "method": "getCapabilities", + "class": null, + "visibility": "public", + "capability": "wms-wfs-layers", + "req_id": "REQ-LAYER-01", + "req_title": "Admin Layer Configuration", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/services/pdokService.js", + "method": "suggest", + "class": null, + "visibility": "public", + "capability": "pdok-integration", + "req_id": "REQ-PDOK-01", + "req_title": "PDOK Tile Services (Base Maps)", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/services/pdokService.js", + "method": "lookup", + "class": null, + "visibility": "public", + "capability": "pdok-integration", + "req_id": "REQ-PDOK-01", + "req_title": "PDOK Tile Services (Base Maps)", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/services/pdokService.js", + "method": "free", + "class": null, + "visibility": "public", + "capability": "pdok-integration", + "req_id": "REQ-PDOK-01", + "req_title": "PDOK Tile Services (Base Maps)", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/services/pdokService.js", + "method": "reverse", + "class": null, + "visibility": "public", + "capability": "pdok-integration", + "req_id": "REQ-PDOK-01", + "req_title": "PDOK Tile Services (Base Maps)", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/services/pdokService.js", + "method": "extractCoordinates", + "class": null, + "visibility": "public", + "capability": "pdok-integration", + "req_id": "REQ-PDOK-01", + "req_title": "PDOK Tile Services (Base Maps)", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/services/pdokService.js", + "method": "formatAddress", + "class": null, + "visibility": "public", + "capability": "pdok-integration", + "req_id": "REQ-PDOK-01", + "req_title": "PDOK Tile Services (Base Maps)", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/services/taskApi.js", + "method": "getHeaders", + "class": null, + "visibility": "public", + "capability": "task-management", + "req_id": "REQ-TASK-001", + "req_title": "Task CRUD", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/services/taskApi.js", + "method": "mapCalDavPriority", + "class": null, + "visibility": "public", + "capability": "task-management", + "req_id": "REQ-TASK-001", + "req_title": "Task CRUD", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/services/taskApi.js", + "method": "normalizeCalDavTask", + "class": null, + "visibility": "public", + "capability": "task-management", + "req_id": "REQ-TASK-001", + "req_title": "Task CRUD", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/services/taskApi.js", + "method": "fetchTasksForObject", + "class": null, + "visibility": "public", + "capability": "task-management", + "req_id": "REQ-TASK-001", + "req_title": "Task CRUD", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/services/taskApi.js", + "method": "fetchTasksForCases", + "class": null, + "visibility": "public", + "capability": "task-management", + "req_id": "REQ-TASK-001", + "req_title": "Task CRUD", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/store/modules/bezwaar.js", + "method": "addWorkingDays", + "class": null, + "visibility": "public", + "capability": "procest-object-store", + "req_id": "REQ-001", + "req_title": "1: Object store MUST use createObjectStore from shared library with plugins", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/store/modules/bezwaar.js", + "method": "addWeeks", + "class": null, + "visibility": "public", + "capability": "procest-object-store", + "req_id": "REQ-001", + "req_title": "1: Object store MUST use createObjectStore from shared library with plugins", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/store/modules/bezwaar.js", + "method": "daysDifference", + "class": null, + "visibility": "public", + "capability": "procest-object-store", + "req_id": "REQ-001", + "req_title": "1: Object store MUST use createObjectStore from shared library with plugins", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/store/modules/workflow.js", + "method": "generateUUID", + "class": null, + "visibility": "public", + "capability": "procest-object-store", + "req_id": "REQ-001", + "req_title": "1: Object store MUST use createObjectStore from shared library with plugins", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/store/store.js", + "method": "initializeStores", + "class": null, + "visibility": "public", + "capability": "procest-object-store", + "req_id": "REQ-001", + "req_title": "1: Object store MUST use createObjectStore from shared library with plugins", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/caseHelpers.js", + "method": "calculateDeadline", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/caseHelpers.js", + "method": "generateIdentifier", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/caseHelpers.js", + "method": "isCaseOverdue", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/caseHelpers.js", + "method": "isCaseDueToday", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/caseHelpers.js", + "method": "isCaseDueTomorrow", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/caseHelpers.js", + "method": "getCaseOverdueText", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/caseHelpers.js", + "method": "formatDeadlineCountdown", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/caseHelpers.js", + "method": "getDaysElapsed", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/caseHelpers.js", + "method": "getDaysRemaining", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/caseHelpers.js", + "method": "formatDate", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/caseHelpers.js", + "method": "formatDateShort", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/caseTypeValidation.js", + "method": "getOriginOptions", + "class": null, + "visibility": "public", + "capability": "case-types", + "req_id": "REQ-CT-01", + "req_title": "Case Type CRUD", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/caseTypeValidation.js", + "method": "getConfidentialityOptions", + "class": null, + "visibility": "public", + "capability": "case-types", + "req_id": "REQ-CT-01", + "req_title": "Case Type CRUD", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/caseTypeValidation.js", + "method": "validateCaseType", + "class": null, + "visibility": "public", + "capability": "case-types", + "req_id": "REQ-CT-01", + "req_title": "Case Type CRUD", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/caseTypeValidation.js", + "method": "validateForPublish", + "class": null, + "visibility": "public", + "capability": "case-types", + "req_id": "REQ-CT-01", + "req_title": "Case Type CRUD", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/caseTypeValidation.js", + "method": "getFieldLabel", + "class": null, + "visibility": "public", + "capability": "case-types", + "req_id": "REQ-CT-01", + "req_title": "Case Type CRUD", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/caseValidation.js", + "method": "isCaseTypeUsable", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/caseValidation.js", + "method": "getCaseTypeUnusableReason", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/caseValidation.js", + "method": "validateCaseCreate", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/caseValidation.js", + "method": "validateCaseUpdate", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/caseValidation.js", + "method": "validateStatusChange", + "class": null, + "visibility": "public", + "capability": "case-management", + "req_id": "REQ-CM-01", + "req_title": "Case Creation", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/dashboardHelpers.js", + "method": "todayString", + "class": null, + "visibility": "public", + "capability": "dashboard", + "req_id": "REQ-DASH-001", + "req_title": "KPI Cards Row [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/dashboardHelpers.js", + "method": "computeKpis", + "class": null, + "visibility": "public", + "capability": "dashboard", + "req_id": "REQ-DASH-001", + "req_title": "KPI Cards Row [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/dashboardHelpers.js", + "method": "aggregateByStatus", + "class": null, + "visibility": "public", + "capability": "dashboard", + "req_id": "REQ-DASH-001", + "req_title": "KPI Cards Row [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/dashboardHelpers.js", + "method": "getOverdueCases", + "class": null, + "visibility": "public", + "capability": "dashboard", + "req_id": "REQ-DASH-001", + "req_title": "KPI Cards Row [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/dashboardHelpers.js", + "method": "getRecentActivity", + "class": null, + "visibility": "public", + "capability": "dashboard", + "req_id": "REQ-DASH-001", + "req_title": "KPI Cards Row [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/dashboardHelpers.js", + "method": "getMyWorkItems", + "class": null, + "visibility": "public", + "capability": "dashboard", + "req_id": "REQ-DASH-001", + "req_title": "KPI Cards Row [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/dashboardHelpers.js", + "method": "endOfWeek", + "class": null, + "visibility": "public", + "capability": "dashboard", + "req_id": "REQ-DASH-001", + "req_title": "KPI Cards Row [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/dashboardHelpers.js", + "method": "getGroupedMyWorkItems", + "class": null, + "visibility": "public", + "capability": "dashboard", + "req_id": "REQ-DASH-001", + "req_title": "KPI Cards Row [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/dashboardHelpers.js", + "method": "getDeadlineAlerts", + "class": null, + "visibility": "public", + "capability": "dashboard", + "req_id": "REQ-DASH-001", + "req_title": "KPI Cards Row [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/dashboardHelpers.js", + "method": "getTaskDueReminders", + "class": null, + "visibility": "public", + "capability": "dashboard", + "req_id": "REQ-DASH-001", + "req_title": "KPI Cards Row [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/dashboardHelpers.js", + "method": "getStalledCases", + "class": null, + "visibility": "public", + "capability": "dashboard", + "req_id": "REQ-DASH-001", + "req_title": "KPI Cards Row [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/dashboardHelpers.js", + "method": "formatRelativeTime", + "class": null, + "visibility": "public", + "capability": "dashboard", + "req_id": "REQ-DASH-001", + "req_title": "KPI Cards Row [MVP]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/decisionHelpers.js", + "method": "getDecisionValidity", + "class": null, + "visibility": "public", + "capability": "roles-decisions", + "req_id": "REQ-ROLE-001", + "req_title": "Role Assignment on Cases", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/decisionHelpers.js", + "method": "formatDecisionDate", + "class": null, + "visibility": "public", + "capability": "roles-decisions", + "req_id": "REQ-ROLE-001", + "req_title": "Role Assignment on Cases", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/decisionHelpers.js", + "method": "validateDecision", + "class": null, + "visibility": "public", + "capability": "roles-decisions", + "req_id": "REQ-ROLE-001", + "req_title": "Role Assignment on Cases", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/doorlooptijdHelpers.js", + "method": "parseDurationToDays", + "class": null, + "visibility": "public", + "capability": "doorlooptijd-dashboard", + "req_id": "REQ-001", + "req_title": "SLA compliance rate widget [V1]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/doorlooptijdHelpers.js", + "method": "getProcessingDays", + "class": null, + "visibility": "public", + "capability": "doorlooptijd-dashboard", + "req_id": "REQ-001", + "req_title": "SLA compliance rate widget [V1]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/doorlooptijdHelpers.js", + "method": "getSlaTargetDays", + "class": null, + "visibility": "public", + "capability": "doorlooptijd-dashboard", + "req_id": "REQ-001", + "req_title": "SLA compliance rate widget [V1]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/doorlooptijdHelpers.js", + "method": "buildCaseTypeMap", + "class": null, + "visibility": "public", + "capability": "doorlooptijd-dashboard", + "req_id": "REQ-001", + "req_title": "SLA compliance rate widget [V1]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/doorlooptijdHelpers.js", + "method": "computeSlaCompliance", + "class": null, + "visibility": "public", + "capability": "doorlooptijd-dashboard", + "req_id": "REQ-001", + "req_title": "SLA compliance rate widget [V1]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/doorlooptijdHelpers.js", + "method": "computeProcessingTimeDistribution", + "class": null, + "visibility": "public", + "capability": "doorlooptijd-dashboard", + "req_id": "REQ-001", + "req_title": "SLA compliance rate widget [V1]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/doorlooptijdHelpers.js", + "method": "computeMonthlyTrend", + "class": null, + "visibility": "public", + "capability": "doorlooptijd-dashboard", + "req_id": "REQ-001", + "req_title": "SLA compliance rate widget [V1]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/doorlooptijdHelpers.js", + "method": "getAtRiskCases", + "class": null, + "visibility": "public", + "capability": "doorlooptijd-dashboard", + "req_id": "REQ-001", + "req_title": "SLA compliance rate widget [V1]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/doorlooptijdHelpers.js", + "method": "computePerformanceTable", + "class": null, + "visibility": "public", + "capability": "doorlooptijd-dashboard", + "req_id": "REQ-001", + "req_title": "SLA compliance rate widget [V1]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/durationHelpers.js", + "method": "isValidDuration", + "class": null, + "visibility": "public", + "capability": "doorlooptijd-dashboard", + "req_id": "REQ-001", + "req_title": "SLA compliance rate widget [V1]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/durationHelpers.js", + "method": "parseDuration", + "class": null, + "visibility": "public", + "capability": "doorlooptijd-dashboard", + "req_id": "REQ-001", + "req_title": "SLA compliance rate widget [V1]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/durationHelpers.js", + "method": "formatDuration", + "class": null, + "visibility": "public", + "capability": "doorlooptijd-dashboard", + "req_id": "REQ-001", + "req_title": "SLA compliance rate widget [V1]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/durationHelpers.js", + "method": "getDurationError", + "class": null, + "visibility": "public", + "capability": "doorlooptijd-dashboard", + "req_id": "REQ-001", + "req_title": "SLA compliance rate widget [V1]", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/i18nResolver.js", + "method": "getUserLocale", + "class": null, + "visibility": "public", + "capability": "procest-app-scaffold", + "req_id": "REQ-001", + "req_title": "1: App MUST be a valid Nextcloud app with proper metadata", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/i18nResolver.js", + "method": "resolveTranslatable", + "class": null, + "visibility": "public", + "capability": "procest-app-scaffold", + "req_id": "REQ-001", + "req_title": "1: App MUST be a valid Nextcloud app with proper metadata", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/i18nResolver.js", + "method": "resolveField", + "class": null, + "visibility": "public", + "capability": "procest-app-scaffold", + "req_id": "REQ-001", + "req_title": "1: App MUST be a valid Nextcloud app with proper metadata", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/i18nResolver.js", + "method": "resolveText", + "class": null, + "visibility": "public", + "capability": "procest-app-scaffold", + "req_id": "REQ-001", + "req_title": "1: App MUST be a valid Nextcloud app with proper metadata", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/openregisterCheck.js", + "method": "checkOpenRegisterStatus", + "class": null, + "visibility": "public", + "capability": "openregister-integration", + "req_id": "REQ-OREG-001", + "req_title": "Configuration File", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/openregisterCheck.js", + "method": "getStatusMessage", + "class": null, + "visibility": "public", + "capability": "openregister-integration", + "req_id": "REQ-OREG-001", + "req_title": "Configuration File", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/parafeerEngine.js", + "method": "getRouteSteps", + "class": null, + "visibility": "public", + "capability": "parafeerroute-engine", + "req_id": "REQ-001", + "req_title": "Parafeerroute Schema Registration", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/parafeerEngine.js", + "method": "getCurrentStep", + "class": null, + "visibility": "public", + "capability": "parafeerroute-engine", + "req_id": "REQ-001", + "req_title": "Parafeerroute Schema Registration", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/parafeerEngine.js", + "method": "isActiveActor", + "class": null, + "visibility": "public", + "capability": "parafeerroute-engine", + "req_id": "REQ-001", + "req_title": "Parafeerroute Schema Registration", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/parafeerEngine.js", + "method": "getNextStep", + "class": null, + "visibility": "public", + "capability": "parafeerroute-engine", + "req_id": "REQ-001", + "req_title": "Parafeerroute Schema Registration", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/parafeerEngine.js", + "method": "getStatusAfterAdvance", + "class": null, + "visibility": "public", + "capability": "parafeerroute-engine", + "req_id": "REQ-001", + "req_title": "Parafeerroute Schema Registration", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/parafeerEngine.js", + "method": "createRouteSnapshot", + "class": null, + "visibility": "public", + "capability": "parafeerroute-engine", + "req_id": "REQ-001", + "req_title": "Parafeerroute Schema Registration", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/parafeerEngine.js", + "method": "insertAdHocStep", + "class": null, + "visibility": "public", + "capability": "parafeerroute-engine", + "req_id": "REQ-001", + "req_title": "Parafeerroute Schema Registration", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/parafeerEngine.js", + "method": "markStepSkipped", + "class": null, + "visibility": "public", + "capability": "parafeerroute-engine", + "req_id": "REQ-001", + "req_title": "Parafeerroute Schema Registration", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/parafeerEngine.js", + "method": "findDefaultRoute", + "class": null, + "visibility": "public", + "capability": "parafeerroute-engine", + "req_id": "REQ-001", + "req_title": "Parafeerroute Schema Registration", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/taskHelpers.js", + "method": "getPriorityLevels", + "class": null, + "visibility": "public", + "capability": "task-management", + "req_id": "REQ-TASK-001", + "req_title": "Task CRUD", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/taskHelpers.js", + "method": "isOverdue", + "class": null, + "visibility": "public", + "capability": "task-management", + "req_id": "REQ-TASK-001", + "req_title": "Task CRUD", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/taskHelpers.js", + "method": "isDueToday", + "class": null, + "visibility": "public", + "capability": "task-management", + "req_id": "REQ-TASK-001", + "req_title": "Task CRUD", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/taskHelpers.js", + "method": "getOverdueText", + "class": null, + "visibility": "public", + "capability": "task-management", + "req_id": "REQ-TASK-001", + "req_title": "Task CRUD", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/taskHelpers.js", + "method": "formatDueDate", + "class": null, + "visibility": "public", + "capability": "task-management", + "req_id": "REQ-TASK-001", + "req_title": "Task CRUD", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/taskHelpers.js", + "method": "prioritySortWeight", + "class": null, + "visibility": "public", + "capability": "task-management", + "req_id": "REQ-TASK-001", + "req_title": "Task CRUD", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/taskHelpers.js", + "method": "statusGroupWeight", + "class": null, + "visibility": "public", + "capability": "task-management", + "req_id": "REQ-TASK-001", + "req_title": "Task CRUD", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/taskHelpers.js", + "method": "sortTasks", + "class": null, + "visibility": "public", + "capability": "task-management", + "req_id": "REQ-TASK-001", + "req_title": "Task CRUD", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/taskLifecycle.js", + "method": "getStatusLabels", + "class": null, + "visibility": "public", + "capability": "task-management", + "req_id": "REQ-TASK-001", + "req_title": "Task CRUD", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/taskLifecycle.js", + "method": "getTransitionLabels", + "class": null, + "visibility": "public", + "capability": "task-management", + "req_id": "REQ-TASK-001", + "req_title": "Task CRUD", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/taskLifecycle.js", + "method": "getAllowedTransitions", + "class": null, + "visibility": "public", + "capability": "task-management", + "req_id": "REQ-TASK-001", + "req_title": "Task CRUD", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/taskLifecycle.js", + "method": "validateTransition", + "class": null, + "visibility": "public", + "capability": "task-management", + "req_id": "REQ-TASK-001", + "req_title": "Task CRUD", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/taskLifecycle.js", + "method": "getStatusLabel", + "class": null, + "visibility": "public", + "capability": "task-management", + "req_id": "REQ-TASK-001", + "req_title": "Task CRUD", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/taskLifecycle.js", + "method": "getTransitionLabel", + "class": null, + "visibility": "public", + "capability": "task-management", + "req_id": "REQ-TASK-001", + "req_title": "Task CRUD", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/taskLifecycle.js", + "method": "isTerminalStatus", + "class": null, + "visibility": "public", + "capability": "task-management", + "req_id": "REQ-TASK-001", + "req_title": "Task CRUD", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/taskValidation.js", + "method": "validateTaskCreate", + "class": null, + "visibility": "public", + "capability": "task-management", + "req_id": "REQ-TASK-001", + "req_title": "Task CRUD", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/taskValidation.js", + "method": "validateTaskUpdate", + "class": null, + "visibility": "public", + "capability": "task-management", + "req_id": "REQ-TASK-001", + "req_title": "Task CRUD", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + }, + { + "file": "src/utils/taskValidation.js", + "method": "validateTaskTransition", + "class": null, + "visibility": "public", + "capability": "task-management", + "req_id": "REQ-TASK-001", + "req_title": "Task CRUD", + "confidence": 0.78, + "needs_review": true, + "signal": "frontend path-based capability match; specific REQ per method deferred", + "inherits_from": null + } + ], + "bucket_2a": { + "workflow-import-export": [ + { + "file": "lib/Controller/CaseDefinitionController.php", + "method": "export", + "observed_behavior": "CaseDefinitionController::export()" + }, + { + "file": "lib/Controller/CaseDefinitionController.php", + "method": "validate", + "observed_behavior": "CaseDefinitionController::validate()" + }, + { + "file": "lib/Controller/CaseDefinitionController.php", + "method": "import", + "observed_behavior": "CaseDefinitionController::import()" + }, + { + "file": "lib/Service/CaseDefinitionExportService.php", + "method": "exportCaseDefinition", + "observed_behavior": "CaseDefinitionExportService::exportCaseDefinition()" + }, + { + "file": "lib/Service/CaseDefinitionImportService.php", + "method": "validatePackage", + "observed_behavior": "CaseDefinitionImportService::validatePackage()" + }, + { + "file": "lib/Service/CaseDefinitionImportService.php", + "method": "importCaseDefinition", + "observed_behavior": "CaseDefinitionImportService::importCaseDefinition()" + }, + { + "file": "lib/Service/CaseDefinitionExportService.php", + "method": "buildManifest", + "observed_behavior": "CaseDefinitionExportService::buildManifest()" + }, + { + "file": "lib/Service/CaseDefinitionExportService.php", + "method": "exportComponent", + "observed_behavior": "CaseDefinitionExportService::exportComponent()" + }, + { + "file": "lib/Service/CaseDefinitionExportService.php", + "method": "incrementVersion", + "observed_behavior": "CaseDefinitionExportService::incrementVersion()" + }, + { + "file": "lib/Service/CaseDefinitionImportService.php", + "method": "importComponent", + "observed_behavior": "CaseDefinitionImportService::importComponent()" + }, + { + "file": "lib/Service/CaseDefinitionImportService.php", + "method": "importWorkflows", + "observed_behavior": "CaseDefinitionImportService::importWorkflows()" + } + ], + "advice-management": [ + { + "file": "lib/Controller/ConsultationController.php", + "method": "index", + "observed_behavior": "ConsultationController::index()" + }, + { + "file": "lib/Controller/ConsultationController.php", + "method": "create", + "observed_behavior": "ConsultationController::create()" + }, + { + "file": "lib/Controller/ConsultationController.php", + "method": "updateStatus", + "observed_behavior": "ConsultationController::updateStatus()" + }, + { + "file": "lib/Controller/ConsultationController.php", + "method": "submitResponse", + "observed_behavior": "ConsultationController::submitResponse()" + }, + { + "file": "lib/Controller/ConsultationController.php", + "method": "overdue", + "observed_behavior": "ConsultationController::overdue()" + }, + { + "file": "lib/Service/ConsultationService.php", + "method": "createConsultation", + "observed_behavior": "ConsultationService::createConsultation()" + }, + { + "file": "lib/Service/ConsultationService.php", + "method": "getConsultationsForCase", + "observed_behavior": "ConsultationService::getConsultationsForCase()" + }, + { + "file": "lib/Service/ConsultationService.php", + "method": "updateStatus", + "observed_behavior": "ConsultationService::updateStatus()" + }, + { + "file": "lib/Service/ConsultationService.php", + "method": "submitResponse", + "observed_behavior": "ConsultationService::submitResponse()" + }, + { + "file": "lib/Service/ConsultationService.php", + "method": "getOverdueConsultations", + "observed_behavior": "ConsultationService::getOverdueConsultations()" + } + ], + "case-management": [ + { + "file": "lib/Controller/EmailController.php", + "method": "send", + "observed_behavior": "EmailController::send()" + }, + { + "file": "lib/Controller/EmailController.php", + "method": "sendFromTemplate", + "observed_behavior": "EmailController::sendFromTemplate()" + }, + { + "file": "lib/Controller/EmailController.php", + "method": "preview", + "observed_behavior": "EmailController::preview()" + }, + { + "file": "lib/Controller/EmailController.php", + "method": "templates", + "observed_behavior": "EmailController::templates()" + }, + { + "file": "lib/Service/CaseEmailService.php", + "method": "sendEmail", + "observed_behavior": "CaseEmailService::sendEmail()" + }, + { + "file": "lib/Service/CaseEmailService.php", + "method": "sendFromTemplate", + "observed_behavior": "CaseEmailService::sendFromTemplate()" + }, + { + "file": "lib/Service/CaseEmailService.php", + "method": "resolveVariables", + "observed_behavior": "CaseEmailService::resolveVariables()" + }, + { + "file": "lib/Service/CaseEmailService.php", + "method": "findUnresolvedVariables", + "observed_behavior": "CaseEmailService::findUnresolvedVariables()" + }, + { + "file": "lib/Service/CaseEmailService.php", + "method": "processInbound", + "observed_behavior": "CaseEmailService::processInbound()" + } + ], + "wms-wfs-layers": [ + { + "file": "lib/Controller/GisProxyController.php", + "method": "capabilities", + "observed_behavior": "GisProxyController::capabilities()" + }, + { + "file": "lib/Service/GisProxyService.php", + "method": "getCapabilities", + "observed_behavior": "GisProxyService::getCapabilities()" + } + ], + "admin-settings": [ + { + "file": "lib/Controller/SettingsController.php", + "method": "getObjectService", + "observed_behavior": "SettingsController::getObjectService()" + }, + { + "file": "lib/Controller/SettingsController.php", + "method": "getConfigurationService", + "observed_behavior": "SettingsController::getConfigurationService()" + }, + { + "file": "lib/Controller/SettingsController.php", + "method": "index", + "observed_behavior": "SettingsController::index()" + }, + { + "file": "lib/Controller/SettingsController.php", + "method": "create", + "observed_behavior": "SettingsController::create()" + }, + { + "file": "lib/Controller/SettingsController.php", + "method": "load", + "observed_behavior": "SettingsController::load()" + }, + { + "file": "lib/Service/SettingsService.php", + "method": "isOpenRegisterAvailable", + "observed_behavior": "SettingsService::isOpenRegisterAvailable()" + }, + { + "file": "lib/Service/SettingsService.php", + "method": "loadConfiguration", + "observed_behavior": "SettingsService::loadConfiguration()" + }, + { + "file": "lib/Service/SettingsService.php", + "method": "getSettings", + "observed_behavior": "SettingsService::getSettings()" + }, + { + "file": "lib/Service/SettingsService.php", + "method": "updateSettings", + "observed_behavior": "SettingsService::updateSettings()" + }, + { + "file": "lib/Service/SettingsService.php", + "method": "getConfigValue", + "observed_behavior": "SettingsService::getConfigValue()" + }, + { + "file": "lib/Service/SettingsService.php", + "method": "setConfigValue", + "observed_behavior": "SettingsService::setConfigValue()" + }, + { + "file": "lib/Service/SettingsService.php", + "method": "autoConfigureAfterImport", + "observed_behavior": "SettingsService::autoConfigureAfterImport()" + } + ], + "zgw-api-mapping": [ + { + "file": "lib/Middleware/ZgwAuthException.php", + "method": "getStatusCode", + "observed_behavior": "Exception type for ZgwAuthMiddleware" + }, + { + "file": "lib/Middleware/ZgwAuthMiddleware.php", + "method": "beforeController", + "observed_behavior": "ZGW scope-based auth; no REQ covers auth contract" + }, + { + "file": "lib/Middleware/ZgwAuthMiddleware.php", + "method": "afterException", + "observed_behavior": "ZGW scope-based auth; no REQ covers auth contract" + }, + { + "file": "lib/Middleware/ZgwAuthMiddleware.php", + "method": "isConfidentialityAllowed", + "observed_behavior": "ZGW scope-based auth; no REQ covers auth contract" + }, + { + "file": "lib/Service/NotificatieService.php", + "method": "publish", + "observed_behavior": "NotificatieService::publish()" + }, + { + "file": "lib/Middleware/ZgwAuthMiddleware.php", + "method": "loadOpenRegisterServices", + "observed_behavior": "ZGW scope-based auth; no REQ covers auth contract" + }, + { + "file": "lib/Middleware/ZgwAuthMiddleware.php", + "method": "enforceScopes", + "observed_behavior": "ZGW scope-based auth; no REQ covers auth contract" + }, + { + "file": "lib/Middleware/ZgwAuthMiddleware.php", + "method": "scopeGrantCovers", + "observed_behavior": "ZGW scope-based auth; no REQ covers auth contract" + }, + { + "file": "lib/Middleware/ZgwAuthMiddleware.php", + "method": "decodeJwtPayload", + "observed_behavior": "ZGW scope-based auth; no REQ covers auth contract" + }, + { + "file": "lib/Middleware/ZgwAuthMiddleware.php", + "method": "findConsumerByIssuer", + "observed_behavior": "ZGW scope-based auth; no REQ covers auth contract" + }, + { + "file": "lib/Service/NotificatieService.php", + "method": "loadOpenRegisterServices", + "observed_behavior": "NotificatieService::loadOpenRegisterServices()" + }, + { + "file": "lib/Service/NotificatieService.php", + "method": "deliver", + "observed_behavior": "NotificatieService::deliver()" + }, + { + "file": "lib/Service/NotificatieService.php", + "method": "deliverToSubscription", + "observed_behavior": "NotificatieService::deliverToSubscription()" + } + ], + "zgw-business-rules-compliance": [ + { + "file": "lib/Service/ZgwBrcRulesService.php", + "method": "rulesBesluitenCreate", + "observed_behavior": "ZgwBrcRulesService::rulesBesluitenCreate()" + }, + { + "file": "lib/Service/ZgwBrcRulesService.php", + "method": "rulesBesluitenUpdate", + "observed_behavior": "ZgwBrcRulesService::rulesBesluitenUpdate()" + }, + { + "file": "lib/Service/ZgwBrcRulesService.php", + "method": "rulesBesluitenPatch", + "observed_behavior": "ZgwBrcRulesService::rulesBesluitenPatch()" + }, + { + "file": "lib/Service/ZgwBrcRulesService.php", + "method": "rulesBesluitinformatieobjectenCreate", + "observed_behavior": "ZgwBrcRulesService::rulesBesluitinformatieobjectenCreate()" + }, + { + "file": "lib/Service/ZgwDrcRulesService.php", + "method": "rulesEnkelvoudiginformatieobjectenCreate", + "observed_behavior": "ZgwDrcRulesService::rulesEnkelvoudiginformatieobjectenCreate()" + }, + { + "file": "lib/Service/ZgwDrcRulesService.php", + "method": "rulesEnkelvoudiginformatieobjectenUpdate", + "observed_behavior": "ZgwDrcRulesService::rulesEnkelvoudiginformatieobjectenUpdate()" + }, + { + "file": "lib/Service/ZgwDrcRulesService.php", + "method": "rulesEnkelvoudiginformatieobjectenPatch", + "observed_behavior": "ZgwDrcRulesService::rulesEnkelvoudiginformatieobjectenPatch()" + }, + { + "file": "lib/Service/ZgwDrcRulesService.php", + "method": "rulesEnkelvoudiginformatieobjectenDestroy", + "observed_behavior": "ZgwDrcRulesService::rulesEnkelvoudiginformatieobjectenDestroy()" + }, + { + "file": "lib/Service/ZgwDrcRulesService.php", + "method": "rulesObjectinformatieobjectenCreate", + "observed_behavior": "ZgwDrcRulesService::rulesObjectinformatieobjectenCreate()" + }, + { + "file": "lib/Service/ZgwZtcRulesService.php", + "method": "checkConceptProtection", + "observed_behavior": "ZgwZtcRulesService::checkConceptProtection()" + }, + { + "file": "lib/Service/ZgwZtcRulesService.php", + "method": "defaultConcept", + "observed_behavior": "ZgwZtcRulesService::defaultConcept()" + }, + { + "file": "lib/Service/ZgwZtcRulesService.php", + "method": "preserveConcept", + "observed_behavior": "ZgwZtcRulesService::preserveConcept()" + }, + { + "file": "lib/Service/ZgwZtcRulesService.php", + "method": "rulesZaaktypenCreate", + "observed_behavior": "ZgwZtcRulesService::rulesZaaktypenCreate()" + }, + { + "file": "lib/Service/ZgwZtcRulesService.php", + "method": "rulesBesluittypenCreate", + "observed_behavior": "ZgwZtcRulesService::rulesBesluittypenCreate()" + }, + { + "file": "lib/Service/ZgwZtcRulesService.php", + "method": "rulesZaaktypeinformatieobjecttypenCreate", + "observed_behavior": "ZgwZtcRulesService::rulesZaaktypeinformatieobjecttypenCreate()" + }, + { + "file": "lib/Service/ZgwZtcRulesService.php", + "method": "rulesResultaattypenCreate", + "observed_behavior": "ZgwZtcRulesService::rulesResultaattypenCreate()" + }, + { + "file": "lib/Service/ZgwBrcRulesService.php", + "method": "checkBesluitTypeImmutability", + "observed_behavior": "ZgwBrcRulesService::checkBesluitTypeImmutability()" + }, + { + "file": "lib/Service/ZgwBrcRulesService.php", + "method": "checkBesluitFieldImmutability", + "observed_behavior": "ZgwBrcRulesService::checkBesluitFieldImmutability()" + }, + { + "file": "lib/Service/ZgwBrcRulesService.php", + "method": "preserveImmutableBesluitFields", + "observed_behavior": "ZgwBrcRulesService::preserveImmutableBesluitFields()" + }, + { + "file": "lib/Service/ZgwBrcRulesService.php", + "method": "checkBesluitIdentificatieUnique", + "observed_behavior": "ZgwBrcRulesService::checkBesluitIdentificatieUnique()" + }, + { + "file": "lib/Service/ZgwBrcRulesService.php", + "method": "validateZaakBesluittypeRelation", + "observed_behavior": "ZgwBrcRulesService::validateZaakBesluittypeRelation()" + }, + { + "file": "lib/Service/ZgwBrcRulesService.php", + "method": "validateBioInformatieobjecttype", + "observed_behavior": "ZgwBrcRulesService::validateBioInformatieobjecttype()" + }, + { + "file": "lib/Service/ZgwDrcRulesService.php", + "method": "findOioRelationsForDocument", + "observed_behavior": "ZgwDrcRulesService::findOioRelationsForDocument()" + }, + { + "file": "lib/Service/ZgwDrcRulesService.php", + "method": "validateIndicatieGebruiksrechtTrue", + "observed_behavior": "ZgwDrcRulesService::validateIndicatieGebruiksrechtTrue()" + }, + { + "file": "lib/Service/ZgwDrcRulesService.php", + "method": "validateObjectUrl", + "observed_behavior": "ZgwDrcRulesService::validateObjectUrl()" + }, + { + "file": "lib/Service/ZgwDrcRulesService.php", + "method": "validateOioCrossRegister", + "observed_behavior": "ZgwDrcRulesService::validateOioCrossRegister()" + }, + { + "file": "lib/Service/ZgwDrcRulesService.php", + "method": "checkOioUniqueness", + "observed_behavior": "ZgwDrcRulesService::checkOioUniqueness()" + }, + { + "file": "lib/Service/ZgwDrcRulesService.php", + "method": "searchDuplicateRelation", + "observed_behavior": "ZgwDrcRulesService::searchDuplicateRelation()" + }, + { + "file": "lib/Service/ZgwDrcRulesService.php", + "method": "validateLock", + "observed_behavior": "ZgwDrcRulesService::validateLock()" + }, + { + "file": "lib/Service/ZgwDrcRulesService.php", + "method": "deriveVertrouwelijkheidaanduiding", + "observed_behavior": "ZgwDrcRulesService::deriveVertrouwelijkheidaanduiding()" + }, + { + "file": "lib/Service/ZgwZtcRulesService.php", + "method": "checkDirectConceptProtection", + "observed_behavior": "ZgwZtcRulesService::checkDirectConceptProtection()" + }, + { + "file": "lib/Service/ZgwZtcRulesService.php", + "method": "actionLabel", + "observed_behavior": "ZgwZtcRulesService::actionLabel()" + }, + { + "file": "lib/Service/ZgwZtcRulesService.php", + "method": "validateBrondatumArchief", + "observed_behavior": "ZgwZtcRulesService::validateBrondatumArchief()" + }, + { + "file": "lib/Service/ZgwZtcRulesService.php", + "method": "enrichResultaattype", + "observed_behavior": "ZgwZtcRulesService::enrichResultaattype()" + }, + { + "file": "lib/Service/ZgwZtcRulesService.php", + "method": "validateProcestypeMatch", + "observed_behavior": "ZgwZtcRulesService::validateProcestypeMatch()" + }, + { + "file": "lib/Service/ZgwZtcRulesService.php", + "method": "validateFieldPresence", + "observed_behavior": "ZgwZtcRulesService::validateFieldPresence()" + }, + { + "file": "lib/Service/ZgwZtcRulesService.php", + "method": "checkProcestermijnCompatibility", + "observed_behavior": "ZgwZtcRulesService::checkProcestermijnCompatibility()" + }, + { + "file": "lib/Service/ZgwZtcRulesService.php", + "method": "resolveTypeReferences", + "observed_behavior": "ZgwZtcRulesService::resolveTypeReferences()" + }, + { + "file": "lib/Service/ZgwZtcRulesService.php", + "method": "resolveGerelateerdeZaaktypen", + "observed_behavior": "ZgwZtcRulesService::resolveGerelateerdeZaaktypen()" + } + ] + }, + "bucket_2b": { + "appointments": [ + { + "file": "lib/BackgroundJob/AppointmentReminderJob.php", + "method": "run", + "observed_behavior": "AppointmentReminderJob::run()" + }, + { + "file": "lib/Controller/AppointmentController.php", + "method": "index", + "observed_behavior": "AppointmentController::index()" + }, + { + "file": "lib/Controller/AppointmentController.php", + "method": "create", + "observed_behavior": "AppointmentController::create()" + }, + { + "file": "lib/Controller/AppointmentController.php", + "method": "cancel", + "observed_behavior": "AppointmentController::cancel()" + }, + { + "file": "lib/Controller/AppointmentController.php", + "method": "noShow", + "observed_behavior": "AppointmentController::noShow()" + }, + { + "file": "lib/Controller/AppointmentController.php", + "method": "timeslots", + "observed_behavior": "AppointmentController::timeslots()" + }, + { + "file": "lib/Controller/PublicAppointmentController.php", + "method": "view", + "observed_behavior": "PublicAppointmentController::view()" + }, + { + "file": "lib/Controller/PublicAppointmentController.php", + "method": "cancel", + "observed_behavior": "PublicAppointmentController::cancel()" + }, + { + "file": "lib/Service/AppointmentBackend/JccBackend.php", + "method": "getTimeslots", + "observed_behavior": "JccBackend::getTimeslots()" + }, + { + "file": "lib/Service/AppointmentBackend/JccBackend.php", + "method": "bookAppointment", + "observed_behavior": "JccBackend::bookAppointment()" + }, + { + "file": "lib/Service/AppointmentBackend/JccBackend.php", + "method": "cancelAppointment", + "observed_behavior": "JccBackend::cancelAppointment()" + }, + { + "file": "lib/Service/AppointmentBackend/JccBackend.php", + "method": "rescheduleAppointment", + "observed_behavior": "JccBackend::rescheduleAppointment()" + }, + { + "file": "lib/Service/AppointmentBackend/LocalBackend.php", + "method": "getTimeslots", + "observed_behavior": "LocalBackend::getTimeslots()" + }, + { + "file": "lib/Service/AppointmentBackend/LocalBackend.php", + "method": "bookAppointment", + "observed_behavior": "LocalBackend::bookAppointment()" + }, + { + "file": "lib/Service/AppointmentBackend/LocalBackend.php", + "method": "cancelAppointment", + "observed_behavior": "LocalBackend::cancelAppointment()" + }, + { + "file": "lib/Service/AppointmentBackend/LocalBackend.php", + "method": "rescheduleAppointment", + "observed_behavior": "LocalBackend::rescheduleAppointment()" + }, + { + "file": "lib/Service/AppointmentBackend/QmaticBackend.php", + "method": "getTimeslots", + "observed_behavior": "QmaticBackend::getTimeslots()" + }, + { + "file": "lib/Service/AppointmentBackend/QmaticBackend.php", + "method": "bookAppointment", + "observed_behavior": "QmaticBackend::bookAppointment()" + }, + { + "file": "lib/Service/AppointmentBackend/QmaticBackend.php", + "method": "cancelAppointment", + "observed_behavior": "QmaticBackend::cancelAppointment()" + }, + { + "file": "lib/Service/AppointmentBackend/QmaticBackend.php", + "method": "rescheduleAppointment", + "observed_behavior": "QmaticBackend::rescheduleAppointment()" + }, + { + "file": "lib/Service/AppointmentService.php", + "method": "getTimeslots", + "observed_behavior": "AppointmentService::getTimeslots()" + }, + { + "file": "lib/Service/AppointmentService.php", + "method": "bookAppointment", + "observed_behavior": "AppointmentService::bookAppointment()" + }, + { + "file": "lib/Service/AppointmentService.php", + "method": "cancelAppointment", + "observed_behavior": "AppointmentService::cancelAppointment()" + }, + { + "file": "lib/Service/AppointmentService.php", + "method": "markNoShow", + "observed_behavior": "AppointmentService::markNoShow()" + }, + { + "file": "lib/Service/AppointmentService.php", + "method": "getAppointmentsForCase", + "observed_behavior": "AppointmentService::getAppointmentsForCase()" + }, + { + "file": "lib/Service/AppointmentService.php", + "method": "getAppointmentByToken", + "observed_behavior": "AppointmentService::getAppointmentByToken()" + }, + { + "file": "lib/Service/AppointmentService.php", + "method": "getBackend", + "observed_behavior": "AppointmentService::getBackend()" + }, + { + "file": "lib/Service/AppointmentService.php", + "method": "getObjectService", + "observed_behavior": "AppointmentService::getObjectService()" + }, + { + "file": "src/views/public/PublicAppointmentPage.vue", + "method": "formatDateTime", + "observed_behavior": "src/views/public/PublicAppointmentPage.vue::formatDateTime" + }, + { + "file": "src/views/public/PublicAppointmentPage.vue", + "method": "if", + "observed_behavior": "src/views/public/PublicAppointmentPage.vue::if" + }, + { + "file": "src/services/appointmentApi.js", + "method": "listAppointments", + "observed_behavior": "src/services/appointmentApi.js::listAppointments" + }, + { + "file": "src/services/appointmentApi.js", + "method": "bookAppointment", + "observed_behavior": "src/services/appointmentApi.js::bookAppointment" + }, + { + "file": "src/services/appointmentApi.js", + "method": "cancelAppointment", + "observed_behavior": "src/services/appointmentApi.js::cancelAppointment" + }, + { + "file": "src/services/appointmentApi.js", + "method": "markNoShow", + "observed_behavior": "src/services/appointmentApi.js::markNoShow" + }, + { + "file": "src/services/appointmentApi.js", + "method": "getTimeslots", + "observed_behavior": "src/services/appointmentApi.js::getTimeslots" + } + ], + "berichtenbox": [ + { + "file": "lib/BackgroundJob/BerichtenboxReadStatusJob.php", + "method": "run", + "observed_behavior": "BerichtenboxReadStatusJob::run()" + }, + { + "file": "lib/Controller/BerichtenboxController.php", + "method": "send", + "observed_behavior": "BerichtenboxController::send()" + }, + { + "file": "lib/Controller/BerichtenboxController.php", + "method": "messages", + "observed_behavior": "BerichtenboxController::messages()" + }, + { + "file": "lib/Controller/BerichtenboxController.php", + "method": "poll", + "observed_behavior": "BerichtenboxController::poll()" + }, + { + "file": "lib/Service/BerichtenboxAdapter/MockAdapter.php", + "method": "sendMessage", + "observed_behavior": "MockAdapter::sendMessage()" + }, + { + "file": "lib/Service/BerichtenboxAdapter/MockAdapter.php", + "method": "getReadStatus", + "observed_behavior": "MockAdapter::getReadStatus()" + }, + { + "file": "lib/Service/BerichtenboxService.php", + "method": "sendMessage", + "observed_behavior": "BerichtenboxService::sendMessage()" + }, + { + "file": "lib/Service/BerichtenboxService.php", + "method": "getMessagesForCase", + "observed_behavior": "BerichtenboxService::getMessagesForCase()" + }, + { + "file": "lib/Service/BerichtenboxService.php", + "method": "pollReadStatus", + "observed_behavior": "BerichtenboxService::pollReadStatus()" + }, + { + "file": "lib/Service/BerichtenboxService.php", + "method": "validateBsn", + "observed_behavior": "BerichtenboxService::validateBsn()" + }, + { + "file": "lib/Service/BerichtenboxService.php", + "method": "validateMessage", + "observed_behavior": "BerichtenboxService::validateMessage()" + }, + { + "file": "lib/Service/BerichtenboxService.php", + "method": "getAdapter", + "observed_behavior": "BerichtenboxService::getAdapter()" + }, + { + "file": "lib/Service/BerichtenboxService.php", + "method": "getObjectService", + "observed_behavior": "BerichtenboxService::getObjectService()" + }, + { + "file": "src/services/berichtenboxApi.js", + "method": "sendMessage", + "observed_behavior": "src/services/berichtenboxApi.js::sendMessage" + }, + { + "file": "src/services/berichtenboxApi.js", + "method": "listMessages", + "observed_behavior": "src/services/berichtenboxApi.js::listMessages" + }, + { + "file": "src/services/berichtenboxApi.js", + "method": "getTypeCodes", + "observed_behavior": "src/services/berichtenboxApi.js::getTypeCodes" + }, + { + "file": "src/services/berichtenboxApi.js", + "method": "pollReadStatus", + "observed_behavior": "src/services/berichtenboxApi.js::pollReadStatus" + } + ], + "case-sharing": [ + { + "file": "lib/BackgroundJob/ShareMaintenanceJob.php", + "method": "run", + "observed_behavior": "ShareMaintenanceJob::run()" + }, + { + "file": "lib/Controller/CaseSharingController.php", + "method": "listShares", + "observed_behavior": "CaseSharingController::listShares()" + }, + { + "file": "lib/Controller/CaseSharingController.php", + "method": "createShare", + "observed_behavior": "CaseSharingController::createShare()" + }, + { + "file": "lib/Controller/CaseSharingController.php", + "method": "revokeShare", + "observed_behavior": "CaseSharingController::revokeShare()" + }, + { + "file": "lib/Controller/CaseSharingController.php", + "method": "initiateTransfer", + "observed_behavior": "CaseSharingController::initiateTransfer()" + }, + { + "file": "lib/Controller/CaseSharingController.php", + "method": "handleTransfer", + "observed_behavior": "CaseSharingController::handleTransfer()" + }, + { + "file": "lib/Controller/PublicShareController.php", + "method": "accessShare", + "observed_behavior": "PublicShareController::accessShare()" + }, + { + "file": "lib/Controller/PublicShareController.php", + "method": "addComment", + "observed_behavior": "PublicShareController::addComment()" + }, + { + "file": "lib/Controller/PublicShareController.php", + "method": "viewStatus", + "observed_behavior": "PublicShareController::viewStatus()" + }, + { + "file": "lib/Controller/PublicShareController.php", + "method": "loadCaseData", + "observed_behavior": "PublicShareController::loadCaseData()" + }, + { + "file": "lib/Service/CaseSharingService.php", + "method": "generateToken", + "observed_behavior": "CaseSharingService::generateToken()" + }, + { + "file": "lib/Service/CaseSharingService.php", + "method": "createTokenShare", + "observed_behavior": "CaseSharingService::createTokenShare()" + }, + { + "file": "lib/Service/CaseSharingService.php", + "method": "createPartnerShare", + "observed_behavior": "CaseSharingService::createPartnerShare()" + }, + { + "file": "lib/Service/CaseSharingService.php", + "method": "getSharesByCase", + "observed_behavior": "CaseSharingService::getSharesByCase()" + }, + { + "file": "lib/Service/CaseSharingService.php", + "method": "revokeShare", + "observed_behavior": "CaseSharingService::revokeShare()" + }, + { + "file": "lib/Service/CaseSharingService.php", + "method": "validateToken", + "observed_behavior": "CaseSharingService::validateToken()" + }, + { + "file": "lib/Service/CaseSharingService.php", + "method": "getFilteredCaseData", + "observed_behavior": "CaseSharingService::getFilteredCaseData()" + }, + { + "file": "lib/Service/CaseSharingService.php", + "method": "maskBsn", + "observed_behavior": "CaseSharingService::maskBsn()" + }, + { + "file": "lib/Service/CaseSharingService.php", + "method": "recordFailedAttempt", + "observed_behavior": "CaseSharingService::recordFailedAttempt()" + }, + { + "file": "lib/Service/CaseSharingService.php", + "method": "resetFailedAttempts", + "observed_behavior": "CaseSharingService::resetFailedAttempts()" + }, + { + "file": "lib/Service/CaseSharingService.php", + "method": "getObjectService", + "observed_behavior": "CaseSharingService::getObjectService()" + }, + { + "file": "lib/Service/CaseTransferService.php", + "method": "initiateTransfer", + "observed_behavior": "CaseTransferService::initiateTransfer()" + }, + { + "file": "lib/Service/CaseTransferService.php", + "method": "acceptTransfer", + "observed_behavior": "CaseTransferService::acceptTransfer()" + }, + { + "file": "lib/Service/CaseTransferService.php", + "method": "rejectTransfer", + "observed_behavior": "CaseTransferService::rejectTransfer()" + }, + { + "file": "lib/Service/CaseTransferService.php", + "method": "getObjectService", + "observed_behavior": "CaseTransferService::getObjectService()" + }, + { + "file": "src/views/public/PublicCaseView.vue", + "method": "loadShareData", + "observed_behavior": "src/views/public/PublicCaseView.vue::loadShareData" + }, + { + "file": "src/views/public/PublicCaseView.vue", + "method": "if", + "observed_behavior": "src/views/public/PublicCaseView.vue::if" + }, + { + "file": "src/views/public/PublicStatusPage.vue", + "method": "loadStatus", + "observed_behavior": "src/views/public/PublicStatusPage.vue::loadStatus" + }, + { + "file": "src/views/public/PublicStatusPage.vue", + "method": "if", + "observed_behavior": "src/views/public/PublicStatusPage.vue::if" + } + ], + "ai-assistant": [ + { + "file": "lib/Controller/AiController.php", + "method": "classify", + "observed_behavior": "AiController::classify()" + }, + { + "file": "lib/Controller/AiController.php", + "method": "extract", + "observed_behavior": "AiController::extract()" + }, + { + "file": "lib/Controller/AiController.php", + "method": "ask", + "observed_behavior": "AiController::ask()" + }, + { + "file": "lib/Controller/AiController.php", + "method": "summarize", + "observed_behavior": "AiController::summarize()" + }, + { + "file": "lib/Controller/AiController.php", + "method": "suggestRouting", + "observed_behavior": "AiController::suggestRouting()" + }, + { + "file": "lib/Controller/AiController.php", + "method": "suggestNext", + "observed_behavior": "AiController::suggestNext()" + }, + { + "file": "lib/Controller/AiController.php", + "method": "recordAction", + "observed_behavior": "AiController::recordAction()" + }, + { + "file": "lib/Controller/AiController.php", + "method": "auditIndex", + "observed_behavior": "AiController::auditIndex()" + }, + { + "file": "lib/Controller/AiController.php", + "method": "getSettings", + "observed_behavior": "AiController::getSettings()" + }, + { + "file": "lib/Controller/AiController.php", + "method": "updateSettings", + "observed_behavior": "AiController::updateSettings()" + }, + { + "file": "lib/Controller/AiController.php", + "method": "healthCheck", + "observed_behavior": "AiController::healthCheck()" + }, + { + "file": "lib/Controller/AiController.php", + "method": "getCurrentUserId", + "observed_behavior": "AiController::getCurrentUserId()" + }, + { + "file": "lib/Service/AiService.php", + "method": "isEnabled", + "observed_behavior": "AiService::isEnabled()" + }, + { + "file": "lib/Service/AiService.php", + "method": "isFeatureEnabled", + "observed_behavior": "AiService::isFeatureEnabled()" + }, + { + "file": "lib/Service/AiService.php", + "method": "classifyDocument", + "observed_behavior": "AiService::classifyDocument()" + }, + { + "file": "lib/Service/AiService.php", + "method": "extractData", + "observed_behavior": "AiService::extractData()" + }, + { + "file": "lib/Service/AiService.php", + "method": "askQuestion", + "observed_behavior": "AiService::askQuestion()" + }, + { + "file": "lib/Service/AiService.php", + "method": "summarize", + "observed_behavior": "AiService::summarize()" + }, + { + "file": "lib/Service/AiService.php", + "method": "suggestRouting", + "observed_behavior": "AiService::suggestRouting()" + }, + { + "file": "lib/Service/AiService.php", + "method": "suggestNextStep", + "observed_behavior": "AiService::suggestNextStep()" + }, + { + "file": "lib/Service/AiService.php", + "method": "recordUserAction", + "observed_behavior": "AiService::recordUserAction()" + }, + { + "file": "lib/Service/AiService.php", + "method": "testHealth", + "observed_behavior": "AiService::testHealth()" + }, + { + "file": "lib/Service/AiService.php", + "method": "getAiSettings", + "observed_behavior": "AiService::getAiSettings()" + }, + { + "file": "lib/Service/AiService.php", + "method": "getModelIdentifier", + "observed_behavior": "AiService::getModelIdentifier()" + }, + { + "file": "lib/Service/AiService.php", + "method": "stripPiiIfEnabled", + "observed_behavior": "AiService::stripPiiIfEnabled()" + }, + { + "file": "lib/Service/AiService.php", + "method": "callAiModel", + "observed_behavior": "AiService::callAiModel()" + }, + { + "file": "lib/Service/AiService.php", + "method": "recordAuditEntry", + "observed_behavior": "AiService::recordAuditEntry()" + }, + { + "file": "lib/Service/AiService.php", + "method": "buildClassificationPrompt", + "observed_behavior": "AiService::buildClassificationPrompt()" + }, + { + "file": "lib/Service/AiService.php", + "method": "buildExtractionPrompt", + "observed_behavior": "AiService::buildExtractionPrompt()" + }, + { + "file": "lib/Service/AiService.php", + "method": "buildQaPrompt", + "observed_behavior": "AiService::buildQaPrompt()" + }, + { + "file": "lib/Service/AiService.php", + "method": "buildSummaryPrompt", + "observed_behavior": "AiService::buildSummaryPrompt()" + }, + { + "file": "lib/Service/AiService.php", + "method": "buildRoutingPrompt", + "observed_behavior": "AiService::buildRoutingPrompt()" + }, + { + "file": "lib/Service/AiService.php", + "method": "buildNextStepPrompt", + "observed_behavior": "AiService::buildNextStepPrompt()" + }, + { + "file": "src/services/aiApi.js", + "method": "classifyDocument", + "observed_behavior": "src/services/aiApi.js::classifyDocument" + }, + { + "file": "src/services/aiApi.js", + "method": "extractData", + "observed_behavior": "src/services/aiApi.js::extractData" + }, + { + "file": "src/services/aiApi.js", + "method": "askQuestion", + "observed_behavior": "src/services/aiApi.js::askQuestion" + }, + { + "file": "src/services/aiApi.js", + "method": "summarize", + "observed_behavior": "src/services/aiApi.js::summarize" + }, + { + "file": "src/services/aiApi.js", + "method": "suggestRouting", + "observed_behavior": "src/services/aiApi.js::suggestRouting" + }, + { + "file": "src/services/aiApi.js", + "method": "suggestNext", + "observed_behavior": "src/services/aiApi.js::suggestNext" + }, + { + "file": "src/services/aiApi.js", + "method": "getAuditLog", + "observed_behavior": "src/services/aiApi.js::getAuditLog" + }, + { + "file": "src/services/aiApi.js", + "method": "getAiSettings", + "observed_behavior": "src/services/aiApi.js::getAiSettings" + }, + { + "file": "src/services/aiApi.js", + "method": "updateAiSettings", + "observed_behavior": "src/services/aiApi.js::updateAiSettings" + }, + { + "file": "src/services/aiApi.js", + "method": "testAiHealth", + "observed_behavior": "src/services/aiApi.js::testAiHealth" + } + ], + "leges": [ + { + "file": "lib/Controller/LegesController.php", + "method": "calculate", + "observed_behavior": "LegesController::calculate()" + }, + { + "file": "lib/Controller/LegesController.php", + "method": "recalculate", + "observed_behavior": "LegesController::recalculate()" + }, + { + "file": "lib/Controller/LegesController.php", + "method": "verrekening", + "observed_behavior": "LegesController::verrekening()" + }, + { + "file": "lib/Controller/LegesController.php", + "method": "teruggaaf", + "observed_behavior": "LegesController::teruggaaf()" + }, + { + "file": "lib/Controller/LegesController.php", + "method": "export", + "observed_behavior": "LegesController::export()" + }, + { + "file": "lib/Service/LegesCalculationService.php", + "method": "calculate", + "observed_behavior": "LegesCalculationService::calculate()" + }, + { + "file": "lib/Service/LegesCalculationService.php", + "method": "recalculate", + "observed_behavior": "LegesCalculationService::recalculate()" + }, + { + "file": "lib/Service/LegesCalculationService.php", + "method": "calculateVerrekening", + "observed_behavior": "LegesCalculationService::calculateVerrekening()" + }, + { + "file": "lib/Service/LegesCalculationService.php", + "method": "calculateTeruggaaf", + "observed_behavior": "LegesCalculationService::calculateTeruggaaf()" + }, + { + "file": "lib/Service/LegesCalculationService.php", + "method": "calculateArtikel", + "observed_behavior": "LegesCalculationService::calculateArtikel()" + }, + { + "file": "lib/Service/LegesCalculationService.php", + "method": "calculateVast", + "observed_behavior": "LegesCalculationService::calculateVast()" + }, + { + "file": "lib/Service/LegesCalculationService.php", + "method": "calculatePercentage", + "observed_behavior": "LegesCalculationService::calculatePercentage()" + }, + { + "file": "lib/Service/LegesCalculationService.php", + "method": "calculateStaffel", + "observed_behavior": "LegesCalculationService::calculateStaffel()" + }, + { + "file": "lib/Service/LegesCalculationService.php", + "method": "calculateMaximum", + "observed_behavior": "LegesCalculationService::calculateMaximum()" + }, + { + "file": "lib/Service/LegesCalculationService.php", + "method": "calculateCombinatie", + "observed_behavior": "LegesCalculationService::calculateCombinatie()" + }, + { + "file": "lib/Service/LegesExportService.php", + "method": "export", + "observed_behavior": "LegesExportService::export()" + }, + { + "file": "lib/Service/LegesExportService.php", + "method": "exportCSV", + "observed_behavior": "LegesExportService::exportCSV()" + }, + { + "file": "lib/Service/LegesExportService.php", + "method": "exportASCII", + "observed_behavior": "LegesExportService::exportASCII()" + }, + { + "file": "lib/Service/LegesExportService.php", + "method": "exportXML", + "observed_behavior": "LegesExportService::exportXML()" + }, + { + "file": "lib/Service/LegesExportService.php", + "method": "flattenBerekening", + "observed_behavior": "LegesExportService::flattenBerekening()" + }, + { + "file": "lib/Service/LegesExportService.php", + "method": "addXmlElement", + "observed_behavior": "LegesExportService::addXmlElement()" + } + ], + "stuf-protocol": [ + { + "file": "lib/Controller/StufController.php", + "method": "zaken", + "observed_behavior": "StufController::zaken()" + }, + { + "file": "lib/Controller/StufController.php", + "method": "personen", + "observed_behavior": "StufController::personen()" + }, + { + "file": "lib/Controller/StufController.php", + "method": "handleSoapMessage", + "observed_behavior": "StufController::handleSoapMessage()" + }, + { + "file": "lib/Controller/StufController.php", + "method": "handleZakLk01", + "observed_behavior": "StufController::handleZakLk01()" + }, + { + "file": "lib/Controller/StufController.php", + "method": "handleZakLv01", + "observed_behavior": "StufController::handleZakLv01()" + }, + { + "file": "lib/Controller/StufController.php", + "method": "handleNpsLv01", + "observed_behavior": "StufController::handleNpsLv01()" + }, + { + "file": "lib/Controller/StufController.php", + "method": "handleEdcLk01", + "observed_behavior": "StufController::handleEdcLk01()" + }, + { + "file": "lib/Controller/StufController.php", + "method": "handleUnknownMessage", + "observed_behavior": "StufController::handleUnknownMessage()" + }, + { + "file": "lib/Controller/StufController.php", + "method": "extractFields", + "observed_behavior": "StufController::extractFields()" + }, + { + "file": "lib/Controller/StufController.php", + "method": "soapResponse", + "observed_behavior": "StufController::soapResponse()" + }, + { + "file": "lib/Service/StufFieldMappingService.php", + "method": "mapZknToInternal", + "observed_behavior": "StufFieldMappingService::mapZknToInternal()" + }, + { + "file": "lib/Service/StufFieldMappingService.php", + "method": "mapInternalToZkn", + "observed_behavior": "StufFieldMappingService::mapInternalToZkn()" + }, + { + "file": "lib/Service/StufFieldMappingService.php", + "method": "mapBgToInternal", + "observed_behavior": "StufFieldMappingService::mapBgToInternal()" + }, + { + "file": "lib/Service/StufFieldMappingService.php", + "method": "mapInternalToBg", + "observed_behavior": "StufFieldMappingService::mapInternalToBg()" + }, + { + "file": "lib/Service/StufFieldMappingService.php", + "method": "stufDateToIso", + "observed_behavior": "StufFieldMappingService::stufDateToIso()" + }, + { + "file": "lib/Service/StufFieldMappingService.php", + "method": "isoToStufDate", + "observed_behavior": "StufFieldMappingService::isoToStufDate()" + }, + { + "file": "lib/Service/StufFieldMappingService.php", + "method": "isoToStufDateTime", + "observed_behavior": "StufFieldMappingService::isoToStufDateTime()" + }, + { + "file": "lib/Service/StufFieldMappingService.php", + "method": "confidentialityToInternal", + "observed_behavior": "StufFieldMappingService::confidentialityToInternal()" + }, + { + "file": "lib/Service/StufFieldMappingService.php", + "method": "confidentialityToStuf", + "observed_behavior": "StufFieldMappingService::confidentialityToStuf()" + }, + { + "file": "lib/Service/StufFieldMappingService.php", + "method": "addCustomMappings", + "observed_behavior": "StufFieldMappingService::addCustomMappings()" + }, + { + "file": "lib/Service/StufFieldMappingService.php", + "method": "getDefaultMappings", + "observed_behavior": "StufFieldMappingService::getDefaultMappings()" + }, + { + "file": "lib/Service/StufFieldMappingService.php", + "method": "applyMappings", + "observed_behavior": "StufFieldMappingService::applyMappings()" + }, + { + "file": "lib/Service/StufFieldMappingService.php", + "method": "applyReverseMappings", + "observed_behavior": "StufFieldMappingService::applyReverseMappings()" + }, + { + "file": "lib/Service/StufMessageBuilder.php", + "method": "buildSoapEnvelope", + "observed_behavior": "StufMessageBuilder::buildSoapEnvelope()" + }, + { + "file": "lib/Service/StufMessageBuilder.php", + "method": "buildStuurgegevens", + "observed_behavior": "StufMessageBuilder::buildStuurgegevens()" + }, + { + "file": "lib/Service/StufMessageBuilder.php", + "method": "buildBv01", + "observed_behavior": "StufMessageBuilder::buildBv01()" + }, + { + "file": "lib/Service/StufMessageBuilder.php", + "method": "buildFo01", + "observed_behavior": "StufMessageBuilder::buildFo01()" + }, + { + "file": "lib/Service/StufMessageBuilder.php", + "method": "buildSoapFault", + "observed_behavior": "StufMessageBuilder::buildSoapFault()" + }, + { + "file": "lib/Service/StufMessageBuilder.php", + "method": "generateUuid", + "observed_behavior": "StufMessageBuilder::generateUuid()" + } + ], + "templates": [ + { + "file": "lib/Controller/TemplateController.php", + "method": "index", + "observed_behavior": "TemplateController::index()" + }, + { + "file": "lib/Controller/TemplateController.php", + "method": "show", + "observed_behavior": "TemplateController::show()" + }, + { + "file": "lib/Controller/TemplateController.php", + "method": "activate", + "observed_behavior": "TemplateController::activate()" + }, + { + "file": "lib/Service/TemplateLibraryService.php", + "method": "listTemplates", + "observed_behavior": "TemplateLibraryService::listTemplates()" + }, + { + "file": "lib/Service/TemplateLibraryService.php", + "method": "loadTemplate", + "observed_behavior": "TemplateLibraryService::loadTemplate()" + }, + { + "file": "lib/Service/TemplateLibraryService.php", + "method": "activateTemplate", + "observed_behavior": "TemplateLibraryService::activateTemplate()" + } + ], + "multi-tenancy": [ + { + "file": "lib/Controller/TenantController.php", + "method": "index", + "observed_behavior": "TenantController::index()" + }, + { + "file": "lib/Controller/TenantController.php", + "method": "create", + "observed_behavior": "TenantController::create()" + }, + { + "file": "lib/Controller/TenantController.php", + "method": "provision", + "observed_behavior": "TenantController::provision()" + }, + { + "file": "lib/Controller/TenantController.php", + "method": "usage", + "observed_behavior": "TenantController::usage()" + }, + { + "file": "lib/Controller/TenantController.php", + "method": "current", + "observed_behavior": "TenantController::current()" + }, + { + "file": "lib/Controller/TenantController.php", + "method": "isPlatformAdmin", + "observed_behavior": "TenantController::isPlatformAdmin()" + }, + { + "file": "lib/Middleware/TenantMiddleware.php", + "method": "beforeController", + "observed_behavior": "TenantMiddleware::beforeController()" + }, + { + "file": "lib/Middleware/TenantMiddleware.php", + "method": "afterException", + "observed_behavior": "TenantMiddleware::afterException()" + }, + { + "file": "lib/Service/TenantService.php", + "method": "getTenantForUser", + "observed_behavior": "TenantService::getTenantForUser()" + }, + { + "file": "lib/Service/TenantService.php", + "method": "getTenantByGroupId", + "observed_behavior": "TenantService::getTenantByGroupId()" + }, + { + "file": "lib/Service/TenantService.php", + "method": "createTenant", + "observed_behavior": "TenantService::createTenant()" + }, + { + "file": "lib/Service/TenantService.php", + "method": "provisionTenant", + "observed_behavior": "TenantService::provisionTenant()" + }, + { + "file": "lib/Service/TenantService.php", + "method": "getResourceUsage", + "observed_behavior": "TenantService::getResourceUsage()" + }, + { + "file": "lib/Service/TenantService.php", + "method": "isUserInTenant", + "observed_behavior": "TenantService::isUserInTenant()" + }, + { + "file": "lib/Service/TenantService.php", + "method": "isPlatformAdmin", + "observed_behavior": "TenantService::isPlatformAdmin()" + }, + { + "file": "lib/Service/TenantService.php", + "method": "slugify", + "observed_behavior": "TenantService::slugify()" + }, + { + "file": "lib/Service/TenantService.php", + "method": "getObjectService", + "observed_behavior": "TenantService::getObjectService()" + }, + { + "file": "src/services/tenantApi.js", + "method": "listTenants", + "observed_behavior": "src/services/tenantApi.js::listTenants" + }, + { + "file": "src/services/tenantApi.js", + "method": "createTenant", + "observed_behavior": "src/services/tenantApi.js::createTenant" + }, + { + "file": "src/services/tenantApi.js", + "method": "getTenant", + "observed_behavior": "src/services/tenantApi.js::getTenant" + }, + { + "file": "src/services/tenantApi.js", + "method": "updateTenant", + "observed_behavior": "src/services/tenantApi.js::updateTenant" + }, + { + "file": "src/services/tenantApi.js", + "method": "provisionTenant", + "observed_behavior": "src/services/tenantApi.js::provisionTenant" + }, + { + "file": "src/services/tenantApi.js", + "method": "getTenantUsage", + "observed_behavior": "src/services/tenantApi.js::getTenantUsage" + }, + { + "file": "src/services/tenantApi.js", + "method": "getCurrentTenant", + "observed_behavior": "src/services/tenantApi.js::getCurrentTenant" + } + ], + "dso-intake": [ + { + "file": "lib/Service/DsoIntakeService.php", + "method": "processAanvraag", + "observed_behavior": "DsoIntakeService::processAanvraag()" + }, + { + "file": "lib/Service/DsoIntakeService.php", + "method": "getDeadlineDuration", + "observed_behavior": "DsoIntakeService::getDeadlineDuration()" + } + ] + }, + "bucket_3a": [], + "bucket_3b": [ + { + "req": "advice-management#REQ-001", + "title": "Advice request schema" + }, + { + "req": "advice-management#REQ-002", + "title": "Advice panel on case dashboard" + }, + { + "req": "advice-management#REQ-003", + "title": "Advice request form" + }, + { + "req": "automatic-actions#REQ-001", + "title": "Automatic Action Framework" + }, + { + "req": "automatic-actions#REQ-002", + "title": "Action Execution Error Handling" + }, + { + "req": "beroep-escalation#REQ-001", + "title": "Beroep Case Type Pre-Seeded Configuration" + }, + { + "req": "beroep-escalation#REQ-002", + "title": "Beroep Status Types" + }, + { + "req": "beroep-escalation#REQ-003", + "title": "Escalation from Bezwaar to Beroep" + }, + { + "req": "beroep-escalation#REQ-004", + "title": "Court Proceedings Document Management" + }, + { + "req": "beroep-escalation#REQ-005", + "title": "Hoger Beroep Awareness" + }, + { + "req": "bezwaar-advisory-committee#REQ-001", + "title": "Advisory Committee Report Schema" + }, + { + "req": "bezwaar-advisory-committee#REQ-002", + "title": "Committee Composition Tracking" + }, + { + "req": "bezwaar-decision#REQ-001", + "title": "Decision on Objection Schema" + }, + { + "req": "bezwaar-decision#REQ-002", + "title": "Decision Notification" + }, + { + "req": "bezwaar-decision#REQ-003", + "title": "Heroverweging (Full Reconsideration)" + }, + { + "req": "bezwaar-hearing#REQ-001", + "title": "Hearing Session Management" + }, + { + "req": "bezwaar-hearing#REQ-002", + "title": "Hearing Waiver (Afzien van Hoorrecht)" + }, + { + "req": "bezwaar-hearing#REQ-003", + "title": "Hearing Participants and Access Rights" + }, + { + "req": "case-location#REQ-LOC-01", + "title": "Case Detail Map Tab" + }, + { + "req": "case-location#REQ-LOC-02", + "title": "Location Picker" + }, + { + "req": "case-location#REQ-LOC-03", + "title": "Address Display and Reverse Geocoding" + }, + { + "req": "case-location#REQ-LOC-04", + "title": "Case Creation Location" + }, + { + "req": "deelzaak-support#REQ-001", + "title": "Sub-case creation from parent case" + }, + { + "req": "deelzaak-support#REQ-002", + "title": "Sub-cases section on parent case detail" + }, + { + "req": "deelzaak-support#REQ-003", + "title": "Parent case breadcrumb navigation" + }, + { + "req": "deelzaak-support#REQ-004", + "title": "Sub-case progress roll-up on parent case" + }, + { + "req": "deelzaak-support#REQ-005", + "title": "Sub-case count in case list" + }, + { + "req": "deelzaak-support#REQ-006", + "title": "Sub-case deletion protection" + }, + { + "req": "enforcement-lhs#REQ-001", + "title": "LHS matrix configuration" + }, + { + "req": "enforcement-lhs#REQ-002", + "title": "Enforcement action schema" + }, + { + "req": "enforcement-lhs#REQ-003", + "title": "Enforcement wizard" + }, + { + "req": "enforcement-lhs#REQ-004", + "title": "Enforcement panel on case dashboard" + }, + { + "req": "parafering-dashboard#REQ-001", + "title": "Secretariaat Parafering Overview" + }, + { + "req": "parafering-dashboard#REQ-002", + "title": "Personal Parafering Inbox" + }, + { + "req": "parafering-dashboard#REQ-003", + "title": "Send Parafering Reminder" + }, + { + "req": "parafering-dashboard#REQ-004", + "title": "Voorstel List Navigation" + }, + { + "req": "process-step-configuration#REQ-001", + "title": "Process Step CRUD within Workflow" + }, + { + "req": "process-step-configuration#REQ-002", + "title": "Step-to-Task Mapping at Runtime" + }, + { + "req": "procest-case-management#REQ-001", + "title": "1: Register and schemas MUST be auto-configured on install" + }, + { + "req": "procest-case-management#REQ-002", + "title": "2: Cases list view MUST display paginated, searchable case overview" + }, + { + "req": "procest-case-management#REQ-003", + "title": "3: Case create dialog MUST support type-driven case creation" + }, + { + "req": "procest-case-management#REQ-004", + "title": "4: Case detail view MUST display full case information with related data" + }, + { + "req": "procest-case-management#REQ-005", + "title": "5: Status lifecycle MUST support configurable status flows with mandatory result on closure" + }, + { + "req": "procest-case-management#REQ-006", + "title": "6: Deadline and timing MUST support processing deadlines with extensions" + }, + { + "req": "procest-case-management#REQ-007", + "title": "7: Tasks MUST be manageable within case context" + }, + { + "req": "procest-case-management#REQ-008", + "title": "8: Participants MUST be manageable per case" + }, + { + "req": "procest-case-management#REQ-009", + "title": "9: Activity timeline MUST record all case events" + }, + { + "req": "procest-case-management#REQ-010", + "title": "10: Case type administration MUST support configuring case types" + }, + { + "req": "procest-case-management#REQ-011", + "title": "11: Navigation MUST include all primary views" + }, + { + "req": "procest-case-management#REQ-012", + "title": "12: Dashboard MUST provide overview metrics and quick access" + }, + { + "req": "procest-case-management#REQ-013", + "title": "13: ZGW API compatibility MUST be maintained" + }, + { + "req": "role-based-step-routing#REQ-001", + "title": "Role-Based Step Visibility" + }, + { + "req": "role-based-step-routing#REQ-002", + "title": "Role-Based Transition Access" + }, + { + "req": "role-based-step-routing#REQ-003", + "title": "Workflow Inheritance for Role Configuration" + }, + { + "req": "status-transition-engine#REQ-001", + "title": "Guard Evaluation Engine" + }, + { + "req": "status-transition-engine#REQ-002", + "title": "Transition Execution" + }, + { + "req": "status-transition-engine#REQ-003", + "title": "Available Transitions for Current User" + }, + { + "req": "visual-workflow-editor#REQ-001", + "title": "Drag-and-Drop Workflow Canvas" + }, + { + "req": "visual-workflow-editor#REQ-002", + "title": "Workflow Editor Validation" + }, + { + "req": "visual-workflow-editor#REQ-003", + "title": "Step Configuration Panel" + }, + { + "req": "vth-workflow-templates#REQ-001", + "title": "Omgevingsvergunning workflow template" + }, + { + "req": "vth-workflow-templates#REQ-002", + "title": "Toezichtzaak workflow template" + }, + { + "req": "vth-workflow-templates#REQ-003", + "title": "Handhavingszaak workflow template" + }, + { + "req": "vth-workflow-templates#REQ-004", + "title": "VTH workflow template library" + }, + { + "req": "workflow-definition-model#REQ-001", + "title": "Workflow Template Data Model" + }, + { + "req": "workflow-definition-model#REQ-002", + "title": "Workflow Step Data Model" + }, + { + "req": "workflow-definition-model#REQ-003", + "title": "Status Transition Data Model" + }, + { + "req": "workflow-definition-model#REQ-004", + "title": "Pre-Seeded Bezwaar Workflow Template" + }, + { + "req": "workflow-definition-model#REQ-005", + "title": "Pre-Seeded Beroep Workflow Template" + }, + { + "req": "workflow-import-export#REQ-001", + "title": "Export Workflow Template" + }, + { + "req": "workflow-import-export#REQ-002", + "title": "Import Workflow Template" + }, + { + "req": "zaaktype-versioning#REQ-001", + "title": "Workflow Template Versioning" + }, + { + "req": "zaaktype-versioning#REQ-002", + "title": "Case-to-Workflow-Version Binding" + } + ], + "bucket_4": { + "missing-license-in-file-docblock": [ + { + "file": "lib/BackgroundJob/AppointmentReminderJob.php" + }, + { + "file": "lib/BackgroundJob/BerichtenboxReadStatusJob.php" + }, + { + "file": "lib/Controller/AppointmentController.php" + }, + { + "file": "lib/Controller/BerichtenboxController.php" + }, + { + "file": "lib/Controller/PublicAppointmentController.php" + }, + { + "file": "lib/Service/AppointmentBackend/AppointmentBackendInterface.php" + }, + { + "file": "lib/Service/AppointmentBackend/JccBackend.php" + }, + { + "file": "lib/Service/AppointmentBackend/LocalBackend.php" + }, + { + "file": "lib/Service/AppointmentBackend/QmaticBackend.php" + }, + { + "file": "lib/Service/AppointmentService.php" + }, + { + "file": "lib/Service/BerichtenboxAdapter/BerichtenboxAdapterInterface.php" + }, + { + "file": "lib/Service/BerichtenboxAdapter/MockAdapter.php" + }, + { + "file": "lib/Service/BerichtenboxService.php" + } + ], + "missing-copyright-in-file-docblock": [ + { + "file": "lib/BackgroundJob/AppointmentReminderJob.php" + }, + { + "file": "lib/BackgroundJob/BerichtenboxReadStatusJob.php" + }, + { + "file": "lib/Controller/AppointmentController.php" + }, + { + "file": "lib/Controller/BerichtenboxController.php" + }, + { + "file": "lib/Controller/PublicAppointmentController.php" + }, + { + "file": "lib/Service/AppointmentBackend/AppointmentBackendInterface.php" + }, + { + "file": "lib/Service/AppointmentBackend/JccBackend.php" + }, + { + "file": "lib/Service/AppointmentBackend/LocalBackend.php" + }, + { + "file": "lib/Service/AppointmentBackend/QmaticBackend.php" + }, + { + "file": "lib/Service/AppointmentService.php" + }, + { + "file": "lib/Service/BerichtenboxAdapter/BerichtenboxAdapterInterface.php" + }, + { + "file": "lib/Service/BerichtenboxAdapter/MockAdapter.php" + }, + { + "file": "lib/Service/BerichtenboxService.php" + } + ], + "missing-spec-in-file-docblock": [ + { + "file": "lib/AppInfo/Application.php" + }, + { + "file": "lib/BackgroundJob/AppointmentReminderJob.php" + }, + { + "file": "lib/BackgroundJob/BerichtenboxReadStatusJob.php" + }, + { + "file": "lib/BackgroundJob/ShareMaintenanceJob.php" + }, + { + "file": "lib/Controller/AcController.php" + }, + { + "file": "lib/Controller/AiController.php" + }, + { + "file": "lib/Controller/AppointmentController.php" + }, + { + "file": "lib/Controller/BerichtenboxController.php" + }, + { + "file": "lib/Controller/BrcController.php" + }, + { + "file": "lib/Controller/CaseDefinitionController.php" + }, + { + "file": "lib/Controller/CaseSharingController.php" + }, + { + "file": "lib/Controller/ConsultationController.php" + }, + { + "file": "lib/Controller/DashboardController.php" + }, + { + "file": "lib/Controller/DrcController.php" + }, + { + "file": "lib/Controller/EmailController.php" + }, + { + "file": "lib/Controller/GisProxyController.php" + }, + { + "file": "lib/Controller/HealthController.php" + }, + { + "file": "lib/Controller/InspectionController.php" + }, + { + "file": "lib/Controller/LegesController.php" + }, + { + "file": "lib/Controller/MetricsController.php" + }, + { + "file": "lib/Controller/MilestoneController.php" + }, + { + "file": "lib/Controller/NrcController.php" + }, + { + "file": "lib/Controller/ParaferingController.php" + }, + { + "file": "lib/Controller/PublicAppointmentController.php" + }, + { + "file": "lib/Controller/PublicShareController.php" + }, + { + "file": "lib/Controller/SettingsController.php" + }, + { + "file": "lib/Controller/StufController.php" + }, + { + "file": "lib/Controller/TemplateController.php" + }, + { + "file": "lib/Controller/TenantController.php" + }, + { + "file": "lib/Controller/ZgwMappingController.php" + }, + { + "file": "lib/Controller/ZrcController.php" + }, + { + "file": "lib/Controller/ZtcController.php" + }, + { + "file": "lib/Dashboard/CasesOverviewWidget.php" + }, + { + "file": "lib/Dashboard/DeadlineAlertsWidget.php" + }, + { + "file": "lib/Dashboard/MyTasksWidget.php" + }, + { + "file": "lib/Dashboard/OverdueCasesWidget.php" + }, + { + "file": "lib/Dashboard/StalledCasesWidget.php" + }, + { + "file": "lib/Dashboard/StartCaseWidget.php" + }, + { + "file": "lib/Dashboard/TaskRemindersWidget.php" + }, + { + "file": "lib/Listener/DeepLinkRegistrationListener.php" + }, + { + "file": "lib/Middleware/TenantMiddleware.php" + }, + { + "file": "lib/Middleware/ZgwAuthException.php" + }, + { + "file": "lib/Middleware/ZgwAuthMiddleware.php" + }, + { + "file": "lib/Repair/InitializeSettings.php" + }, + { + "file": "lib/Repair/LoadDefaultZgwMappings.php" + }, + { + "file": "lib/Repair/SeedBezwaarBeroepData.php" + }, + { + "file": "lib/Sections/SettingsSection.php" + }, + { + "file": "lib/Service/AiService.php" + }, + { + "file": "lib/Service/AppointmentBackend/AppointmentBackendInterface.php" + }, + { + "file": "lib/Service/AppointmentBackend/JccBackend.php" + }, + { + "file": "lib/Service/AppointmentBackend/LocalBackend.php" + }, + { + "file": "lib/Service/AppointmentBackend/QmaticBackend.php" + }, + { + "file": "lib/Service/AppointmentService.php" + }, + { + "file": "lib/Service/BerichtenboxAdapter/BerichtenboxAdapterInterface.php" + }, + { + "file": "lib/Service/BerichtenboxAdapter/MockAdapter.php" + }, + { + "file": "lib/Service/BerichtenboxService.php" + }, + { + "file": "lib/Service/CaseDefinitionExportService.php" + }, + { + "file": "lib/Service/CaseDefinitionImportService.php" + }, + { + "file": "lib/Service/CaseEmailService.php" + }, + { + "file": "lib/Service/CaseSharingService.php" + }, + { + "file": "lib/Service/CaseTransferService.php" + }, + { + "file": "lib/Service/ChecklistService.php" + }, + { + "file": "lib/Service/ConsultationService.php" + }, + { + "file": "lib/Service/DsoIntakeService.php" + }, + { + "file": "lib/Service/GisProxyService.php" + }, + { + "file": "lib/Service/InspectionService.php" + }, + { + "file": "lib/Service/LegesCalculationService.php" + }, + { + "file": "lib/Service/LegesExportService.php" + }, + { + "file": "lib/Service/MilestoneService.php" + }, + { + "file": "lib/Service/NotificatieService.php" + }, + { + "file": "lib/Service/ParaferingNotificationService.php" + }, + { + "file": "lib/Service/ParaferingService.php" + }, + { + "file": "lib/Service/SeedDataService.php" + }, + { + "file": "lib/Service/SettingsService.php" + }, + { + "file": "lib/Service/StufFieldMappingService.php" + }, + { + "file": "lib/Service/StufMessageBuilder.php" + }, + { + "file": "lib/Service/TemplateLibraryService.php" + }, + { + "file": "lib/Service/TenantService.php" + }, + { + "file": "lib/Service/ZgwBrcRulesService.php" + }, + { + "file": "lib/Service/ZgwBusinessRulesService.php" + }, + { + "file": "lib/Service/ZgwDocumentService.php" + }, + { + "file": "lib/Service/ZgwDrcRulesService.php" + }, + { + "file": "lib/Service/ZgwMappingService.php" + }, + { + "file": "lib/Service/ZgwPaginationHelper.php" + }, + { + "file": "lib/Service/ZgwRulesBase.php" + }, + { + "file": "lib/Service/ZgwService.php" + }, + { + "file": "lib/Service/ZgwZrcRulesService.php" + }, + { + "file": "lib/Service/ZgwZtcRulesService.php" + }, + { + "file": "lib/Settings/AdminSettings.php" + } + ], + "forbidden-patterns": [], + "direct-sql": [] + } + }, + "ignored": 0, + "notes": [ + "case-management/spec.md has duplicated REQ blocks (pilot noted lines 63-945 vs 1013-1946). Pre-retrofit cleanup recommended; counted 45 REQ headings but ~22 are unique.", + "Frontend (Vue/TS) classification is file-level \u2014 every method in a mapped view inherits the capability's first REQ with confidence 0.78 NEEDS-REVIEW. Specific REQ per method requires reading the component body during /opsx-annotate.", + "Large ZGW controllers and rules services (ZrcController 39 methods, ZgwService 37, ZgwZrcRulesService 19) are bucketed via explicit file-level overrides to zgw-api-mapping / zgw-business-rules-compliance. Per-method REQ assignment deferred to annotate.", + "Bucket 2b cluster 'workflow-import-export' is tentative \u2014 a workflow-import-export spec exists (2 REQs) but my classifier kept CaseDefinition* files in 2a until human confirms scope overlap.", + "zgw-business-rules-compliance spec only covers ZRC rules (11 REQs). Methods in ZgwDrcRulesService, ZgwZtcRulesService, ZgwBrcRulesService landed in Bucket 2a \u2014 they extend the capability but have no matching REQ in the spec.", + "Bucket 3b is computed conservatively: only REQs in capabilities that have ZERO Bucket 1 methods are marked unimplemented. REQs in 'touched' capabilities (admin-settings, case-management, etc.) are assumed implemented but not precisely mapped \u2014 their specific REQ-to-method assignment is deferred to /opsx-annotate.", + "3a classification disabled \u2014 git log -S heuristic was unreliable on this greenfield-over-specs codebase; every untouched REQ collapsed to 3b with a note." + ] +} \ No newline at end of file diff --git a/openspec/coverage-report.md b/openspec/coverage-report.md new file mode 100644 index 00000000..551acacf --- /dev/null +++ b/openspec/coverage-report.md @@ -0,0 +1,1224 @@ +# Coverage Report — procest + +Generated: 2026-04-20 08:44 UTC +Branch: `fix/header-info-email-phpcs` +Scanner: opsx-coverage-scan v1 (full per-method pass) + +Supersedes the file-level `coverage-report.pilot.{md,json}` from the 2026-04-20 pilot run. + +## Scope + +- PHP: 89 files under `lib/` scanned (764 methods, excluding Migration/ and Db/ entity boilerplate) +- Frontend: 183 files under `src/` scanned (318 units — Vue component methods + TS/JS functions) +- 331 REQs across 46 capabilities (354 heading hits; 23 dup/synth collapsed) +- `.opsx-ignore` not present — 0 entries suppressed + +## Summary + +| Bucket | Count | Next action | +|---|---|---| +| annotated | 0 | — (already tagged — none: procest is fully legacy) | +| plumbing | 102 (PHP: 102, FE: 0) | — (never tagged) | +| 1 — REQ matched | 678 (PHP: 392, FE: 286) | `/opsx-annotate procest` | +| 2a — existing capability, no REQ | 96 (7 clusters) | `/opsx-reverse-spec procest --extend ` | +| 2b — no capability owner | 206 (9 clusters) | `/opsx-reverse-spec procest --cluster ` | +| 3a — REQ broken (code removed) | 0 | (heuristic disabled — see notes) | +| 3b — REQ never implemented | 73 | Mark deferred or remove | +| 4 — ADR conformance | 115 findings across 3 rules | Follow-up issue | + +> **Large Bucket 1 (678 methods)** — consider annotating one capability at a time when `/opsx-annotate` gains `--capability` support. For now, annotate-all will produce a single large ghost change. + +## Bucket 1 — Ready to annotate + +Will be annotated via ghost change `retrofit-annotate-procest-2026-04-20`. Grouped by capability → file. + +### capability: admin-settings — 54 methods across 33 files + +| File | Method | REQ | Confidence | Signal | +|---|---|---|---|---| +| `lib/Sections/SettingsSection.php` | `__construct()` | REQ-ADMIN-001 | 0.95 | explicit: IIconSection implementation | +| `lib/Sections/SettingsSection.php` | `getID()` | REQ-ADMIN-001 | 0.95 | explicit: IIconSection implementation | +| `lib/Sections/SettingsSection.php` | `getName()` | REQ-ADMIN-001 | 0.95 | explicit: IIconSection implementation | +| `lib/Sections/SettingsSection.php` | `getPriority()` | REQ-ADMIN-001 | 0.95 | explicit: IIconSection implementation | +| `lib/Sections/SettingsSection.php` | `getIcon()` | REQ-ADMIN-001 | 0.95 | explicit: IIconSection implementation | +| `lib/Settings/AdminSettings.php` | `__construct()` | REQ-ADMIN-001 | 0.95 | explicit: ISettings implementation for panel registration | +| `lib/Settings/AdminSettings.php` | `getForm()` | REQ-ADMIN-001 | 0.95 | explicit: ISettings implementation for panel registration | +| `lib/Settings/AdminSettings.php` | `getSection()` | REQ-ADMIN-001 | 0.95 | explicit: ISettings implementation for panel registration | +| `lib/Settings/AdminSettings.php` | `getPriority()` | REQ-ADMIN-001 | 0.95 | explicit: ISettings implementation for panel registration | +| `src/views/settings/AdminRoot.vue` | `reimport()` | REQ-ADMIN-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/settings/CaseTypeAdmin.vue` | `openDetail()` | REQ-ADMIN-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/settings/CaseTypeDetail.vue` | `loadCaseType()` | REQ-ADMIN-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/settings/CaseTypeDetail.vue` | `if()` | REQ-ADMIN-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/settings/CaseTypeList.vue` | `fetchCaseTypes()` | REQ-ADMIN-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/settings/CaseTypeList.vue` | `for()` | REQ-ADMIN-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/settings/MapLayerSettings.vue` | `emptyForm()` | REQ-ADMIN-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/settings/ParafeerRouteAdmin.vue` | `loadData()` | REQ-ADMIN-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/settings/PartnerAdmin.vue` | `editPartner()` | REQ-ADMIN-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/settings/Settings.vue` | `save()` | REQ-ADMIN-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/settings/Settings.vue` | `if()` | REQ-ADMIN-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/settings/Settings.vue` | `setTimeout()` | REQ-ADMIN-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/settings/WorkflowEditor.vue` | `loadData()` | REQ-ADMIN-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/settings/ZgwMappingSettings.vue` | `editMapping()` | REQ-ADMIN-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/settings/components/DurationPicker.vue` | `onDaysChange()` | REQ-ADMIN-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/settings/components/DurationPicker.vue` | `if()` | REQ-ADMIN-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/settings/components/LhsMatrixAdmin.vue` | `updateCell()` | REQ-ADMIN-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/settings/components/LhsMatrixAdmin.vue` | `if()` | REQ-ADMIN-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/settings/components/StepConfigPanel.vue` | `parseChecklist()` | REQ-ADMIN-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/settings/components/StepConfigPanel.vue` | `if()` | REQ-ADMIN-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/settings/components/StepConfigPanel.vue` | `if()` | REQ-ADMIN-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/settings/components/TransitionConfigPanel.vue` | `parseGuards()` | REQ-ADMIN-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/settings/components/TransitionConfigPanel.vue` | `if()` | REQ-ADMIN-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/settings/components/TransitionConfigPanel.vue` | `if()` | REQ-ADMIN-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/settings/components/VthTemplateLibrary.vue` | `selectTemplate()` | REQ-ADMIN-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/settings/components/WorkflowNode.vue` | `onMouseDown()` | REQ-ADMIN-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/settings/components/WorkflowPalette.vue` | `onDragStart()` | REQ-ADMIN-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/settings/tabs/AiSettingsTab.vue` | `updateSetting()` | REQ-ADMIN-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/settings/tabs/AppointmentSettingsTab.vue` | `saveBackend()` | REQ-ADMIN-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/settings/tabs/BerichtenboxSettingsTab.vue` | `testConnection()` | REQ-ADMIN-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/settings/tabs/ChecklistAdmin.vue` | `createChecklist()` | REQ-ADMIN-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/settings/tabs/DocumentTypesTab.vue` | `loadItems()` | REQ-ADMIN-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/settings/tabs/PropertiesTab.vue` | `fetchPropertyDefs()` | REQ-ADMIN-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/settings/tabs/ResultTypesTab.vue` | `loadItems()` | REQ-ADMIN-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/settings/tabs/ResultsTab.vue` | `formatPeriod()` | REQ-ADMIN-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/settings/tabs/ResultsTab.vue` | `if()` | REQ-ADMIN-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/settings/tabs/ResultsTab.vue` | `if()` | REQ-ADMIN-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/settings/tabs/RoleTypesTab.vue` | `loadItems()` | REQ-ADMIN-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/settings/tabs/RolesTab.vue` | `genericRoleLabel()` | REQ-ADMIN-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/settings/tabs/StatusesTab.vue` | `getEmptyForm()` | REQ-ADMIN-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/settings/tabs/TemplatesTab.vue` | `loadTemplates()` | REQ-ADMIN-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/settings/tabs/TemplatesTab.vue` | `generateUrl()` | REQ-ADMIN-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/settings/tabs/TenantSettingsTab.vue` | `create()` | REQ-ADMIN-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/settings/tabs/WorkflowTab.vue` | `loadVersions()` | REQ-ADMIN-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/settings/tabs/WorkflowTab.vue` | `if()` | REQ-ADMIN-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | + +### capability: bezwaar-lifecycle — 4 methods across 3 files + +| File | Method | REQ | Confidence | Signal | +|---|---|---|---|---| +| `src/views/complaints/ComplaintDetail.vue` | `loadComplaint()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/complaints/ComplaintList.vue` | `loadComplaints()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/complaints/components/ComplaintCreateDialog.vue` | `validate()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/complaints/components/ComplaintCreateDialog.vue` | `if()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | + +### capability: case-dashboard-view — 12 methods across 4 files + +| File | Method | REQ | Confidence | Signal | +|---|---|---|---|---| +| `src/views/cases/widgets/CaseDocumentsWidget.vue` | `getFileIcon()` | REQ-CDV-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/widgets/CaseDocumentsWidget.vue` | `if()` | REQ-CDV-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/widgets/CaseDocumentsWidget.vue` | `if()` | REQ-CDV-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/widgets/CaseDocumentsWidget.vue` | `if()` | REQ-CDV-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/widgets/CaseDocumentsWidget.vue` | `if()` | REQ-CDV-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/widgets/CasePropertiesWidget.vue` | `save()` | REQ-CDV-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/widgets/CasePropertiesWidget.vue` | `if()` | REQ-CDV-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/widgets/CaseTasksWidget.vue` | `dueDateClass()` | REQ-CDV-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/widgets/CaseTasksWidget.vue` | `if()` | REQ-CDV-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/widgets/CaseTasksWidget.vue` | `if()` | REQ-CDV-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/widgets/CaseTimelineWidget.vue` | `onStatusSelected()` | REQ-CDV-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/widgets/CaseTimelineWidget.vue` | `if()` | REQ-CDV-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | + +### capability: case-management — 93 methods across 51 files + +| File | Method | REQ | Confidence | Signal | +|---|---|---|---|---| +| `lib/Service/CaseEmailService.php` | `extractCaseNumber()` | REQ-CM-01 | 0.75 ⚠️ NEEDS-REVIEW | name+path keyword match | +| `lib/Service/CaseEmailService.php` | `getTemplatesForCaseType()` | REQ-CM-01 | 0.75 ⚠️ NEEDS-REVIEW | name+path keyword match | +| `lib/Service/CaseEmailService.php` | `loadTemplate()` | REQ-CM-01 | 0.7 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Service/CaseEmailService.php` | `loadCaseData()` | REQ-CM-01 | 0.7 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Service/CaseEmailService.php` | `recordSentEmail()` | REQ-CM-01 | 0.7 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Service/CaseEmailService.php` | `recordReceivedEmail()` | REQ-CM-01 | 0.7 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Service/CaseEmailService.php` | `findCaseByIdentifier()` | REQ-CM-01 | 0.7 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `src/utils/caseHelpers.js` | `calculateDeadline()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/caseHelpers.js` | `generateIdentifier()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/caseHelpers.js` | `isCaseOverdue()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/caseHelpers.js` | `isCaseDueToday()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/caseHelpers.js` | `isCaseDueTomorrow()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/caseHelpers.js` | `getCaseOverdueText()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/caseHelpers.js` | `formatDeadlineCountdown()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/caseHelpers.js` | `getDaysElapsed()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/caseHelpers.js` | `getDaysRemaining()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/caseHelpers.js` | `formatDate()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/caseHelpers.js` | `formatDateShort()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/caseValidation.js` | `isCaseTypeUsable()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/caseValidation.js` | `getCaseTypeUnusableReason()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/caseValidation.js` | `validateCaseCreate()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/caseValidation.js` | `validateCaseUpdate()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/caseValidation.js` | `validateStatusChange()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/CaseCreateDialog.vue` | `loadCaseTypes()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/CaseDetail.vue` | `getTaskPriorityLabel()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/CaseList.vue` | `loadCaseTypes()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/CaseList.vue` | `if()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/CaseList.vue` | `for()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/ActivityTimeline.vue` | `getIcon()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/AddParticipantDialog.vue` | `submit()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/AddParticipantDialog.vue` | `if()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/AdvicePanel.vue` | `defaultDeadline()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/AdviceRequestPanel.vue` | `getStatusLabel()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/AiAssistantPanel.vue` | `askQuestion()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/AiAssistantPanel.vue` | `if()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/AiClassifyDialog.vue` | `classify()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/AiExtractDialog.vue` | `extract()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/AiSuggestionCard.vue` | `formatValue()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/AiSuggestionCard.vue` | `if()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/AiSummaryPanel.vue` | `generate()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/AppointmentBookingDialog.vue` | `loadSlots()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/AppointmentBookingDialog.vue` | `if()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/AppointmentSection.vue` | `loadAppointments()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/BerichtenboxComposeDialog.vue` | `validate()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/BerichtenboxComposeDialog.vue` | `if()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/BerichtenboxTab.vue` | `loadMessages()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/CaseTransferDialog.vue` | `submitTransfer()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/ConsultationPanel.vue` | `getStatusLabel()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/CreateShareDialog.vue` | `createShare()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/CustomPropertiesPanel.vue` | `loadData()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/DecisionsSection.vue` | `loadData()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/DocumentAssessmentPanel.vue` | `getAssessment()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/DocumentChecklist.vue` | `loadData()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/EmailComposer.vue` | `onTemplateSelected()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/EmailComposer.vue` | `if()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/EmailThread.vue` | `formatDateTime()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/EmailThread.vue` | `if()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/EmailThread.vue` | `if()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/EnforcementPanel.vue` | `statusLabel()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/EnforcementWizard.vue` | `submit()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/InspectionChecklistPanel.vue` | `startInspection()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/InspectionPanel.vue` | `resultLabel()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/LocationTab.vue` | `loadAddress()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/LocationTab.vue` | `if()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/MilestoneProgress.vue` | `stepClass()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/ParticipantsSection.vue` | `fetchData()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/QuickStatusDropdown.vue` | `onStatusChange()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/QuickStatusDropdown.vue` | `if()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/ResultSection.vue` | `formatPeriod()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/ResultSection.vue` | `if()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/ResultSection.vue` | `if()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/ResultSection.vue` | `if()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/ShareTab.vue` | `permissionLabel()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/StatusTimeline.vue` | `isPassed()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/SubCasesSection.vue` | `fetchSubCases()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/SubCasesSection.vue` | `if()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/SubCasesSection.vue` | `for()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/TenantSwitcher.vue` | `switchTenant()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/TenantSwitcher.vue` | `if()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/VoorstellenPanel.vue` | `loadVoorstellen()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/WooIntakeForm.vue` | `update()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/WorkflowTransitions.vue` | `loadWorkflow()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/WorkflowTransitions.vue` | `if()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/WorkflowTransitions.vue` | `if()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/beroep/BeroepEscalationPanel.vue` | `escalate()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/beroep/CourtProceedingsPanel.vue` | `getRulingLabel()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/bezwaar/AdvisoryReportPanel.vue` | `getAdviceTypeLabel()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/bezwaar/BezwaarDecisionForm.vue` | `getDispositionLabel()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/bezwaar/BezwaarIntakeForm.vue` | `loadExistingObjection()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/bezwaar/BezwaarIntakeForm.vue` | `if()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/bezwaar/BezwaarIntakeForm.vue` | `if()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/bezwaar/BezwaarTimeline.vue` | `getAdviceTypeLabel()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/cases/components/bezwaar/HearingPanel.vue` | `getHearingStatusLabel()` | REQ-CM-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | + +### capability: case-map-overview — 5 methods across 2 files + +| File | Method | REQ | Confidence | Signal | +|---|---|---|---|---| +| `src/views/CaseMapView.vue` | `loadData()` | REQ-OVERVIEW-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/dashboard/CaseMapWidget.vue` | `getColor()` | REQ-OVERVIEW-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/dashboard/CaseMapWidget.vue` | `if()` | REQ-OVERVIEW-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/dashboard/CaseMapWidget.vue` | `if()` | REQ-OVERVIEW-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/dashboard/CaseMapWidget.vue` | `if()` | REQ-OVERVIEW-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | + +### capability: case-types — 5 methods across 1 files + +| File | Method | REQ | Confidence | Signal | +|---|---|---|---|---| +| `src/utils/caseTypeValidation.js` | `getOriginOptions()` | REQ-CT-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/caseTypeValidation.js` | `getConfidentialityOptions()` | REQ-CT-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/caseTypeValidation.js` | `validateCaseType()` | REQ-CT-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/caseTypeValidation.js` | `validateForPublish()` | REQ-CT-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/caseTypeValidation.js` | `getFieldLabel()` | REQ-CT-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | + +### capability: dashboard — 18 methods across 6 files + +| File | Method | REQ | Confidence | Signal | +|---|---|---|---|---| +| `src/utils/dashboardHelpers.js` | `todayString()` | REQ-DASH-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/dashboardHelpers.js` | `computeKpis()` | REQ-DASH-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/dashboardHelpers.js` | `aggregateByStatus()` | REQ-DASH-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/dashboardHelpers.js` | `getOverdueCases()` | REQ-DASH-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/dashboardHelpers.js` | `getRecentActivity()` | REQ-DASH-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/dashboardHelpers.js` | `getMyWorkItems()` | REQ-DASH-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/dashboardHelpers.js` | `endOfWeek()` | REQ-DASH-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/dashboardHelpers.js` | `getGroupedMyWorkItems()` | REQ-DASH-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/dashboardHelpers.js` | `getDeadlineAlerts()` | REQ-DASH-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/dashboardHelpers.js` | `getTaskDueReminders()` | REQ-DASH-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/dashboardHelpers.js` | `getStalledCases()` | REQ-DASH-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/dashboardHelpers.js` | `formatRelativeTime()` | REQ-DASH-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/Dashboard.vue` | `loadDashboardData()` | REQ-DASH-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/Dashboard.vue` | `for()` | REQ-DASH-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/dashboard/ActivityFeed.vue` | `typeIcon()` | REQ-DASH-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/dashboard/StatusChart.vue` | `barWidth()` | REQ-DASH-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/widgets/CasesOverviewWidget.vue` | `onShow()` | REQ-DASH-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/widgets/StartCaseWidget.vue` | `fetchCaseTypes()` | REQ-DASH-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | + +### capability: doorlooptijd-dashboard — 25 methods across 5 files + +| File | Method | REQ | Confidence | Signal | +|---|---|---|---|---| +| `lib/Controller/MilestoneController.php` | `__construct()` | REQ-006 | 0.8 ⚠️ NEEDS-REVIEW | explicit: Milestone endpoints | +| `lib/Controller/MilestoneController.php` | `progress()` | REQ-006 | 0.8 ⚠️ NEEDS-REVIEW | explicit: Milestone endpoints | +| `lib/Controller/MilestoneController.php` | `mark()` | REQ-006 | 0.8 ⚠️ NEEDS-REVIEW | explicit: Milestone endpoints | +| `lib/Controller/MilestoneController.php` | `reverse()` | REQ-006 | 0.8 ⚠️ NEEDS-REVIEW | explicit: Milestone endpoints | +| `lib/Service/MilestoneService.php` | `__construct()` | REQ-006 | 0.8 ⚠️ NEEDS-REVIEW | explicit: Milestones = doorloop milestones | +| `lib/Service/MilestoneService.php` | `getMilestones()` | REQ-006 | 0.8 ⚠️ NEEDS-REVIEW | explicit: Milestones = doorloop milestones | +| `lib/Service/MilestoneService.php` | `getCaseProgress()` | REQ-006 | 0.8 ⚠️ NEEDS-REVIEW | explicit: Milestones = doorloop milestones | +| `lib/Service/MilestoneService.php` | `markMilestone()` | REQ-006 | 0.8 ⚠️ NEEDS-REVIEW | explicit: Milestones = doorloop milestones | +| `lib/Service/MilestoneService.php` | `reverseMilestone()` | REQ-006 | 0.8 ⚠️ NEEDS-REVIEW | explicit: Milestones = doorloop milestones | +| `lib/Service/MilestoneService.php` | `getDurationAnalytics()` | REQ-006 | 0.8 ⚠️ NEEDS-REVIEW | explicit: Milestones = doorloop milestones | +| `lib/Service/MilestoneService.php` | `getMilestoneRecords()` | REQ-006 | 0.7 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `src/utils/doorlooptijdHelpers.js` | `parseDurationToDays()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/doorlooptijdHelpers.js` | `getProcessingDays()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/doorlooptijdHelpers.js` | `getSlaTargetDays()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/doorlooptijdHelpers.js` | `buildCaseTypeMap()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/doorlooptijdHelpers.js` | `computeSlaCompliance()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/doorlooptijdHelpers.js` | `computeProcessingTimeDistribution()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/doorlooptijdHelpers.js` | `computeMonthlyTrend()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/doorlooptijdHelpers.js` | `getAtRiskCases()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/doorlooptijdHelpers.js` | `computePerformanceTable()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/durationHelpers.js` | `isValidDuration()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/durationHelpers.js` | `parseDuration()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/durationHelpers.js` | `formatDuration()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/durationHelpers.js` | `getDurationError()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/DoorlooptijdDashboard.vue` | `loadData()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | + +### capability: inspection-checklists — 18 methods across 3 files + +| File | Method | REQ | Confidence | Signal | +|---|---|---|---|---| +| `lib/Controller/InspectionController.php` | `__construct()` | REQ-001 | 0.83 ⚠️ NEEDS-REVIEW | explicit: Inspection controller methods | +| `lib/Controller/InspectionController.php` | `index()` | REQ-001 | 0.83 ⚠️ NEEDS-REVIEW | explicit: Inspection controller methods | +| `lib/Controller/InspectionController.php` | `captureLocation()` | REQ-001 | 0.83 ⚠️ NEEDS-REVIEW | explicit: Inspection controller methods | +| `lib/Controller/InspectionController.php` | `completeChecklistItem()` | REQ-001 | 0.83 ⚠️ NEEDS-REVIEW | explicit: Inspection controller methods | +| `lib/Controller/InspectionController.php` | `addPhoto()` | REQ-001 | 0.83 ⚠️ NEEDS-REVIEW | explicit: Inspection controller methods | +| `lib/Controller/InspectionController.php` | `complete()` | REQ-001 | 0.83 ⚠️ NEEDS-REVIEW | explicit: Inspection controller methods | +| `lib/Controller/InspectionController.php` | `getRequestBody()` | REQ-001 | 0.73 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Service/ChecklistService.php` | `__construct()` | REQ-001 | 0.82 ⚠️ NEEDS-REVIEW | explicit: Checklist validation and progress | +| `lib/Service/ChecklistService.php` | `completeItem()` | REQ-001 | 0.82 ⚠️ NEEDS-REVIEW | explicit: Checklist validation and progress | +| `lib/Service/ChecklistService.php` | `getProgress()` | REQ-001 | 0.82 ⚠️ NEEDS-REVIEW | explicit: Checklist validation and progress | +| `lib/Service/ChecklistService.php` | `validateCompletion()` | REQ-001 | 0.82 ⚠️ NEEDS-REVIEW | explicit: Checklist validation and progress | +| `lib/Service/ChecklistService.php` | `getConformitySummary()` | REQ-001 | 0.82 ⚠️ NEEDS-REVIEW | explicit: Checklist validation and progress | +| `lib/Service/InspectionService.php` | `__construct()` | REQ-003 | 0.83 ⚠️ NEEDS-REVIEW | explicit: Inspection service methods | +| `lib/Service/InspectionService.php` | `getInspections()` | REQ-003 | 0.83 ⚠️ NEEDS-REVIEW | explicit: Inspection service methods | +| `lib/Service/InspectionService.php` | `captureLocation()` | REQ-003 | 0.83 ⚠️ NEEDS-REVIEW | explicit: Inspection service methods | +| `lib/Service/InspectionService.php` | `addPhoto()` | REQ-003 | 0.83 ⚠️ NEEDS-REVIEW | explicit: Inspection service methods | +| `lib/Service/InspectionService.php` | `completeInspection()` | REQ-003 | 0.83 ⚠️ NEEDS-REVIEW | explicit: Inspection service methods | +| `lib/Service/InspectionService.php` | `calculateDistance()` | REQ-003 | 0.73 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | + +### capability: map-component — 9 methods across 5 files + +| File | Method | REQ | Confidence | Signal | +|---|---|---|---|---| +| `src/components/map/AddressSearch.vue` | `onInput()` | REQ-MAP-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/components/map/AddressSearch.vue` | `if()` | REQ-MAP-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/components/map/CaseMap.vue` | `initMap()` | REQ-MAP-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/components/map/LocationPicker.vue` | `initMap()` | REQ-MAP-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/components/map/LocationPicker.vue` | `if()` | REQ-MAP-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/components/map/LocationPicker.vue` | `if()` | REQ-MAP-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/components/map/MapLayerSwitcher.vue` | `toggleLayer()` | REQ-MAP-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/components/map/MapLayerSwitcher.vue` | `if()` | REQ-MAP-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/components/map/SpatialFilter.vue` | `initDrawLayer()` | REQ-MAP-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | + +### capability: my-work — 5 methods across 3 files + +| File | Method | REQ | Confidence | Signal | +|---|---|---|---|---| +| `src/views/MyWork.vue` | `getCaseTypeName()` | REQ-MYWORK-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/Werkvoorraad.vue` | `loadData()` | REQ-MYWORK-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/Werkvoorraad.vue` | `if()` | REQ-MYWORK-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/Werkvoorraad.vue` | `if()` | REQ-MYWORK-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/widgets/MyTasksWidget.vue` | `onShow()` | REQ-MYWORK-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | + +### capability: openregister-integration — 2 methods across 1 files + +| File | Method | REQ | Confidence | Signal | +|---|---|---|---|---| +| `src/utils/openregisterCheck.js` | `checkOpenRegisterStatus()` | REQ-OREG-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/openregisterCheck.js` | `getStatusMessage()` | REQ-OREG-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | + +### capability: parafeerroute-engine — 9 methods across 1 files + +| File | Method | REQ | Confidence | Signal | +|---|---|---|---|---| +| `src/utils/parafeerEngine.js` | `getRouteSteps()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/parafeerEngine.js` | `getCurrentStep()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/parafeerEngine.js` | `isActiveActor()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/parafeerEngine.js` | `getNextStep()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/parafeerEngine.js` | `getStatusAfterAdvance()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/parafeerEngine.js` | `createRouteSnapshot()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/parafeerEngine.js` | `insertAdHocStep()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/parafeerEngine.js` | `markStepSkipped()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/parafeerEngine.js` | `findDefaultRoute()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | + +### capability: parafering-actions — 15 methods across 3 files + +| File | Method | REQ | Confidence | Signal | +|---|---|---|---|---| +| `lib/Controller/ParaferingController.php` | `__construct()` | REQ-002 | 0.78 ⚠️ NEEDS-REVIEW | explicit: Parafering controller | +| `lib/Controller/ParaferingController.php` | `startParafering()` | REQ-002 | 0.85 | explicit: Parafering route start | +| `lib/Controller/ParaferingController.php` | `paraferen()` | REQ-002 | 0.78 ⚠️ NEEDS-REVIEW | explicit: Parafering controller | +| `lib/Controller/ParaferingController.php` | `terugsturen()` | REQ-002 | 0.78 ⚠️ NEEDS-REVIEW | explicit: Parafering controller | +| `lib/Controller/ParaferingController.php` | `adviseren()` | REQ-002 | 0.78 ⚠️ NEEDS-REVIEW | explicit: Parafering controller | +| `lib/Controller/ParaferingController.php` | `auditTrail()` | REQ-002 | 0.78 ⚠️ NEEDS-REVIEW | explicit: Parafering controller | +| `lib/Service/ParaferingNotificationService.php` | `__construct()` | REQ-002 | 0.78 ⚠️ NEEDS-REVIEW | explicit: Parafering notifications — NEEDS-REVIEW specific REQ | +| `lib/Service/ParaferingNotificationService.php` | `notifyStepActivated()` | REQ-002 | 0.78 ⚠️ NEEDS-REVIEW | explicit: Parafering notifications — NEEDS-REVIEW specific REQ | +| `lib/Service/ParaferingNotificationService.php` | `notifyVoorstelReturned()` | REQ-002 | 0.78 ⚠️ NEEDS-REVIEW | explicit: Parafering notifications — NEEDS-REVIEW specific REQ | +| `lib/Service/ParaferingNotificationService.php` | `notifyParaferingReminder()` | REQ-002 | 0.78 ⚠️ NEEDS-REVIEW | explicit: Parafering notifications — NEEDS-REVIEW specific REQ | +| `lib/Service/ParaferingService.php` | `__construct()` | REQ-002 | 0.78 ⚠️ NEEDS-REVIEW | explicit: Parafering service — specific REQ per method deferred | +| `lib/Service/ParaferingService.php` | `startParafering()` | REQ-002 | 0.85 | explicit: Parafering route start | +| `lib/Service/ParaferingService.php` | `executeAction()` | REQ-002 | 0.85 | explicit: Parafering action execution | +| `lib/Service/ParaferingService.php` | `getCurrentStep()` | REQ-002 | 0.78 ⚠️ NEEDS-REVIEW | explicit: Parafering service — specific REQ per method deferred | +| `lib/Service/ParaferingService.php` | `overrideRoute()` | REQ-002 | 0.78 ⚠️ NEEDS-REVIEW | explicit: Parafering service — specific REQ per method deferred | + +### capability: parafering-audit-trail — 1 methods across 1 files + +| File | Method | REQ | Confidence | Signal | +|---|---|---|---|---| +| `lib/Service/ParaferingService.php` | `getAuditTrail()` | REQ-001 | 0.9 | explicit: Audit trail query | + +### capability: pdok-integration — 11 methods across 2 files + +| File | Method | REQ | Confidence | Signal | +|---|---|---|---|---| +| `src/services/coordinateService.js` | `isRDCoordinate()` | REQ-PDOK-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/services/coordinateService.js` | `rdToWgs84()` | REQ-PDOK-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/services/coordinateService.js` | `wgs84ToRd()` | REQ-PDOK-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/services/coordinateService.js` | `ensureWgs84()` | REQ-PDOK-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/services/coordinateService.js` | `convertCoordinates()` | REQ-PDOK-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/services/pdokService.js` | `suggest()` | REQ-PDOK-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/services/pdokService.js` | `lookup()` | REQ-PDOK-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/services/pdokService.js` | `free()` | REQ-PDOK-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/services/pdokService.js` | `reverse()` | REQ-PDOK-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/services/pdokService.js` | `extractCoordinates()` | REQ-PDOK-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/services/pdokService.js` | `formatAddress()` | REQ-PDOK-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | + +### capability: procest-app-scaffold — 13 methods across 6 files + +| File | Method | REQ | Confidence | Signal | +|---|---|---|---|---| +| `lib/AppInfo/Application.php` | `register()` | REQ-001 | 0.95 | explicit: Application::register = NC app registration boot (REQ-001) | +| `lib/AppInfo/Application.php` | `boot()` | REQ-001 | 0.95 | explicit: Application::boot = NC app boot hook | +| `lib/Controller/DashboardController.php` | `page()` | REQ-002 | 0.93 | explicit: Vue SPA entry point (REQ-002) | +| `lib/Repair/InitializeSettings.php` | `__construct()` | REQ-006 | 0.92 | explicit: Settings initialization on install | +| `lib/Repair/InitializeSettings.php` | `getName()` | REQ-006 | 0.92 | explicit: Settings initialization on install | +| `lib/Repair/InitializeSettings.php` | `run()` | REQ-006 | 0.92 | explicit: Settings initialization on install | +| `src/App.vue` | `onSidebarSearch()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/App.vue` | `if()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/navigation/MainMenu.vue` | `openLink()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/i18nResolver.js` | `getUserLocale()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/i18nResolver.js` | `resolveTranslatable()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/i18nResolver.js` | `resolveField()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/i18nResolver.js` | `resolveText()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | + +### capability: procest-object-store — 5 methods across 3 files + +| File | Method | REQ | Confidence | Signal | +|---|---|---|---|---| +| `src/store/modules/bezwaar.js` | `addWorkingDays()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/store/modules/bezwaar.js` | `addWeeks()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/store/modules/bezwaar.js` | `daysDifference()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/store/modules/workflow.js` | `generateUUID()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/store/store.js` | `initializeStores()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | + +### capability: prometheus-metrics — 19 methods across 2 files + +| File | Method | REQ | Confidence | Signal | +|---|---|---|---|---| +| `lib/Controller/HealthController.php` | `__construct()` | REQ-PROM-004 | 0.83 ⚠️ NEEDS-REVIEW | explicit: Health endpoint helpers | +| `lib/Controller/HealthController.php` | `index()` | REQ-PROM-004 | 0.97 | explicit: /health endpoint | +| `lib/Controller/HealthController.php` | `checkDatabase()` | REQ-PROM-004 | 0.87 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/HealthController.php` | `checkOpenRegister()` | REQ-PROM-004 | 0.87 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/HealthController.php` | `checkFilesystem()` | REQ-PROM-004 | 0.87 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/HealthController.php` | `getAppVersion()` | REQ-PROM-004 | 0.87 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/MetricsController.php` | `__construct()` | REQ-PROM-001 | 0.83 ⚠️ NEEDS-REVIEW | explicit: Metrics endpoint helpers — private fall back here via Pass B | +| `lib/Controller/MetricsController.php` | `index()` | REQ-PROM-001 | 0.97 | explicit: /metrics endpoint | +| `lib/Controller/MetricsController.php` | `collectMetrics()` | REQ-PROM-001 | 0.87 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/MetricsController.php` | `getCached()` | REQ-PROM-001 | 0.87 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/MetricsController.php` | `checkDatabaseHealth()` | REQ-PROM-001 | 0.87 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/MetricsController.php` | `getCaseCounts()` | REQ-PROM-001 | 0.87 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/MetricsController.php` | `getOverdueCasesCount()` | REQ-PROM-001 | 0.87 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/MetricsController.php` | `getCasesCreatedTodayCount()` | REQ-PROM-001 | 0.87 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/MetricsController.php` | `getTaskCounts()` | REQ-PROM-001 | 0.87 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/MetricsController.php` | `getOverdueTasksCount()` | REQ-PROM-001 | 0.87 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/MetricsController.php` | `getAppVersion()` | REQ-PROM-001 | 0.87 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/MetricsController.php` | `getNextcloudVersion()` | REQ-PROM-001 | 0.87 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/MetricsController.php` | `sanitizeLabel()` | REQ-PROM-001 | 0.87 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | + +### capability: roles-decisions — 3 methods across 1 files + +| File | Method | REQ | Confidence | Signal | +|---|---|---|---|---| +| `src/utils/decisionHelpers.js` | `getDecisionValidity()` | REQ-ROLE-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/decisionHelpers.js` | `formatDecisionDate()` | REQ-ROLE-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/decisionHelpers.js` | `validateDecision()` | REQ-ROLE-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | + +### capability: signalering-widgets — 7 methods across 5 files + +| File | Method | REQ | Confidence | Signal | +|---|---|---|---|---| +| `src/views/dashboard/OverduePanel.vue` | `severityClass()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/dashboard/OverduePanel.vue` | `if()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/dashboard/OverduePanel.vue` | `if()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/widgets/DeadlineAlertsWidget.vue` | `onShow()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/widgets/OverdueCasesWidget.vue` | `onShow()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/widgets/StalledCasesWidget.vue` | `onShow()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/widgets/TaskRemindersWidget.vue` | `onShow()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | + +### capability: task-management — 27 methods across 7 files + +| File | Method | REQ | Confidence | Signal | +|---|---|---|---|---| +| `src/services/taskApi.js` | `getHeaders()` | REQ-TASK-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/services/taskApi.js` | `mapCalDavPriority()` | REQ-TASK-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/services/taskApi.js` | `normalizeCalDavTask()` | REQ-TASK-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/services/taskApi.js` | `fetchTasksForObject()` | REQ-TASK-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/services/taskApi.js` | `fetchTasksForCases()` | REQ-TASK-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/taskHelpers.js` | `getPriorityLevels()` | REQ-TASK-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/taskHelpers.js` | `isOverdue()` | REQ-TASK-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/taskHelpers.js` | `isDueToday()` | REQ-TASK-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/taskHelpers.js` | `getOverdueText()` | REQ-TASK-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/taskHelpers.js` | `formatDueDate()` | REQ-TASK-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/taskHelpers.js` | `prioritySortWeight()` | REQ-TASK-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/taskHelpers.js` | `statusGroupWeight()` | REQ-TASK-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/taskHelpers.js` | `sortTasks()` | REQ-TASK-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/taskLifecycle.js` | `getStatusLabels()` | REQ-TASK-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/taskLifecycle.js` | `getTransitionLabels()` | REQ-TASK-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/taskLifecycle.js` | `getAllowedTransitions()` | REQ-TASK-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/taskLifecycle.js` | `validateTransition()` | REQ-TASK-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/taskLifecycle.js` | `getStatusLabel()` | REQ-TASK-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/taskLifecycle.js` | `getTransitionLabel()` | REQ-TASK-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/taskLifecycle.js` | `isTerminalStatus()` | REQ-TASK-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/taskValidation.js` | `validateTaskCreate()` | REQ-TASK-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/taskValidation.js` | `validateTaskUpdate()` | REQ-TASK-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/utils/taskValidation.js` | `validateTaskTransition()` | REQ-TASK-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/tasks/TaskCreateDialog.vue` | `submit()` | REQ-TASK-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/tasks/TaskCreateDialog.vue` | `if()` | REQ-TASK-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/tasks/TaskDetail.vue` | `startEditing()` | REQ-TASK-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/tasks/TaskList.vue` | `getPriorityLabel()` | REQ-TASK-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | + +### capability: voorstel-management — 17 methods across 10 files + +| File | Method | REQ | Confidence | Signal | +|---|---|---|---|---| +| `lib/Controller/ParaferingController.php` | `createVoorstel()` | REQ-002 | 0.9 | explicit: Create voorstel from case | +| `lib/Controller/ParaferingController.php` | `handleAction()` | REQ-002 | 0.8 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/ParaferingController.php` | `getRequestBody()` | REQ-002 | 0.8 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Service/ParaferingService.php` | `createVoorstel()` | REQ-002 | 0.9 | explicit: Create voorstel from case | +| `lib/Service/ParaferingService.php` | `advanceStep()` | REQ-002 | 0.8 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Service/ParaferingService.php` | `handleParallelStep()` | REQ-002 | 0.8 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Service/ParaferingService.php` | `generateId()` | REQ-002 | 0.8 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `src/views/voorstellen/VoorstelDetail.vue` | `loadVoorstel()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/voorstellen/VoorstelList.vue` | `loadVoorstellen()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/voorstellen/components/AuditTrail.vue` | `formatAction()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/voorstellen/components/BesluitRegistration.vue` | `register()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/voorstellen/components/BesluitRegistration.vue` | `if()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/voorstellen/components/ParafeerActionBar.vue` | `formatStepType()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/voorstellen/components/ParafeerInbox.vue` | `loadVoorstellen()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/voorstellen/components/ProgressTimeline.vue` | `isCompleted()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/voorstellen/components/VoorstelCreateDialog.vue` | `onCaseSelected()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/views/voorstellen/components/VoorstelCreateDialog.vue` | `if()` | REQ-001 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | + +### capability: vth-case-type-seed — 13 methods across 2 files + +| File | Method | REQ | Confidence | Signal | +|---|---|---|---|---| +| `lib/Repair/SeedBezwaarBeroepData.php` | `__construct()` | REQ-001 | 0.92 | explicit: Seed repair step | +| `lib/Repair/SeedBezwaarBeroepData.php` | `getName()` | REQ-001 | 0.92 | explicit: Seed repair step | +| `lib/Repair/SeedBezwaarBeroepData.php` | `run()` | REQ-001 | 0.92 | explicit: Seed repair step | +| `lib/Service/SeedDataService.php` | `__construct()` | REQ-001 | 0.85 | explicit: Seed data service | +| `lib/Service/SeedDataService.php` | `seedBezwaarBeroepData()` | REQ-001 | 0.85 | explicit: Seed data service | +| `lib/Service/SeedDataService.php` | `seedCaseType()` | REQ-001 | 0.75 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Service/SeedDataService.php` | `resolveWorkflowReferences()` | REQ-001 | 0.75 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Service/SeedDataService.php` | `createObject()` | REQ-001 | 0.75 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Service/SeedDataService.php` | `findByFilter()` | REQ-001 | 0.75 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Service/SeedDataService.php` | `getObjectService()` | REQ-001 | 0.75 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Service/SeedDataService.php` | `getConfigValue()` | REQ-001 | 0.75 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Service/SeedDataService.php` | `getObjectId()` | REQ-001 | 0.75 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Service/SeedDataService.php` | `generateUUID()` | REQ-001 | 0.75 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | + +### capability: wms-wfs-layers — 8 methods across 3 files + +| File | Method | REQ | Confidence | Signal | +|---|---|---|---|---| +| `lib/Controller/GisProxyController.php` | `proxy()` | REQ-LAYER-03 | 0.93 | name+path keyword match | +| `lib/Service/GisProxyService.php` | `proxyRequest()` | REQ-LAYER-03 | 0.93 | name+path keyword match | +| `lib/Service/GisProxyService.php` | `isUrlAllowed()` | REQ-LAYER-03 | 0.83 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Service/GisProxyService.php` | `checkRateLimit()` | REQ-LAYER-03 | 0.83 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Service/GisProxyService.php` | `parseCapabilities()` | REQ-LAYER-03 | 0.83 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Service/GisProxyService.php` | `xmlToArray()` | REQ-LAYER-03 | 0.83 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `src/services/gisProxyService.js` | `proxyRequest()` | REQ-LAYER-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | +| `src/services/gisProxyService.js` | `getCapabilities()` | REQ-LAYER-01 | 0.78 ⚠️ NEEDS-REVIEW | frontend path-based capability match; specific REQ per method deferred | + +### capability: zgw-api-mapping — 236 methods across 12 files + +| File | Method | REQ | Confidence | Signal | +|---|---|---|---|---| +| `lib/Controller/AcController.php` | `__construct()` | REQ-007 | 0.85 | explicit: AcController=AC API | +| `lib/Controller/AcController.php` | `index()` | REQ-007 | 0.85 | explicit: AcController=AC API | +| `lib/Controller/AcController.php` | `create()` | REQ-007 | 0.85 | explicit: AcController=AC API | +| `lib/Controller/AcController.php` | `show()` | REQ-007 | 0.85 | explicit: AcController=AC API | +| `lib/Controller/AcController.php` | `update()` | REQ-007 | 0.85 | explicit: AcController=AC API | +| `lib/Controller/AcController.php` | `patch()` | REQ-007 | 0.85 | explicit: AcController=AC API | +| `lib/Controller/AcController.php` | `destroy()` | REQ-007 | 0.85 | explicit: AcController=AC API | +| `lib/Controller/AcController.php` | `findConsumerByUuid()` | REQ-007 | 0.75 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/AcController.php` | `validateApplicatieBody()` | REQ-007 | 0.75 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/AcController.php` | `validateClientIdUniqueness()` | REQ-007 | 0.75 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/AcController.php` | `validateAutorisatieConsistency()` | REQ-007 | 0.75 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/AcController.php` | `validateAutorisatieScopes()` | REQ-007 | 0.75 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/AcController.php` | `scopesContain()` | REQ-007 | 0.75 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/AcController.php` | `getConsumerClientIds()` | REQ-007 | 0.75 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/AcController.php` | `consumerToApplicatie()` | REQ-007 | 0.75 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/AcController.php` | `applicatieToConsumer()` | REQ-007 | 0.75 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/BrcController.php` | `__construct()` | REQ-006 | 0.92 | explicit: BrcController=BRC API, REQ-006 covers BRC mappability | +| `lib/Controller/BrcController.php` | `index()` | REQ-006 | 0.92 | explicit: BrcController=BRC API, REQ-006 covers BRC mappability | +| `lib/Controller/BrcController.php` | `create()` | REQ-006 | 0.92 | explicit: BrcController=BRC API, REQ-006 covers BRC mappability | +| `lib/Controller/BrcController.php` | `show()` | REQ-006 | 0.92 | explicit: BrcController=BRC API, REQ-006 covers BRC mappability | +| `lib/Controller/BrcController.php` | `update()` | REQ-006 | 0.92 | explicit: BrcController=BRC API, REQ-006 covers BRC mappability | +| `lib/Controller/BrcController.php` | `patch()` | REQ-006 | 0.92 | explicit: BrcController=BRC API, REQ-006 covers BRC mappability | +| `lib/Controller/BrcController.php` | `destroy()` | REQ-006 | 0.92 | explicit: BrcController=BRC API, REQ-006 covers BRC mappability | +| `lib/Controller/BrcController.php` | `audittrailIndex()` | REQ-006 | 0.92 | explicit: BrcController=BRC API, REQ-006 covers BRC mappability | +| `lib/Controller/BrcController.php` | `audittrailShow()` | REQ-006 | 0.92 | explicit: BrcController=BRC API, REQ-006 covers BRC mappability | +| `lib/Controller/BrcController.php` | `createBesluitWithZaakSync()` | REQ-006 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/BrcController.php` | `syncZaakBesluitToZrc()` | REQ-006 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/BrcController.php` | `indexBesluitInformatieObjecten()` | REQ-006 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/BrcController.php` | `createBesluitInformatieObject()` | REQ-006 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/BrcController.php` | `createOioInDrc()` | REQ-006 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/BrcController.php` | `deleteOiosForBesluit()` | REQ-006 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/BrcController.php` | `destroyBesluitInformatieObject()` | REQ-006 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/BrcController.php` | `deleteOioByBesluitAndIo()` | REQ-006 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/BrcController.php` | `destroyBesluit()` | REQ-006 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/DrcController.php` | `__construct()` | REQ-005 | 0.92 | explicit: DrcController=DRC API, REQ-005 covers DRC mappability | +| `lib/Controller/DrcController.php` | `index()` | REQ-005 | 0.92 | explicit: DrcController=DRC API, REQ-005 covers DRC mappability | +| `lib/Controller/DrcController.php` | `create()` | REQ-005 | 0.92 | explicit: DrcController=DRC API, REQ-005 covers DRC mappability | +| `lib/Controller/DrcController.php` | `show()` | REQ-005 | 0.92 | explicit: DrcController=DRC API, REQ-005 covers DRC mappability | +| `lib/Controller/DrcController.php` | `update()` | REQ-005 | 0.92 | explicit: DrcController=DRC API, REQ-005 covers DRC mappability | +| `lib/Controller/DrcController.php` | `patch()` | REQ-005 | 0.92 | explicit: DrcController=DRC API, REQ-005 covers DRC mappability | +| `lib/Controller/DrcController.php` | `destroy()` | REQ-005 | 0.92 | explicit: DrcController=DRC API, REQ-005 covers DRC mappability | +| `lib/Controller/DrcController.php` | `download()` | REQ-005 | 0.92 | explicit: DrcController=DRC API, REQ-005 covers DRC mappability | +| `lib/Controller/DrcController.php` | `lock()` | REQ-005 | 0.92 | explicit: DrcController=DRC API, REQ-005 covers DRC mappability | +| `lib/Controller/DrcController.php` | `unlock()` | REQ-005 | 0.92 | explicit: DrcController=DRC API, REQ-005 covers DRC mappability | +| `lib/Controller/DrcController.php` | `audittrailIndex()` | REQ-005 | 0.92 | explicit: DrcController=DRC API, REQ-005 covers DRC mappability | +| `lib/Controller/DrcController.php` | `audittrailShow()` | REQ-005 | 0.92 | explicit: DrcController=DRC API, REQ-005 covers DRC mappability | +| `lib/Controller/DrcController.php` | `uploadChunk()` | REQ-005 | 0.92 | explicit: DrcController=DRC API, REQ-005 covers DRC mappability | +| `lib/Controller/DrcController.php` | `indexFlatArray()` | REQ-005 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/DrcController.php` | `lockFallback()` | REQ-005 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/DrcController.php` | `unlockFallback()` | REQ-005 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/DrcController.php` | `findOioRelationsForEio()` | REQ-005 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/DrcController.php` | `searchRelationsInSchema()` | REQ-005 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/DrcController.php` | `extractIdsFromResults()` | REQ-005 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/DrcController.php` | `cascadeDeleteGebruiksrechten()` | REQ-005 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/DrcController.php` | `updateIndicatieGebruiksrecht()` | REQ-005 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/DrcController.php` | `getGebruiksrechtData()` | REQ-005 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/DrcController.php` | `checkAndClearIndicatieGebruiksrecht()` | REQ-005 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/DrcController.php` | `setIndicatieGebruiksrecht()` | REQ-005 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/DrcController.php` | `enrichWithBestandsdelen()` | REQ-005 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/DrcController.php` | `parseFileParts()` | REQ-005 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/DrcController.php` | `buildBestandsdelenArray()` | REQ-005 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/DrcController.php` | `handleEioUpdate()` | REQ-005 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/DrcController.php` | `checkDocumentLock()` | REQ-005 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/DrcController.php` | `resolveStoredLockId()` | REQ-005 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/DrcController.php` | `storeLockIdInData()` | REQ-005 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/DrcController.php` | `clearLockIdInData()` | REQ-005 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/NrcController.php` | `__construct()` | REQ-008 | 0.85 | explicit: NrcController=NRC API | +| `lib/Controller/NrcController.php` | `index()` | REQ-008 | 0.85 | explicit: NrcController=NRC API | +| `lib/Controller/NrcController.php` | `create()` | REQ-008 | 0.85 | explicit: NrcController=NRC API | +| `lib/Controller/NrcController.php` | `show()` | REQ-008 | 0.85 | explicit: NrcController=NRC API | +| `lib/Controller/NrcController.php` | `update()` | REQ-008 | 0.85 | explicit: NrcController=NRC API | +| `lib/Controller/NrcController.php` | `patch()` | REQ-008 | 0.85 | explicit: NrcController=NRC API | +| `lib/Controller/NrcController.php` | `destroy()` | REQ-008 | 0.85 | explicit: NrcController=NRC API | +| `lib/Controller/NrcController.php` | `notificatieCreate()` | REQ-008 | 0.85 | explicit: NrcController=NRC API | +| `lib/Controller/NrcController.php` | `audittrailIndex()` | REQ-008 | 0.85 | explicit: NrcController=NRC API | +| `lib/Controller/NrcController.php` | `audittrailShow()` | REQ-008 | 0.85 | explicit: NrcController=NRC API | +| `lib/Controller/ZgwMappingController.php` | `__construct()` | REQ-001 | 0.85 | explicit: ZGW mapping admin endpoints | +| `lib/Controller/ZgwMappingController.php` | `index()` | REQ-001 | 0.85 | explicit: ZGW mapping admin endpoints | +| `lib/Controller/ZgwMappingController.php` | `show()` | REQ-001 | 0.85 | explicit: ZGW mapping admin endpoints | +| `lib/Controller/ZgwMappingController.php` | `update()` | REQ-001 | 0.85 | explicit: ZGW mapping admin endpoints | +| `lib/Controller/ZgwMappingController.php` | `destroy()` | REQ-001 | 0.85 | explicit: ZGW mapping admin endpoints | +| `lib/Controller/ZgwMappingController.php` | `reset()` | REQ-001 | 0.85 | explicit: ZGW mapping admin endpoints | +| `lib/Controller/ZrcController.php` | `__construct()` | REQ-003 | 0.92 | explicit: ZrcController=ZRC API, REQ-003 covers ZRC mappability | +| `lib/Controller/ZrcController.php` | `index()` | REQ-003 | 0.92 | explicit: ZrcController=ZRC API, REQ-003 covers ZRC mappability | +| `lib/Controller/ZrcController.php` | `create()` | REQ-003 | 0.92 | explicit: ZrcController=ZRC API, REQ-003 covers ZRC mappability | +| `lib/Controller/ZrcController.php` | `show()` | REQ-003 | 0.92 | explicit: ZrcController=ZRC API, REQ-003 covers ZRC mappability | +| `lib/Controller/ZrcController.php` | `update()` | REQ-003 | 0.92 | explicit: ZrcController=ZRC API, REQ-003 covers ZRC mappability | +| `lib/Controller/ZrcController.php` | `patch()` | REQ-003 | 0.92 | explicit: ZrcController=ZRC API, REQ-003 covers ZRC mappability | +| `lib/Controller/ZrcController.php` | `destroy()` | REQ-003 | 0.92 | explicit: ZrcController=ZRC API, REQ-003 covers ZRC mappability | +| `lib/Controller/ZrcController.php` | `zaakeigenschappenIndex()` | REQ-003 | 0.92 | explicit: ZrcController=ZRC API, REQ-003 covers ZRC mappability | +| `lib/Controller/ZrcController.php` | `zaakeigenschappenCreate()` | REQ-003 | 0.92 | explicit: ZrcController=ZRC API, REQ-003 covers ZRC mappability | +| `lib/Controller/ZrcController.php` | `zaakeigenschappenShow()` | REQ-003 | 0.92 | explicit: ZrcController=ZRC API, REQ-003 covers ZRC mappability | +| `lib/Controller/ZrcController.php` | `zaakeigenschappenUpdate()` | REQ-003 | 0.92 | explicit: ZrcController=ZRC API, REQ-003 covers ZRC mappability | +| `lib/Controller/ZrcController.php` | `zaakeigenschappenPatch()` | REQ-003 | 0.92 | explicit: ZrcController=ZRC API, REQ-003 covers ZRC mappability | +| `lib/Controller/ZrcController.php` | `zaakeigenschappenDestroy()` | REQ-003 | 0.92 | explicit: ZrcController=ZRC API, REQ-003 covers ZRC mappability | +| `lib/Controller/ZrcController.php` | `zaakbesluitenIndex()` | REQ-003 | 0.92 | explicit: ZrcController=ZRC API, REQ-003 covers ZRC mappability | +| `lib/Controller/ZrcController.php` | `zoek()` | REQ-003 | 0.92 | explicit: ZrcController=ZRC API, REQ-003 covers ZRC mappability | +| `lib/Controller/ZrcController.php` | `audittrailIndex()` | REQ-003 | 0.92 | explicit: ZrcController=ZRC API, REQ-003 covers ZRC mappability | +| `lib/Controller/ZrcController.php` | `audittrailShow()` | REQ-003 | 0.92 | explicit: ZrcController=ZRC API, REQ-003 covers ZRC mappability | +| `lib/Controller/ZrcController.php` | `checkZaakReadAccess()` | REQ-003 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/ZrcController.php` | `filterZakenByAuthorisation()` | REQ-003 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/ZrcController.php` | `permissionDeniedResponse()` | REQ-003 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/ZrcController.php` | `preValidateZaakBody()` | REQ-003 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/ZrcController.php` | `preValidateProductenOfDiensten()` | REQ-003 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/ZrcController.php` | `destroyZaak()` | REQ-003 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/ZrcController.php` | `resolveZaakClosedForExisting()` | REQ-003 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/ZrcController.php` | `checkReopenScope()` | REQ-003 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/ZrcController.php` | `checkIndicatieGebruiksrechtBeforeClose()` | REQ-003 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/ZrcController.php` | `isEindstatusByVolgnummer()` | REQ-003 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/ZrcController.php` | `handleEindstatusEffect()` | REQ-003 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/ZrcController.php` | `setIndicatieGebruiksrechtOnClose()` | REQ-003 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/ZrcController.php` | `handleResultaatCreated()` | REQ-003 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/ZrcController.php` | `deriveArchiefactiedatum()` | REQ-003 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/ZrcController.php` | `resolveArchiveBaseDate()` | REQ-003 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/ZrcController.php` | `resolveEigenschapDate()` | REQ-003 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/ZrcController.php` | `resolveBesluitDate()` | REQ-003 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/ZrcController.php` | `enrichZioResponse()` | REQ-003 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/ZrcController.php` | `enrichZioJsonResponse()` | REQ-003 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/ZrcController.php` | `syncCreateObjectInformatieObject()` | REQ-003 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/ZrcController.php` | `getZioDataForOioSync()` | REQ-003 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/ZrcController.php` | `syncDeleteObjectInformatieObject()` | REQ-003 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/ZtcController.php` | `__construct()` | REQ-004 | 0.92 | explicit: ZtcController=ZTC API, REQ-004 covers ZTC mappability | +| `lib/Controller/ZtcController.php` | `index()` | REQ-004 | 0.92 | explicit: ZtcController=ZTC API, REQ-004 covers ZTC mappability | +| `lib/Controller/ZtcController.php` | `create()` | REQ-004 | 0.92 | explicit: ZtcController=ZTC API, REQ-004 covers ZTC mappability | +| `lib/Controller/ZtcController.php` | `show()` | REQ-004 | 0.92 | explicit: ZtcController=ZTC API, REQ-004 covers ZTC mappability | +| `lib/Controller/ZtcController.php` | `update()` | REQ-004 | 0.92 | explicit: ZtcController=ZTC API, REQ-004 covers ZTC mappability | +| `lib/Controller/ZtcController.php` | `patch()` | REQ-004 | 0.92 | explicit: ZtcController=ZTC API, REQ-004 covers ZTC mappability | +| `lib/Controller/ZtcController.php` | `destroy()` | REQ-004 | 0.92 | explicit: ZtcController=ZTC API, REQ-004 covers ZTC mappability | +| `lib/Controller/ZtcController.php` | `publishZaaktype()` | REQ-004 | 0.92 | explicit: ZtcController=ZTC API, REQ-004 covers ZTC mappability | +| `lib/Controller/ZtcController.php` | `publishBesluittype()` | REQ-004 | 0.92 | explicit: ZtcController=ZTC API, REQ-004 covers ZTC mappability | +| `lib/Controller/ZtcController.php` | `publishInformatieobjecttype()` | REQ-004 | 0.92 | explicit: ZtcController=ZTC API, REQ-004 covers ZTC mappability | +| `lib/Controller/ZtcController.php` | `audittrailIndex()` | REQ-004 | 0.92 | explicit: ZtcController=ZTC API, REQ-004 covers ZTC mappability | +| `lib/Controller/ZtcController.php` | `audittrailShow()` | REQ-004 | 0.92 | explicit: ZtcController=ZTC API, REQ-004 covers ZTC mappability | +| `lib/Controller/ZtcController.php` | `resolveParentDraft()` | REQ-004 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/ZtcController.php` | `handlePublish()` | REQ-004 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/ZtcController.php` | `enrichCrossReferences()` | REQ-004 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/ZtcController.php` | `enrichBesluittype()` | REQ-004 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/ZtcController.php` | `enrichZaaktype()` | REQ-004 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/ZtcController.php` | `filterByDatumGeldigheid()` | REQ-004 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/ZtcController.php` | `filterValidUrls()` | REQ-004 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/ZtcController.php` | `isUrlValid()` | REQ-004 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Controller/ZtcController.php` | `resolveIotByOmschrijving()` | REQ-004 | 0.82 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Repair/LoadDefaultZgwMappings.php` | `__construct()` | REQ-001 | 0.9 | explicit: Seeds default ZGW mappings on install | +| `lib/Repair/LoadDefaultZgwMappings.php` | `getName()` | REQ-001 | 0.9 | explicit: Seeds default ZGW mappings on install | +| `lib/Repair/LoadDefaultZgwMappings.php` | `run()` | REQ-001 | 0.9 | explicit: Seeds default ZGW mappings on install | +| `lib/Repair/LoadDefaultZgwMappings.php` | `getDefaultMappings()` | REQ-001 | 0.9 | explicit: Seeds default ZGW mappings on install | +| `lib/Repair/LoadDefaultZgwMappings.php` | `patchExistingMappings()` | REQ-001 | 0.8 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Repair/LoadDefaultZgwMappings.php` | `tplUrl()` | REQ-001 | 0.8 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Repair/LoadDefaultZgwMappings.php` | `getZaakMapping()` | REQ-001 | 0.8 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Repair/LoadDefaultZgwMappings.php` | `getZaakTypeMapping()` | REQ-001 | 0.8 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Repair/LoadDefaultZgwMappings.php` | `getStatusMapping()` | REQ-001 | 0.8 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Repair/LoadDefaultZgwMappings.php` | `getStatusTypeMapping()` | REQ-001 | 0.8 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Repair/LoadDefaultZgwMappings.php` | `getResultaatMapping()` | REQ-001 | 0.8 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Repair/LoadDefaultZgwMappings.php` | `getResultaatTypeMapping()` | REQ-001 | 0.8 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Repair/LoadDefaultZgwMappings.php` | `getRolMapping()` | REQ-001 | 0.8 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Repair/LoadDefaultZgwMappings.php` | `getRolTypeMapping()` | REQ-001 | 0.8 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Repair/LoadDefaultZgwMappings.php` | `getEigenschapMapping()` | REQ-001 | 0.8 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Repair/LoadDefaultZgwMappings.php` | `getBesluitMapping()` | REQ-001 | 0.8 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Repair/LoadDefaultZgwMappings.php` | `getBesluitTypeMapping()` | REQ-001 | 0.8 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Repair/LoadDefaultZgwMappings.php` | `getInformatieObjectTypeMapping()` | REQ-001 | 0.8 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Repair/LoadDefaultZgwMappings.php` | `getEnkelvoudigInformatieObjectMapping()` | REQ-001 | 0.8 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Repair/LoadDefaultZgwMappings.php` | `getObjectInformatieObjectMapping()` | REQ-001 | 0.8 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Repair/LoadDefaultZgwMappings.php` | `getGebruiksrechtenMapping()` | REQ-001 | 0.8 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Repair/LoadDefaultZgwMappings.php` | `getKanaalMapping()` | REQ-001 | 0.8 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Repair/LoadDefaultZgwMappings.php` | `getAbonnementMapping()` | REQ-001 | 0.8 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Repair/LoadDefaultZgwMappings.php` | `getCatalogusMapping()` | REQ-001 | 0.8 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Repair/LoadDefaultZgwMappings.php` | `getZaaktypeInformatieobjecttypeMapping()` | REQ-001 | 0.8 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Repair/LoadDefaultZgwMappings.php` | `getApplicatieMapping()` | REQ-001 | 0.8 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Repair/LoadDefaultZgwMappings.php` | `createDefaultApplicaties()` | REQ-001 | 0.8 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Repair/LoadDefaultZgwMappings.php` | `getDefaultApplicaties()` | REQ-001 | 0.8 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Repair/LoadDefaultZgwMappings.php` | `createDefaultKanalen()` | REQ-001 | 0.8 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Repair/LoadDefaultZgwMappings.php` | `getDefaultKanalen()` | REQ-001 | 0.8 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Repair/LoadDefaultZgwMappings.php` | `getZaakeigenschapMapping()` | REQ-001 | 0.8 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Repair/LoadDefaultZgwMappings.php` | `getZaakinformatieobjectMapping()` | REQ-001 | 0.8 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Repair/LoadDefaultZgwMappings.php` | `getZaakobjectMapping()` | REQ-001 | 0.8 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Repair/LoadDefaultZgwMappings.php` | `getKlantcontactMapping()` | REQ-001 | 0.8 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Repair/LoadDefaultZgwMappings.php` | `getBesluitinformatieobjectMapping()` | REQ-001 | 0.8 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Repair/LoadDefaultZgwMappings.php` | `getVerzendingMapping()` | REQ-001 | 0.8 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Service/ZgwDocumentService.php` | `__construct()` | REQ-005 | 0.82 ⚠️ NEEDS-REVIEW | explicit: ZGW document handling (DRC mappability helpers) | +| `lib/Service/ZgwDocumentService.php` | `storeBase64()` | REQ-005 | 0.82 ⚠️ NEEDS-REVIEW | explicit: ZGW document handling (DRC mappability helpers) | +| `lib/Service/ZgwDocumentService.php` | `storeRaw()` | REQ-005 | 0.82 ⚠️ NEEDS-REVIEW | explicit: ZGW document handling (DRC mappability helpers) | +| `lib/Service/ZgwDocumentService.php` | `getContent()` | REQ-005 | 0.82 ⚠️ NEEDS-REVIEW | explicit: ZGW document handling (DRC mappability helpers) | +| `lib/Service/ZgwDocumentService.php` | `fileExists()` | REQ-005 | 0.82 ⚠️ NEEDS-REVIEW | explicit: ZGW document handling (DRC mappability helpers) | +| `lib/Service/ZgwDocumentService.php` | `deleteFiles()` | REQ-005 | 0.82 ⚠️ NEEDS-REVIEW | explicit: ZGW document handling (DRC mappability helpers) | +| `lib/Service/ZgwDocumentService.php` | `getMimeType()` | REQ-005 | 0.82 ⚠️ NEEDS-REVIEW | explicit: ZGW document handling (DRC mappability helpers) | +| `lib/Service/ZgwDocumentService.php` | `storeChunk()` | REQ-005 | 0.82 ⚠️ NEEDS-REVIEW | explicit: ZGW document handling (DRC mappability helpers) | +| `lib/Service/ZgwDocumentService.php` | `getUploadedChunks()` | REQ-005 | 0.82 ⚠️ NEEDS-REVIEW | explicit: ZGW document handling (DRC mappability helpers) | +| `lib/Service/ZgwDocumentService.php` | `mergeChunks()` | REQ-005 | 0.82 ⚠️ NEEDS-REVIEW | explicit: ZGW document handling (DRC mappability helpers) | +| `lib/Service/ZgwDocumentService.php` | `getDocumentFolder()` | REQ-005 | 0.72 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Service/ZgwDocumentService.php` | `getUserFolder()` | REQ-005 | 0.72 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Service/ZgwMappingService.php` | `__construct()` | REQ-001 | 0.85 | explicit: Explicit mapping-layer service | +| `lib/Service/ZgwMappingService.php` | `getMapping()` | REQ-001 | 0.85 | explicit: Explicit mapping-layer service | +| `lib/Service/ZgwMappingService.php` | `saveMapping()` | REQ-001 | 0.85 | explicit: Explicit mapping-layer service | +| `lib/Service/ZgwMappingService.php` | `listMappings()` | REQ-001 | 0.85 | explicit: Explicit mapping-layer service | +| `lib/Service/ZgwMappingService.php` | `deleteMapping()` | REQ-001 | 0.85 | explicit: Explicit mapping-layer service | +| `lib/Service/ZgwMappingService.php` | `getResourceKeys()` | REQ-001 | 0.85 | explicit: Explicit mapping-layer service | +| `lib/Service/ZgwMappingService.php` | `hasMapping()` | REQ-001 | 0.85 | explicit: Explicit mapping-layer service | +| `lib/Service/ZgwMappingService.php` | `resetToDefault()` | REQ-001 | 0.85 | explicit: Explicit mapping-layer service | +| `lib/Service/ZgwPaginationHelper.php` | `wrapResults()` | REQ-002 | 0.82 ⚠️ NEEDS-REVIEW | explicit: ZGW pagination helper — covers REQ-002 endpoint system | +| `lib/Service/ZgwService.php` | `__construct()` | REQ-002 | 0.85 | explicit: Central ZGW orchestrator — REQ-by-REQ mapping deferred to annotate | +| `lib/Service/ZgwService.php` | `getObjectService()` | REQ-002 | 0.85 | explicit: Central ZGW orchestrator — REQ-by-REQ mapping deferred to annotate | +| `lib/Service/ZgwService.php` | `getConsumerMapper()` | REQ-002 | 0.85 | explicit: Central ZGW orchestrator — REQ-by-REQ mapping deferred to annotate | +| `lib/Service/ZgwService.php` | `getZgwMappingService()` | REQ-002 | 0.85 | explicit: Central ZGW orchestrator — REQ-by-REQ mapping deferred to annotate | +| `lib/Service/ZgwService.php` | `getPaginationHelper()` | REQ-002 | 0.85 | explicit: Central ZGW orchestrator — REQ-by-REQ mapping deferred to annotate | +| `lib/Service/ZgwService.php` | `getDocumentService()` | REQ-002 | 0.85 | explicit: Central ZGW orchestrator — REQ-by-REQ mapping deferred to annotate | +| `lib/Service/ZgwService.php` | `getBusinessRulesService()` | REQ-002 | 0.85 | explicit: Central ZGW orchestrator — REQ-by-REQ mapping deferred to annotate | +| `lib/Service/ZgwService.php` | `getLogger()` | REQ-002 | 0.85 | explicit: Central ZGW orchestrator — REQ-by-REQ mapping deferred to annotate | +| `lib/Service/ZgwService.php` | `loadMappingConfig()` | REQ-002 | 0.85 | explicit: Central ZGW orchestrator — REQ-by-REQ mapping deferred to annotate | +| `lib/Service/ZgwService.php` | `translateQueryParams()` | REQ-002 | 0.85 | explicit: Central ZGW orchestrator — REQ-by-REQ mapping deferred to annotate | +| `lib/Service/ZgwService.php` | `createOutboundMapping()` | REQ-002 | 0.85 | explicit: Central ZGW orchestrator — REQ-by-REQ mapping deferred to annotate | +| `lib/Service/ZgwService.php` | `createInboundMapping()` | REQ-002 | 0.85 | explicit: Central ZGW orchestrator — REQ-by-REQ mapping deferred to annotate | +| `lib/Service/ZgwService.php` | `applyOutboundMapping()` | REQ-002 | 0.85 | explicit: Central ZGW orchestrator — REQ-by-REQ mapping deferred to annotate | +| `lib/Service/ZgwService.php` | `applyInboundMapping()` | REQ-002 | 0.85 | explicit: Central ZGW orchestrator — REQ-by-REQ mapping deferred to annotate | +| `lib/Service/ZgwService.php` | `getRequestBody()` | REQ-002 | 0.85 | explicit: Central ZGW orchestrator — REQ-by-REQ mapping deferred to annotate | +| `lib/Service/ZgwService.php` | `resolvePathUuid()` | REQ-002 | 0.85 | explicit: Central ZGW orchestrator — REQ-by-REQ mapping deferred to annotate | +| `lib/Service/ZgwService.php` | `updateCachedBodyField()` | REQ-002 | 0.85 | explicit: Central ZGW orchestrator — REQ-by-REQ mapping deferred to annotate | +| `lib/Service/ZgwService.php` | `buildBaseUrl()` | REQ-002 | 0.85 | explicit: Central ZGW orchestrator — REQ-by-REQ mapping deferred to annotate | +| `lib/Service/ZgwService.php` | `validateJwtAuth()` | REQ-002 | 0.85 | explicit: Central ZGW orchestrator — REQ-by-REQ mapping deferred to annotate | +| `lib/Service/ZgwService.php` | `consumerHasScope()` | REQ-002 | 0.85 | explicit: Central ZGW orchestrator — REQ-by-REQ mapping deferred to annotate | +| `lib/Service/ZgwService.php` | `getConsumerAuthorisaties()` | REQ-002 | 0.85 | explicit: Central ZGW orchestrator — REQ-by-REQ mapping deferred to annotate | +| `lib/Service/ZgwService.php` | `publishNotification()` | REQ-002 | 0.85 | explicit: Central ZGW orchestrator — REQ-by-REQ mapping deferred to annotate | +| `lib/Service/ZgwService.php` | `buildValidationError()` | REQ-002 | 0.85 | explicit: Central ZGW orchestrator — REQ-by-REQ mapping deferred to annotate | +| `lib/Service/ZgwService.php` | `unavailableResponse()` | REQ-002 | 0.85 | explicit: Central ZGW orchestrator — REQ-by-REQ mapping deferred to annotate | +| `lib/Service/ZgwService.php` | `mappingNotFoundResponse()` | REQ-002 | 0.85 | explicit: Central ZGW orchestrator — REQ-by-REQ mapping deferred to annotate | +| `lib/Service/ZgwService.php` | `handleIndex()` | REQ-002 | 0.85 | explicit: Central ZGW orchestrator — REQ-by-REQ mapping deferred to annotate | +| `lib/Service/ZgwService.php` | `handleCreate()` | REQ-002 | 0.85 | explicit: Central ZGW orchestrator — REQ-by-REQ mapping deferred to annotate | +| `lib/Service/ZgwService.php` | `handleShow()` | REQ-002 | 0.85 | explicit: Central ZGW orchestrator — REQ-by-REQ mapping deferred to annotate | +| `lib/Service/ZgwService.php` | `handleUpdate()` | REQ-002 | 0.85 | explicit: Central ZGW orchestrator — REQ-by-REQ mapping deferred to annotate | +| `lib/Service/ZgwService.php` | `handleDestroy()` | REQ-002 | 0.85 | explicit: Central ZGW orchestrator — REQ-by-REQ mapping deferred to annotate | +| `lib/Service/ZgwService.php` | `handleAudittrailIndex()` | REQ-002 | 0.85 | explicit: Central ZGW orchestrator — REQ-by-REQ mapping deferred to annotate | +| `lib/Service/ZgwService.php` | `handleAudittrailShow()` | REQ-002 | 0.85 | explicit: Central ZGW orchestrator — REQ-by-REQ mapping deferred to annotate | +| `lib/Service/ZgwService.php` | `resolveZaakClosed()` | REQ-002 | 0.85 | explicit: Central ZGW orchestrator — REQ-by-REQ mapping deferred to annotate | +| `lib/Service/ZgwService.php` | `resolveZaakClosedFromBody()` | REQ-002 | 0.85 | explicit: Central ZGW orchestrator — REQ-by-REQ mapping deferred to annotate | +| `lib/Service/ZgwService.php` | `resolveParentZaaktypeDraft()` | REQ-002 | 0.85 | explicit: Central ZGW orchestrator — REQ-by-REQ mapping deferred to annotate | +| `lib/Service/ZgwService.php` | `resolveParentZaaktypeDraftFromBody()` | REQ-002 | 0.85 | explicit: Central ZGW orchestrator — REQ-by-REQ mapping deferred to annotate | +| `lib/Service/ZgwService.php` | `mapAuditTrailToZgw()` | REQ-002 | 0.75 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | + +### capability: zgw-business-rules-compliance — 44 methods across 3 files + +| File | Method | REQ | Confidence | Signal | +|---|---|---|---|---| +| `lib/Service/ZgwBusinessRulesService.php` | `__construct()` | ZRC-007 | 0.78 ⚠️ NEEDS-REVIEW | explicit: Business rules dispatcher — routes to *RulesService | +| `lib/Service/ZgwBusinessRulesService.php` | `validate()` | ZRC-007 | 0.78 ⚠️ NEEDS-REVIEW | explicit: Business rules dispatcher — routes to *RulesService | +| `lib/Service/ZgwBusinessRulesService.php` | `dispatchToRegister()` | ZRC-007 | 0.7 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Service/ZgwBusinessRulesService.php` | `dispatchZrc()` | ZRC-007 | 0.7 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Service/ZgwBusinessRulesService.php` | `dispatchZtc()` | ZRC-007 | 0.7 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Service/ZgwBusinessRulesService.php` | `dispatchDrc()` | ZRC-007 | 0.7 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Service/ZgwBusinessRulesService.php` | `dispatchBrc()` | ZRC-007 | 0.7 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Service/ZgwBusinessRulesService.php` | `isValid()` | ZRC-007 | 0.7 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Service/ZgwRulesBase.php` | `__construct()` | ZRC-007 | 0.75 ⚠️ NEEDS-REVIEW | explicit: Rules base class — shared helpers inherited by all rules services | +| `lib/Service/ZgwRulesBase.php` | `setContext()` | ZRC-007 | 0.75 ⚠️ NEEDS-REVIEW | explicit: Rules base class — shared helpers inherited by all rules services | +| `lib/Service/ZgwRulesBase.php` | `isValid()` | ZRC-007 | 0.7 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Service/ZgwRulesBase.php` | `error()` | ZRC-007 | 0.7 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Service/ZgwRulesBase.php` | `fieldError()` | ZRC-007 | 0.7 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Service/ZgwRulesBase.php` | `fieldImmutableError()` | ZRC-007 | 0.7 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Service/ZgwRulesBase.php` | `extractUuid()` | ZRC-007 | 0.7 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Service/ZgwRulesBase.php` | `isValidUrl()` | ZRC-007 | 0.7 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Service/ZgwRulesBase.php` | `validateTypeUrl()` | ZRC-007 | 0.7 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Service/ZgwRulesBase.php` | `validateInformatieobjectUrl()` | ZRC-007 | 0.7 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Service/ZgwRulesBase.php` | `validateExternalUrl()` | ZRC-007 | 0.7 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Service/ZgwRulesBase.php` | `fetchExternalUrl()` | ZRC-007 | 0.7 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Service/ZgwRulesBase.php` | `generateIdentificatie()` | ZRC-007 | 0.7 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Service/ZgwRulesBase.php` | `findObjectByField()` | ZRC-007 | 0.7 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Service/ZgwRulesBase.php` | `findAllObjectsByField()` | ZRC-007 | 0.7 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Service/ZgwRulesBase.php` | `findBySchemaKey()` | ZRC-007 | 0.7 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Service/ZgwRulesBase.php` | `checkFieldUniqueness()` | ZRC-007 | 0.7 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Service/ZgwZrcRulesService.php` | `rulesZakenCreate()` | ZRC-007 | 0.78 ⚠️ NEEDS-REVIEW | explicit: ZRC rules service — specific ZRC-NNN REQ per method requires readin... | +| `lib/Service/ZgwZrcRulesService.php` | `rulesZakenUpdate()` | ZRC-007 | 0.78 ⚠️ NEEDS-REVIEW | explicit: ZRC rules service — specific ZRC-NNN REQ per method requires readin... | +| `lib/Service/ZgwZrcRulesService.php` | `rulesZakenPatch()` | ZRC-007 | 0.78 ⚠️ NEEDS-REVIEW | explicit: ZRC rules service — specific ZRC-NNN REQ per method requires readin... | +| `lib/Service/ZgwZrcRulesService.php` | `rulesStatussenCreate()` | ZRC-007 | 0.78 ⚠️ NEEDS-REVIEW | explicit: ZRC rules service — specific ZRC-NNN REQ per method requires readin... | +| `lib/Service/ZgwZrcRulesService.php` | `rulesResultatenCreate()` | ZRC-007 | 0.78 ⚠️ NEEDS-REVIEW | explicit: ZRC rules service — specific ZRC-NNN REQ per method requires readin... | +| `lib/Service/ZgwZrcRulesService.php` | `rulesRollenCreate()` | ZRC-007 | 0.78 ⚠️ NEEDS-REVIEW | explicit: ZRC rules service — specific ZRC-NNN REQ per method requires readin... | +| `lib/Service/ZgwZrcRulesService.php` | `rulesZaakinformatieobjectenCreate()` | ZRC-007 | 0.78 ⚠️ NEEDS-REVIEW | explicit: ZRC rules service — specific ZRC-NNN REQ per method requires readin... | +| `lib/Service/ZgwZrcRulesService.php` | `rulesZaakinformatieobjectenUpdate()` | ZRC-007 | 0.78 ⚠️ NEEDS-REVIEW | explicit: ZRC rules service — specific ZRC-NNN REQ per method requires readin... | +| `lib/Service/ZgwZrcRulesService.php` | `rulesZaakinformatieobjectenPatch()` | ZRC-007 | 0.78 ⚠️ NEEDS-REVIEW | explicit: ZRC rules service — specific ZRC-NNN REQ per method requires readin... | +| `lib/Service/ZgwZrcRulesService.php` | `rulesZaakeigenschappenCreate()` | ZRC-007 | 0.78 ⚠️ NEEDS-REVIEW | explicit: ZRC rules service — specific ZRC-NNN REQ per method requires readin... | +| `lib/Service/ZgwZrcRulesService.php` | `detectEindstatus()` | ZRC-007 | 0.78 ⚠️ NEEDS-REVIEW | explicit: ZRC rules service — specific ZRC-NNN REQ per method requires readin... | +| `lib/Service/ZgwZrcRulesService.php` | `filterZakenForConsumer()` | ZRC-007 | 0.78 ⚠️ NEEDS-REVIEW | explicit: ZRC rules service — specific ZRC-NNN REQ per method requires readin... | +| `lib/Service/ZgwZrcRulesService.php` | `deriveVertrouwelijkheidaanduiding()` | ZRC-007 | 0.7 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Service/ZgwZrcRulesService.php` | `validateSubResourceType()` | ZRC-007 | 0.7 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Service/ZgwZrcRulesService.php` | `validateZioInformatieobjecttype()` | ZRC-007 | 0.7 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Service/ZgwZrcRulesService.php` | `validateZaakFields()` | ZRC-007 | 0.7 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Service/ZgwZrcRulesService.php` | `validateHoofdzaakNesting()` | ZRC-007 | 0.7 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Service/ZgwZrcRulesService.php` | `validateProductenOfDiensten()` | ZRC-007 | 0.7 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | +| `lib/Service/ZgwZrcRulesService.php` | `checkZioImmutability()` | ZRC-007 | 0.7 ⚠️ NEEDS-REVIEW | Pass B — inherited from public sibling in same class | + +## Bucket 2a — Existing capability, no REQ (reverse-spec --extend) + +### cluster: zgw-business-rules-compliance (39 methods) → `/opsx-reverse-spec procest --extend zgw-business-rules-compliance` + +- `lib/Service/ZgwBrcRulesService.php` — 10 methods: `rulesBesluitenCreate()`, `rulesBesluitenUpdate()`, `rulesBesluitenPatch()`, `rulesBesluitinformatieobjectenCreate()`, `checkBesluitTypeImmutability()`, `checkBesluitFieldImmutability()`, `preserveImmutableBesluitFields()`, `checkBesluitIdentificatieUnique()` + 2 more +- `lib/Service/ZgwDrcRulesService.php` — 13 methods: `rulesEnkelvoudiginformatieobjectenCreate()`, `rulesEnkelvoudiginformatieobjectenUpdate()`, `rulesEnkelvoudiginformatieobjectenPatch()`, `rulesEnkelvoudiginformatieobjectenDestroy()`, `rulesObjectinformatieobjectenCreate()`, `findOioRelationsForDocument()`, `validateIndicatieGebruiksrechtTrue()`, `validateObjectUrl()` + 5 more +- `lib/Service/ZgwZtcRulesService.php` — 16 methods: `checkConceptProtection()`, `defaultConcept()`, `preserveConcept()`, `rulesZaaktypenCreate()`, `rulesBesluittypenCreate()`, `rulesZaaktypeinformatieobjecttypenCreate()`, `rulesResultaattypenCreate()`, `checkDirectConceptProtection()` + 8 more + +### cluster: zgw-api-mapping (13 methods) → `/opsx-reverse-spec procest --extend zgw-api-mapping` + +- `lib/Middleware/ZgwAuthException.php::getStatusCode()` — Exception type for ZgwAuthMiddleware +- `lib/Middleware/ZgwAuthMiddleware.php` — 8 methods: `beforeController()`, `afterException()`, `isConfidentialityAllowed()`, `loadOpenRegisterServices()`, `enforceScopes()`, `scopeGrantCovers()`, `decodeJwtPayload()`, `findConsumerByIssuer()` +- `lib/Service/NotificatieService.php::publish()` — NotificatieService::publish() +- `lib/Service/NotificatieService.php::loadOpenRegisterServices()` — NotificatieService::loadOpenRegisterServices() +- `lib/Service/NotificatieService.php::deliver()` — NotificatieService::deliver() +- `lib/Service/NotificatieService.php::deliverToSubscription()` — NotificatieService::deliverToSubscription() + +### cluster: admin-settings (12 methods) → `/opsx-reverse-spec procest --extend admin-settings` + +- `lib/Controller/SettingsController.php::getObjectService()` — SettingsController::getObjectService() +- `lib/Controller/SettingsController.php::getConfigurationService()` — SettingsController::getConfigurationService() +- `lib/Controller/SettingsController.php::index()` — SettingsController::index() +- `lib/Controller/SettingsController.php::create()` — SettingsController::create() +- `lib/Controller/SettingsController.php::load()` — SettingsController::load() +- `lib/Service/SettingsService.php` — 7 methods: `isOpenRegisterAvailable()`, `loadConfiguration()`, `getSettings()`, `updateSettings()`, `getConfigValue()`, `setConfigValue()`, `autoConfigureAfterImport()` + +### cluster: workflow-import-export (11 methods) → `/opsx-reverse-spec procest --extend workflow-import-export` + +- `lib/Controller/CaseDefinitionController.php::export()` — CaseDefinitionController::export() +- `lib/Controller/CaseDefinitionController.php::validate()` — CaseDefinitionController::validate() +- `lib/Controller/CaseDefinitionController.php::import()` — CaseDefinitionController::import() +- `lib/Service/CaseDefinitionExportService.php::exportCaseDefinition()` — CaseDefinitionExportService::exportCaseDefinition() +- `lib/Service/CaseDefinitionExportService.php::buildManifest()` — CaseDefinitionExportService::buildManifest() +- `lib/Service/CaseDefinitionExportService.php::exportComponent()` — CaseDefinitionExportService::exportComponent() +- `lib/Service/CaseDefinitionExportService.php::incrementVersion()` — CaseDefinitionExportService::incrementVersion() +- `lib/Service/CaseDefinitionImportService.php::validatePackage()` — CaseDefinitionImportService::validatePackage() +- `lib/Service/CaseDefinitionImportService.php::importCaseDefinition()` — CaseDefinitionImportService::importCaseDefinition() +- `lib/Service/CaseDefinitionImportService.php::importComponent()` — CaseDefinitionImportService::importComponent() +- `lib/Service/CaseDefinitionImportService.php::importWorkflows()` — CaseDefinitionImportService::importWorkflows() + +### cluster: advice-management (10 methods) → `/opsx-reverse-spec procest --extend advice-management` + +- `lib/Controller/ConsultationController.php::index()` — ConsultationController::index() +- `lib/Controller/ConsultationController.php::create()` — ConsultationController::create() +- `lib/Controller/ConsultationController.php::updateStatus()` — ConsultationController::updateStatus() +- `lib/Controller/ConsultationController.php::submitResponse()` — ConsultationController::submitResponse() +- `lib/Controller/ConsultationController.php::overdue()` — ConsultationController::overdue() +- `lib/Service/ConsultationService.php::createConsultation()` — ConsultationService::createConsultation() +- `lib/Service/ConsultationService.php::getConsultationsForCase()` — ConsultationService::getConsultationsForCase() +- `lib/Service/ConsultationService.php::updateStatus()` — ConsultationService::updateStatus() +- `lib/Service/ConsultationService.php::submitResponse()` — ConsultationService::submitResponse() +- `lib/Service/ConsultationService.php::getOverdueConsultations()` — ConsultationService::getOverdueConsultations() + +### cluster: case-management (9 methods) → `/opsx-reverse-spec procest --extend case-management` + +- `lib/Controller/EmailController.php::send()` — EmailController::send() +- `lib/Controller/EmailController.php::sendFromTemplate()` — EmailController::sendFromTemplate() +- `lib/Controller/EmailController.php::preview()` — EmailController::preview() +- `lib/Controller/EmailController.php::templates()` — EmailController::templates() +- `lib/Service/CaseEmailService.php::sendEmail()` — CaseEmailService::sendEmail() +- `lib/Service/CaseEmailService.php::sendFromTemplate()` — CaseEmailService::sendFromTemplate() +- `lib/Service/CaseEmailService.php::resolveVariables()` — CaseEmailService::resolveVariables() +- `lib/Service/CaseEmailService.php::findUnresolvedVariables()` — CaseEmailService::findUnresolvedVariables() +- `lib/Service/CaseEmailService.php::processInbound()` — CaseEmailService::processInbound() + +### cluster: wms-wfs-layers (2 methods) → `/opsx-reverse-spec procest --extend wms-wfs-layers` + +- `lib/Controller/GisProxyController.php::capabilities()` — GisProxyController::capabilities() +- `lib/Service/GisProxyService.php::getCapabilities()` — GisProxyService::getCapabilities() + +## Bucket 2b — No capability owner (reverse-spec --cluster) + +### cluster: ai-assistant (43 methods) → `/opsx-reverse-spec procest --cluster ai-assistant` + +- `lib/Controller/AiController.php` — 12 methods: `classify()`, `extract()`, `ask()`, `summarize()`, `suggestRouting()`, `suggestNext()`, `recordAction()`, `auditIndex()` + 4 more +- `lib/Service/AiService.php` — 21 methods: `isEnabled()`, `isFeatureEnabled()`, `classifyDocument()`, `extractData()`, `askQuestion()`, `summarize()`, `suggestRouting()`, `suggestNextStep()` + 13 more +- `src/services/aiApi.js` — 10 methods: `classifyDocument()`, `extractData()`, `askQuestion()`, `summarize()`, `suggestRouting()`, `suggestNext()`, `getAuditLog()`, `getAiSettings()` + 2 more + +### cluster: appointments (35 methods) → `/opsx-reverse-spec procest --cluster appointments` + +- `lib/BackgroundJob/AppointmentReminderJob.php::run()` +- `lib/Controller/AppointmentController.php::index()` +- `lib/Controller/AppointmentController.php::create()` +- `lib/Controller/AppointmentController.php::cancel()` +- `lib/Controller/AppointmentController.php::noShow()` +- `lib/Controller/AppointmentController.php::timeslots()` +- `lib/Controller/PublicAppointmentController.php::view()` +- `lib/Controller/PublicAppointmentController.php::cancel()` +- `lib/Service/AppointmentBackend/JccBackend.php::getTimeslots()` +- `lib/Service/AppointmentBackend/JccBackend.php::bookAppointment()` +- `lib/Service/AppointmentBackend/JccBackend.php::cancelAppointment()` +- `lib/Service/AppointmentBackend/JccBackend.php::rescheduleAppointment()` +- `lib/Service/AppointmentBackend/LocalBackend.php::getTimeslots()` +- `lib/Service/AppointmentBackend/LocalBackend.php::bookAppointment()` +- `lib/Service/AppointmentBackend/LocalBackend.php::cancelAppointment()` +- `lib/Service/AppointmentBackend/LocalBackend.php::rescheduleAppointment()` +- `lib/Service/AppointmentBackend/QmaticBackend.php::getTimeslots()` +- `lib/Service/AppointmentBackend/QmaticBackend.php::bookAppointment()` +- `lib/Service/AppointmentBackend/QmaticBackend.php::cancelAppointment()` +- `lib/Service/AppointmentBackend/QmaticBackend.php::rescheduleAppointment()` +- `lib/Service/AppointmentService.php` — 8 methods: `getTimeslots()`, `bookAppointment()`, `cancelAppointment()`, `markNoShow()`, `getAppointmentsForCase()`, `getAppointmentByToken()`, `getBackend()`, `getObjectService()` +- `src/services/appointmentApi.js::listAppointments()` +- `src/services/appointmentApi.js::bookAppointment()` +- `src/services/appointmentApi.js::cancelAppointment()` +- `src/services/appointmentApi.js::markNoShow()` +- `src/services/appointmentApi.js::getTimeslots()` +- `src/views/public/PublicAppointmentPage.vue::formatDateTime()` +- `src/views/public/PublicAppointmentPage.vue::if()` + +### cluster: case-sharing (29 methods) → `/opsx-reverse-spec procest --cluster case-sharing` + +- `lib/BackgroundJob/ShareMaintenanceJob.php::run()` +- `lib/Controller/CaseSharingController.php::listShares()` +- `lib/Controller/CaseSharingController.php::createShare()` +- `lib/Controller/CaseSharingController.php::revokeShare()` +- `lib/Controller/CaseSharingController.php::initiateTransfer()` +- `lib/Controller/CaseSharingController.php::handleTransfer()` +- `lib/Controller/PublicShareController.php::accessShare()` +- `lib/Controller/PublicShareController.php::addComment()` +- `lib/Controller/PublicShareController.php::viewStatus()` +- `lib/Controller/PublicShareController.php::loadCaseData()` +- `lib/Service/CaseSharingService.php` — 11 methods: `generateToken()`, `createTokenShare()`, `createPartnerShare()`, `getSharesByCase()`, `revokeShare()`, `validateToken()`, `getFilteredCaseData()`, `maskBsn()` + 3 more +- `lib/Service/CaseTransferService.php::initiateTransfer()` +- `lib/Service/CaseTransferService.php::acceptTransfer()` +- `lib/Service/CaseTransferService.php::rejectTransfer()` +- `lib/Service/CaseTransferService.php::getObjectService()` +- `src/views/public/PublicCaseView.vue::loadShareData()` +- `src/views/public/PublicCaseView.vue::if()` +- `src/views/public/PublicStatusPage.vue::loadStatus()` +- `src/views/public/PublicStatusPage.vue::if()` + +### cluster: stuf-protocol (29 methods) → `/opsx-reverse-spec procest --cluster stuf-protocol` + +- `lib/Controller/StufController.php` — 10 methods: `zaken()`, `personen()`, `handleSoapMessage()`, `handleZakLk01()`, `handleZakLv01()`, `handleNpsLv01()`, `handleEdcLk01()`, `handleUnknownMessage()` + 2 more +- `lib/Service/StufFieldMappingService.php` — 13 methods: `mapZknToInternal()`, `mapInternalToZkn()`, `mapBgToInternal()`, `mapInternalToBg()`, `stufDateToIso()`, `isoToStufDate()`, `isoToStufDateTime()`, `confidentialityToInternal()` + 5 more +- `lib/Service/StufMessageBuilder.php::buildSoapEnvelope()` +- `lib/Service/StufMessageBuilder.php::buildStuurgegevens()` +- `lib/Service/StufMessageBuilder.php::buildBv01()` +- `lib/Service/StufMessageBuilder.php::buildFo01()` +- `lib/Service/StufMessageBuilder.php::buildSoapFault()` +- `lib/Service/StufMessageBuilder.php::generateUuid()` + +### cluster: multi-tenancy (24 methods) → `/opsx-reverse-spec procest --cluster multi-tenancy` + +- `lib/Controller/TenantController.php::index()` +- `lib/Controller/TenantController.php::create()` +- `lib/Controller/TenantController.php::provision()` +- `lib/Controller/TenantController.php::usage()` +- `lib/Controller/TenantController.php::current()` +- `lib/Controller/TenantController.php::isPlatformAdmin()` +- `lib/Middleware/TenantMiddleware.php::beforeController()` +- `lib/Middleware/TenantMiddleware.php::afterException()` +- `lib/Service/TenantService.php` — 9 methods: `getTenantForUser()`, `getTenantByGroupId()`, `createTenant()`, `provisionTenant()`, `getResourceUsage()`, `isUserInTenant()`, `isPlatformAdmin()`, `slugify()` + 1 more +- `src/services/tenantApi.js` — 7 methods: `listTenants()`, `createTenant()`, `getTenant()`, `updateTenant()`, `provisionTenant()`, `getTenantUsage()`, `getCurrentTenant()` + +### cluster: leges (21 methods) → `/opsx-reverse-spec procest --cluster leges` + +- `lib/Controller/LegesController.php::calculate()` +- `lib/Controller/LegesController.php::recalculate()` +- `lib/Controller/LegesController.php::verrekening()` +- `lib/Controller/LegesController.php::teruggaaf()` +- `lib/Controller/LegesController.php::export()` +- `lib/Service/LegesCalculationService.php` — 10 methods: `calculate()`, `recalculate()`, `calculateVerrekening()`, `calculateTeruggaaf()`, `calculateArtikel()`, `calculateVast()`, `calculatePercentage()`, `calculateStaffel()` + 2 more +- `lib/Service/LegesExportService.php::export()` +- `lib/Service/LegesExportService.php::exportCSV()` +- `lib/Service/LegesExportService.php::exportASCII()` +- `lib/Service/LegesExportService.php::exportXML()` +- `lib/Service/LegesExportService.php::flattenBerekening()` +- `lib/Service/LegesExportService.php::addXmlElement()` + +### cluster: berichtenbox (17 methods) → `/opsx-reverse-spec procest --cluster berichtenbox` + +- `lib/BackgroundJob/BerichtenboxReadStatusJob.php::run()` +- `lib/Controller/BerichtenboxController.php::send()` +- `lib/Controller/BerichtenboxController.php::messages()` +- `lib/Controller/BerichtenboxController.php::poll()` +- `lib/Service/BerichtenboxAdapter/MockAdapter.php::sendMessage()` +- `lib/Service/BerichtenboxAdapter/MockAdapter.php::getReadStatus()` +- `lib/Service/BerichtenboxService.php` — 7 methods: `sendMessage()`, `getMessagesForCase()`, `pollReadStatus()`, `validateBsn()`, `validateMessage()`, `getAdapter()`, `getObjectService()` +- `src/services/berichtenboxApi.js::sendMessage()` +- `src/services/berichtenboxApi.js::listMessages()` +- `src/services/berichtenboxApi.js::getTypeCodes()` +- `src/services/berichtenboxApi.js::pollReadStatus()` + +### cluster: templates (6 methods) → `/opsx-reverse-spec procest --cluster templates` + +- `lib/Controller/TemplateController.php::index()` +- `lib/Controller/TemplateController.php::show()` +- `lib/Controller/TemplateController.php::activate()` +- `lib/Service/TemplateLibraryService.php::listTemplates()` +- `lib/Service/TemplateLibraryService.php::loadTemplate()` +- `lib/Service/TemplateLibraryService.php::activateTemplate()` + +### cluster: dso-intake (2 methods) → `/opsx-reverse-spec procest --cluster dso-intake` + +- `lib/Service/DsoIntakeService.php::processAanvraag()` +- `lib/Service/DsoIntakeService.php::getDeadlineDuration()` + +## Bucket 3 — Surfaced for human triage + +### 3a — possibly broken + +*Skipped this run — `git log -S` heuristic was noisy on a greenfield-over-specs codebase. Every unmatched REQ collapses to 3b with a note.* + +### 3b — never implemented (73 REQs in 19 untouched capabilities) + +*These are REQs in capabilities where **zero** methods landed in Bucket 1. They're likely unimplemented — not just unmatched.* + +#### advice-management (3 REQs) + +- `REQ-001` — Advice request schema +- `REQ-002` — Advice panel on case dashboard +- `REQ-003` — Advice request form + +#### automatic-actions (2 REQs) + +- `REQ-001` — Automatic Action Framework +- `REQ-002` — Action Execution Error Handling + +#### beroep-escalation (5 REQs) + +- `REQ-001` — Beroep Case Type Pre-Seeded Configuration +- `REQ-002` — Beroep Status Types +- `REQ-003` — Escalation from Bezwaar to Beroep +- `REQ-004` — Court Proceedings Document Management +- `REQ-005` — Hoger Beroep Awareness + +#### bezwaar-advisory-committee (2 REQs) + +- `REQ-001` — Advisory Committee Report Schema +- `REQ-002` — Committee Composition Tracking + +#### bezwaar-decision (3 REQs) + +- `REQ-001` — Decision on Objection Schema +- `REQ-002` — Decision Notification +- `REQ-003` — Heroverweging (Full Reconsideration) + +#### bezwaar-hearing (3 REQs) + +- `REQ-001` — Hearing Session Management +- `REQ-002` — Hearing Waiver (Afzien van Hoorrecht) +- `REQ-003` — Hearing Participants and Access Rights + +#### case-location (4 REQs) + +- `REQ-LOC-01` — Case Detail Map Tab +- `REQ-LOC-02` — Location Picker +- `REQ-LOC-03` — Address Display and Reverse Geocoding +- `REQ-LOC-04` — Case Creation Location + +#### deelzaak-support (6 REQs) + +- `REQ-001` — Sub-case creation from parent case +- `REQ-002` — Sub-cases section on parent case detail +- `REQ-003` — Parent case breadcrumb navigation +- `REQ-004` — Sub-case progress roll-up on parent case +- `REQ-005` — Sub-case count in case list +- `REQ-006` — Sub-case deletion protection + +#### enforcement-lhs (4 REQs) + +- `REQ-001` — LHS matrix configuration +- `REQ-002` — Enforcement action schema +- `REQ-003` — Enforcement wizard +- `REQ-004` — Enforcement panel on case dashboard + +#### parafering-dashboard (4 REQs) + +- `REQ-001` — Secretariaat Parafering Overview +- `REQ-002` — Personal Parafering Inbox +- `REQ-003` — Send Parafering Reminder +- `REQ-004` — Voorstel List Navigation + +#### process-step-configuration (2 REQs) + +- `REQ-001` — Process Step CRUD within Workflow +- `REQ-002` — Step-to-Task Mapping at Runtime + +#### procest-case-management (13 REQs) + +- `REQ-001` — 1: Register and schemas MUST be auto-configured on install +- `REQ-002` — 2: Cases list view MUST display paginated, searchable case overview +- `REQ-003` — 3: Case create dialog MUST support type-driven case creation +- `REQ-004` — 4: Case detail view MUST display full case information with related data +- `REQ-005` — 5: Status lifecycle MUST support configurable status flows with mandatory result on closure +- `REQ-006` — 6: Deadline and timing MUST support processing deadlines with extensions +- `REQ-007` — 7: Tasks MUST be manageable within case context +- `REQ-008` — 8: Participants MUST be manageable per case +- `REQ-009` — 9: Activity timeline MUST record all case events +- `REQ-010` — 10: Case type administration MUST support configuring case types +- `REQ-011` — 11: Navigation MUST include all primary views +- `REQ-012` — 12: Dashboard MUST provide overview metrics and quick access +- `REQ-013` — 13: ZGW API compatibility MUST be maintained + +#### role-based-step-routing (3 REQs) + +- `REQ-001` — Role-Based Step Visibility +- `REQ-002` — Role-Based Transition Access +- `REQ-003` — Workflow Inheritance for Role Configuration + +#### status-transition-engine (3 REQs) + +- `REQ-001` — Guard Evaluation Engine +- `REQ-002` — Transition Execution +- `REQ-003` — Available Transitions for Current User + +#### visual-workflow-editor (3 REQs) + +- `REQ-001` — Drag-and-Drop Workflow Canvas +- `REQ-002` — Workflow Editor Validation +- `REQ-003` — Step Configuration Panel + +#### vth-workflow-templates (4 REQs) + +- `REQ-001` — Omgevingsvergunning workflow template +- `REQ-002` — Toezichtzaak workflow template +- `REQ-003` — Handhavingszaak workflow template +- `REQ-004` — VTH workflow template library + +#### workflow-definition-model (5 REQs) + +- `REQ-001` — Workflow Template Data Model +- `REQ-002` — Workflow Step Data Model +- `REQ-003` — Status Transition Data Model +- `REQ-004` — Pre-Seeded Bezwaar Workflow Template +- `REQ-005` — Pre-Seeded Beroep Workflow Template + +#### workflow-import-export (2 REQs) + +- `REQ-001` — Export Workflow Template +- `REQ-002` — Import Workflow Template + +#### zaaktype-versioning (2 REQs) + +- `REQ-001` — Workflow Template Versioning +- `REQ-002` — Case-to-Workflow-Version Binding + +## Bucket 4 — ADR conformance findings + +### missing `@license` in file docblock (13 files) + +- `lib/BackgroundJob/AppointmentReminderJob.php` +- `lib/BackgroundJob/BerichtenboxReadStatusJob.php` +- `lib/Controller/AppointmentController.php` +- `lib/Controller/BerichtenboxController.php` +- `lib/Controller/PublicAppointmentController.php` +- `lib/Service/AppointmentBackend/AppointmentBackendInterface.php` +- `lib/Service/AppointmentBackend/JccBackend.php` +- `lib/Service/AppointmentBackend/LocalBackend.php` +- `lib/Service/AppointmentBackend/QmaticBackend.php` +- `lib/Service/AppointmentService.php` +- `lib/Service/BerichtenboxAdapter/BerichtenboxAdapterInterface.php` +- `lib/Service/BerichtenboxAdapter/MockAdapter.php` +- `lib/Service/BerichtenboxService.php` + +### missing `@copyright` in file docblock (13 files) + +Same 13 files — both `@license` and `@copyright` missing together (appointments + berichtenbox clusters). + +### missing `@spec` in file docblock (89 of 89 files) + +Expected — this is exactly what retrofit fixes. Not a separate finding. + +### forbidden debug helpers — 0 hits ✓ + +### direct SQL — 0 files ✓ (ADR-001 compliant) + +## Notes for the human reviewer + +- case-management/spec.md has duplicated REQ blocks (pilot noted lines 63-945 vs 1013-1946). Pre-retrofit cleanup recommended; counted 45 REQ headings but ~22 are unique. +- Frontend (Vue/TS) classification is file-level — every method in a mapped view inherits the capability's first REQ with confidence 0.78 NEEDS-REVIEW. Specific REQ per method requires reading the component body during /opsx-annotate. +- Large ZGW controllers and rules services (ZrcController 39 methods, ZgwService 37, ZgwZrcRulesService 19) are bucketed via explicit file-level overrides to zgw-api-mapping / zgw-business-rules-compliance. Per-method REQ assignment deferred to annotate. +- Bucket 2b cluster 'workflow-import-export' is tentative — a workflow-import-export spec exists (2 REQs) but my classifier kept CaseDefinition* files in 2a until human confirms scope overlap. +- zgw-business-rules-compliance spec only covers ZRC rules (11 REQs). Methods in ZgwDrcRulesService, ZgwZtcRulesService, ZgwBrcRulesService landed in Bucket 2a — they extend the capability but have no matching REQ in the spec. +- Bucket 3b is computed conservatively: only REQs in capabilities that have ZERO Bucket 1 methods are marked unimplemented. REQs in 'touched' capabilities (admin-settings, case-management, etc.) are assumed implemented but not precisely mapped — their specific REQ-to-method assignment is deferred to /opsx-annotate. +- 3a classification disabled — git log -S heuristic was unreliable on this greenfield-over-specs codebase; every untouched REQ collapsed to 3b with a note. diff --git a/openspec/coverage-report.pilot.json b/openspec/coverage-report.pilot.json new file mode 100644 index 00000000..fc5d18af --- /dev/null +++ b/openspec/coverage-report.pilot.json @@ -0,0 +1,197 @@ +{ + "generated_at": "2026-04-20T00:00:00Z", + "app": "procest", + "branch": "fix/header-info-email-phpcs", + "scanner_version": "1-pilot", + "scope": { + "php": "lib/**/*.php (89 files scanned)", + "frontend": "deferred — src/**/*.{vue,ts,js} (184 files) not yet scanned", + "python": "not applicable (procest is PHP)", + "classification_depth": "file-level primary, method-level only for Bucket 1 representative examples" + }, + "req_inventory_summary": { + "total_specs": 46, + "req_numbered_specs": 15, + "req_numbered_count": 183, + "requirement_named_specs": 31, + "requirement_named_count": 160, + "total_requirements": 343, + "notes": "case-management/spec.md has duplicated REQ blocks; treated as 22 unique. Requirement-named specs need synthesized IDs." + }, + "buckets": { + "annotated": [], + "plumbing": [ + {"file": "lib/Dashboard/CasesOverviewWidget.php", "reason": "IWidget boilerplate (getId/Title/Order/IconClass/Url)"}, + {"file": "lib/Dashboard/DeadlineAlertsWidget.php", "reason": "IWidget boilerplate"}, + {"file": "lib/Dashboard/MyTasksWidget.php", "reason": "IWidget boilerplate"}, + {"file": "lib/Dashboard/OverdueCasesWidget.php", "reason": "IWidget boilerplate"}, + {"file": "lib/Dashboard/StalledCasesWidget.php", "reason": "IWidget boilerplate"}, + {"file": "lib/Dashboard/StartCaseWidget.php", "reason": "IWidget boilerplate"}, + {"file": "lib/Dashboard/TaskRemindersWidget.php", "reason": "IWidget boilerplate — note: load() bodies contain real logic and should be Bucket 1 (dashboard#REQ-DASH-015); only getId/Title/etc are plumbing"}, + {"file": "lib/Middleware/ZgwAuthException.php", "reason": "exception class with getStatusCode()"}, + {"file": "lib/Service/AppointmentBackend/AppointmentBackendInterface.php", "reason": "interface declaration only"}, + {"file": "lib/Service/BerichtenboxAdapter/BerichtenboxAdapterInterface.php", "reason": "interface declaration only"} + ], + "bucket_1": [ + {"file": "lib/Settings/AdminSettings.php", "capability": "admin-settings", "req": "REQ-ADMIN-001", "methods": ["getForm", "getSection", "getPriority", "getScope"], "confidence": 0.95, "signal": "direct Nextcloud ISettings implementation; spec cites AdminSettings class"}, + {"file": "lib/Sections/SettingsSection.php", "capability": "admin-settings", "req": "REQ-ADMIN-001", "methods": ["getID", "getName", "getPriority", "getIcon"], "confidence": 0.95, "signal": "spec cites SettingsSection class directly"}, + {"file": "lib/Controller/SettingsController.php", "capability": "admin-settings", "req": "REQ-ADMIN-014", "methods": ["getSettings", "updateSettings"], "confidence": 0.82, "needs_review": true, "signal": "settings endpoints but spec is UI-focused"}, + {"file": "lib/Controller/ZrcController.php", "capability": "zgw-api-mapping", "req": "zgw-api-mapping#Requirement-1..6", "methods": ["index", "create", "show", "update", "patch", "destroy"], "confidence": 0.92, "signal": "ZrcController = ZGW Zaakregistratiecomponent; REST verbs match spec"}, + {"file": "lib/Controller/ZtcController.php", "capability": "zgw-api-mapping", "req": "zgw-api-mapping ZTC requirements", "methods": ["(6 CRUD + 6 ZTC-specific publics)"], "confidence": 0.92, "signal": "ZtcController = Zaaktypecatalogus"}, + {"file": "lib/Controller/DrcController.php", "capability": "zgw-api-mapping", "req": "zgw-api-mapping DRC requirements", "methods": ["index", "create", "show", "update", "patch", "destroy", "download", "lock", "unlock", "audittrailIndex", "audittrailShow", "uploadChunk"], "confidence": 0.92, "signal": "DrcController = Documentregistratie"}, + {"file": "lib/Controller/BrcController.php", "capability": "zgw-api-mapping", "req": "zgw-api-mapping BRC requirements", "methods": ["index", "create", "show", "update", "patch", "destroy", "audittrailIndex", "audittrailShow"], "confidence": 0.92, "signal": "BrcController = Besluitregistratie"}, + {"file": "lib/Controller/NrcController.php", "capability": "zgw-api-mapping", "req": "zgw-api-mapping NRC requirements", "methods": "(10 publics)", "confidence": 0.90, "signal": "NRC = Notificatieroutercomponent"}, + {"file": "lib/Controller/AcController.php", "capability": "zgw-api-mapping", "req": "zgw-api-mapping AC requirements", "methods": ["index", "create", "show", "update", "patch", "destroy"], "confidence": 0.88, "signal": "AC = Autorisatiecomponent"}, + {"file": "lib/Service/ZgwService.php", "capability": "zgw-api-mapping", "req": "multiple (needs method-level pass)", "methods": "(36 publics)", "confidence": 0.90, "signal": "central ZGW orchestrator"}, + {"file": "lib/Service/ZgwMappingService.php", "capability": "zgw-api-mapping", "req": "zgw-api-mapping mapping layer", "methods": "(8 publics)", "confidence": 0.88, "signal": "explicit mapping service"}, + {"file": "lib/Repair/LoadDefaultZgwMappings.php", "capability": "zgw-api-mapping", "req": "zgw-api-mapping (seed)", "methods": ["getDefaultMappings"], "confidence": 0.90, "signal": "28 private getXxxMapping helpers inherit the single public REQ tag"}, + {"file": "lib/Controller/MetricsController.php", "capability": "prometheus-metrics", "req": "REQ-PROM-001", "methods": ["index"], "confidence": 0.97, "signal": "direct match — spec explicitly names metrics endpoint"}, + {"file": "lib/Controller/MetricsController.php", "capability": "prometheus-metrics", "req": "REQ-PROM-001, REQ-PROM-002, REQ-PROM-003, REQ-PROM-009", "methods": ["collectMetrics", "getCached", "checkDatabaseHealth", "getCaseCounts", "getOverdueCasesCount", "getCasesCreatedTodayCount", "getTaskCounts", "getOverdueTasksCount"], "confidence": 0.88, "signal": "Pass B — private helpers inherited from index()"}, + {"file": "lib/Controller/HealthController.php", "capability": "prometheus-metrics", "req": "REQ-PROM-004", "methods": ["index"], "confidence": 0.97, "signal": "direct match — REQ-PROM-004 Health Check Endpoint"}, + {"file": "lib/Controller/HealthController.php", "capability": "prometheus-metrics", "req": "REQ-PROM-004", "methods": ["checkDatabase", "checkOpenRegister", "checkFilesystem", "getAppVersion"], "confidence": 0.88, "signal": "Pass B — inherited from index()"}, + {"file": "lib/AppInfo/Application.php", "capability": "procest-app-scaffold", "req": "procest-app-scaffold Scenario 1.1/1.2", "methods": ["register", "boot"], "confidence": 0.93, "signal": "canonical bootstrap class"}, + {"file": "lib/Controller/DashboardController.php", "capability": "procest-app-scaffold", "req": "procest-app-scaffold (Vue SPA entry)", "methods": ["page"], "confidence": 0.90, "signal": "main template route"}, + {"file": "lib/Repair/InitializeSettings.php", "capability": "procest-app-scaffold", "req": "procest-app-scaffold (InitializeSettings repair step)", "methods": ["getName", "run"], "confidence": 0.95, "signal": "spec names class directly"}, + {"file": "lib/Listener/DeepLinkRegistrationListener.php", "capability": "procest-app-scaffold", "req": "procest-app-scaffold (deep link registration)", "methods": ["handle"], "confidence": 0.85, "signal": "spec mentions deep-link integration"}, + {"file": "lib/Controller/ParaferingController.php", "capability": "parafering-actions + parafeerroute-engine", "req": "multiple (needs method-level)", "methods": ["createVoorstel", "startParafering", "executeAction", "getAuditTrail", "getCurrentStep", "overrideRoute"], "confidence": 0.85, "signal": "terminology match on all method names"}, + {"file": "lib/Service/ParaferingService.php", "capability": "parafering-actions + parafeerroute-engine", "req": "multiple", "methods": "(same 7 publics)", "confidence": 0.85, "signal": "service-layer twin"}, + {"file": "lib/Service/ParaferingNotificationService.php", "capability": "parafering-actions", "req": "parafering-actions notifications", "methods": ["notifyStepActivated", "notifyVoorstelReturned", "notifyParaferingReminder"], "confidence": 0.82, "needs_review": true, "signal": "specific REQ needs reading"}, + {"file": "lib/Controller/GisProxyController.php", "capability": "wms-wfs-layers", "req": "REQ-LAYER-03, REQ-LAYER-04", "methods": ["proxy", "capabilities"], "confidence": 0.95, "signal": "direct match"}, + {"file": "lib/Service/GisProxyService.php", "capability": "wms-wfs-layers", "req": "REQ-LAYER-03, REQ-LAYER-04", "methods": ["proxyRequest", "getCapabilities"], "confidence": 0.92, "signal": "service twin"}, + {"file": "lib/Controller/InspectionController.php", "capability": "inspection-checklists", "req": "inspection-checklists requirements", "methods": ["index", "captureLocation", "completeChecklistItem", "addPhoto", "complete"], "confidence": 0.90, "signal": "name match"}, + {"file": "lib/Service/InspectionService.php", "capability": "inspection-checklists", "req": "inspection-checklists requirements", "methods": "(5 publics)", "confidence": 0.88, "signal": "service twin"}, + {"file": "lib/Service/ChecklistService.php", "capability": "inspection-checklists", "req": "inspection-checklists progress/validation", "methods": ["completeItem", "getProgress", "validateCompletion", "getConformitySummary"], "confidence": 0.85, "signal": "verb match"}, + {"file": "lib/Service/MilestoneService.php", "capability": "doorlooptijd-dashboard", "req": "doorlooptijd-dashboard requirements", "methods": ["getMilestones", "getCaseProgress", "markMilestone", "reverseMilestone", "getDurationAnalytics"], "confidence": 0.85, "signal": "milestones = doorloop milestones"}, + {"file": "lib/Controller/MilestoneController.php", "capability": "doorlooptijd-dashboard", "req": "doorlooptijd-dashboard", "methods": ["progress"], "confidence": 0.85, "signal": "name match"}, + {"file": "lib/Repair/SeedBezwaarBeroepData.php", "capability": "vth-case-type-seed", "req": "vth-case-type-seed", "methods": ["getName", "run"], "confidence": 0.92, "signal": "name match"}, + {"file": "lib/Service/SeedDataService.php", "capability": "vth-case-type-seed", "req": "vth-case-type-seed", "methods": ["seedBezwaarBeroepData"], "confidence": 0.92, "signal": "name match"}, + {"file": "lib/BackgroundJob/AppointmentReminderJob.php", "capability": "(none)", "req": "(2b cluster: appointments)", "methods": ["run"], "confidence": null, "signal": "moved to Bucket 2b"} + ], + "bucket_2a": { + "case-management": { + "methods": [ + {"file": "lib/Controller/EmailController.php", "methods": ["send", "sendFromTemplate", "preview", "templates"], "observed_behavior": "case email integration not in existing REQs"}, + {"file": "lib/Service/CaseEmailService.php", "methods": "(8 publics)", "observed_behavior": "outbound email with template rendering per caseType, inbound reply matching by subject"} + ] + }, + "admin-settings": { + "methods": [ + {"file": "lib/Controller/SettingsController.php", "methods": ["(non-UI settings-bag endpoints)"], "observed_behavior": "REQ-ADMIN-* covers UI, not the bare settings-bag API"} + ] + }, + "inspection-checklists": { + "methods": [ + {"file": "lib/Service/InspectionService.php", "methods": ["calculateDistance"], "observed_behavior": "GPS distance helper not specified"} + ] + }, + "zgw-api-mapping": { + "methods": [ + {"file": "lib/Middleware/ZgwAuthMiddleware.php", "methods": "(4 publics + 5 privates)", "observed_behavior": "ZGW scope-based JWT auth not specified in zgw-api-mapping spec"} + ] + } + }, + "bucket_2b": { + "appointments": { + "files": [ + "lib/Controller/AppointmentController.php", + "lib/Controller/PublicAppointmentController.php", + "lib/BackgroundJob/AppointmentReminderJob.php", + "lib/Service/AppointmentService.php", + "lib/Service/AppointmentBackend/AppointmentBackendInterface.php", + "lib/Service/AppointmentBackend/JccBackend.php", + "lib/Service/AppointmentBackend/LocalBackend.php", + "lib/Service/AppointmentBackend/QmaticBackend.php" + ], + "observed_behavior": "Appointment booking with 3 pluggable backends (JCC for municipal self-service, Qmatic for queue management, Local for dev). Book/cancel/reschedule/no-show + public reschedule via token. Nightly reminder job." + }, + "berichtenbox": { + "files": [ + "lib/Controller/BerichtenboxController.php", + "lib/BackgroundJob/BerichtenboxReadStatusJob.php", + "lib/Service/BerichtenboxService.php", + "lib/Service/BerichtenboxAdapter/BerichtenboxAdapterInterface.php", + "lib/Service/BerichtenboxAdapter/MockAdapter.php" + ], + "observed_behavior": "Sends citizen messages to Dutch government MijnOverheid Berichtenbox with BSN validation; polls read status via adapter pattern." + }, + "case-sharing": { + "files": [ + "lib/Controller/CaseSharingController.php", + "lib/Controller/PublicShareController.php", + "lib/BackgroundJob/ShareMaintenanceJob.php", + "lib/Service/CaseSharingService.php", + "lib/Service/CaseTransferService.php" + ], + "observed_behavior": "Tokenized public-read links for cases, partner shares with filtered case data, case transfer between users/orgs with accept/reject workflow." + }, + "stuf-protocol": { + "files": [ + "lib/Controller/StufController.php", + "lib/Service/StufFieldMappingService.php", + "lib/Service/StufMessageBuilder.php" + ], + "observed_behavior": "Bidirectional SOAP-based StUF-ZKN / StUF-BG protocol mapping — ISO ↔ StUF date formats, confidentiality level mapping, StUF message construction for legacy ZGW clients." + }, + "leges": { + "files": [ + "lib/Controller/LegesController.php", + "lib/Service/LegesCalculationService.php", + "lib/Service/LegesExportService.php" + ], + "observed_behavior": "Tax/fee calculation with 5 strategies (vast, percentage, staffel, maximum, combinatie), recalculation on case changes, verrekening (offset) + teruggaaf (refund) paths, exports to CSV/ASCII/XML." + }, + "ai-assistant": { + "files": [ + "lib/Controller/AiController.php", + "lib/Service/AiService.php" + ], + "observed_behavior": "Case-scoped AI: document classification, data extraction, Q&A, summarization, routing suggestion, next-step suggestion. PII stripping, audit trail, per-feature enable flags." + }, + "multi-tenancy": { + "files": [ + "lib/Controller/TenantController.php", + "lib/Middleware/TenantMiddleware.php", + "lib/Service/TenantService.php" + ], + "observed_behavior": "Tenant resolution on requests, tenant-scoped CRUD, per-controller tenant enforcement." + }, + "templates": { + "files": [ + "lib/Controller/TemplateController.php", + "lib/Service/TemplateLibraryService.php" + ], + "observed_behavior": "Template library for case-type configurations (separate from email templates)." + }, + "dso-intake": { + "files": ["lib/Service/DsoIntakeService.php"], + "observed_behavior": "Receives DSO (Digitaal Stelsel Omgevingswet) aanvraag messages and converts to internal cases." + } + }, + "bucket_3a": [], + "bucket_3b": [], + "bucket_4": { + "missing-spec-in-file-docblock": { + "count": 89, + "note": "expected — this is what retrofit fixes; subsumed by Bucket 1/2 work" + } + } + }, + "ignored": 0, + "notes": [ + "case-management/spec.md has duplicated REQ blocks (lines 63-945 and 1013-1946) — pre-retrofit cleanup recommended.", + "ZrcController is large (17 publics + 22 privates) — chunked annotation by method-group recommended.", + "Requirement-named spec dialect (31 specs, 160 reqs) needs synthesized REQ-IDs; confidence scores for these will run lower.", + "Vue/TS frontend (184 files) not scanned in this pass — follow-up scan required.", + "Consultation cluster likely maps to advice-management (2a, not 2b) — verify before reverse-spec run.", + "NotificatieService likely covered by zgw-api-mapping NRC requirements (2a, not 2b) — verify.", + "case-definition-export-import may overlap workflow-import-export spec (2a, not 2b) — verify.", + "Bucket 3 reverse pass deferred — requires full REQ-to-method coverage map before it's meaningful." + ], + "suggested_next_steps": [ + "Review this report; flag any Bucket 1 matches that look wrong.", + "Decide 2a vs 2b for borderline clusters (consultation, notifications, case-definition-export-import).", + "Decide sequencing for reverse-spec passes — start with self-contained clusters (leges, stuf-protocol).", + "Schedule Vue scan follow-up — same skill, wider glob.", + "/opsx-annotate procest — will create retrofit-annotate-procest-2026-04-20 ghost change." + ] +} diff --git a/openspec/coverage-report.pilot.md b/openspec/coverage-report.pilot.md new file mode 100644 index 00000000..f8a27752 --- /dev/null +++ b/openspec/coverage-report.pilot.md @@ -0,0 +1,260 @@ +# Coverage Report — procest + +Generated: 2026-04-20 (manual pilot run) +Branch: `fix/header-info-email-phpcs` (46 specs present; matches `development`) +Scanner: opsx-coverage-scan v1 (pilot pass — manual execution by Claude Opus) + +## Pilot scope note + +This first pilot pass covers **PHP `lib/` only** (89 files). The Vue/TypeScript frontend (184 files under `src/`) is deferred to a follow-up scan — the file-level classification heuristics are the same, but the volume would blow this run's context budget. + +Additionally, classification was done at **file level** with per-method detail only for Bucket 1 examples. A full per-method pass for all 89 files is the natural next step; the bucket assignments below should be stable under that pass. + +Ignored: 0 (no `.opsx-ignore` present). + +## Summary + +| Bucket | Count | Next action | +|---|---|---| +| annotated | 0 methods / 0 files | — (nothing annotated yet — fully legacy) | +| plumbing | ~50 methods across 7 Dashboard widgets + middleware boilerplate | — (never tagged) | +| 1 — REQ matched | ~180 method-level candidates across 47 files | `/opsx-annotate procest` | +| 2a — existing capability, no REQ | ~40 methods across 9 clusters | `/opsx-reverse-spec procest --extend ` | +| 2b — no capability owner | ~60 methods across 8 clusters | `/opsx-reverse-spec procest --cluster ` | +| 3a — REQ broken | 0 surfaced (heuristic disabled for first-pass retrofit — no annotation history to grep against) | — | +| 3b — REQ never implemented | TBD — blocked on full REQ matching pass | Follow-up | +| 4 — ADR conformance | ~89 files flagged missing `@spec` in docblock (expected — that's what retrofit fixes) | — (subsumed by retrofit) | + +## REQ inventory (summary) + +46 spec directories scanned. Two format dialects: + +- **REQ-numbered** (15 specs, 183 REQs) — e.g. `REQ-ADMIN-001`, `REQ-CM-01`, `REQ-PROM-003` +- **Requirement-named** (31 specs, 160 requirements) — e.g. `### Requirement: Advice request schema` under `advice-management`. Scanner will synthesize `{capability}#REQ-NNN` IDs based on occurrence order. + +**Note on case-management/spec.md**: the file contains each REQ twice (lines 63–945 and 1013–1946). The second block appears to be a duplicate of the first. Flagged as a spec-cleanup follow-up; for retrofit purposes treat as 22 distinct REQs (REQ-CM-01 through REQ-CM-22, plus REQ-CM-23 which appears only in the second block). + +## Bucket 1 — Ready to annotate (representative examples) + +Will be annotated via ghost change `retrofit-annotate-procest-2026-04-20/tasks.md`. + +### capability: admin-settings → tasks 1–15 + +| File | Method | REQ | Confidence | Signal | +|---|---|---|---|---| +| lib/Settings/AdminSettings.php | getForm(), getSection(), getPriority(), getScope() | REQ-ADMIN-001 | 0.95 | direct Nextcloud ISettings implementation; spec explicitly cites AdminSettings class | +| lib/Sections/SettingsSection.php | getID(), getName(), getPriority(), getIcon() | REQ-ADMIN-001 | 0.95 | spec cites SettingsSection class directly | +| lib/Controller/SettingsController.php | getSettings(), updateSettings() | REQ-ADMIN-014 (validation), REQ-ADMIN-015 (error scenarios) | 0.82 | NEEDS-REVIEW — settings endpoints but spec is UI-focused | + +### capability: zgw-api-mapping → tasks (multiple) + +| File | Method | REQ | Confidence | Signal | +|---|---|---|---|---| +| lib/Controller/ZrcController.php | index(), create(), show(), update(), patch(), destroy() (6 of 17 publics) | zgw-api-mapping#Requirement-1 through #Requirement-6 (ZRC CRUD) | 0.92 | ZrcController = ZGW Zaakregistratiecomponent; method names = REST verbs matching spec | +| lib/Controller/ZtcController.php | index(), create(), show(), update(), patch(), destroy() | zgw-api-mapping ZTC requirements | 0.92 | ZtcController = ZGW Zaaktypecatalogus | +| lib/Controller/DrcController.php | index(), create(), show(), update(), patch(), destroy(), download(), lock(), unlock() | zgw-api-mapping DRC requirements | 0.92 | DrcController = ZGW Documentregistratie | +| lib/Controller/BrcController.php | index(), create(), show(), update(), patch(), destroy(), audittrailIndex(), audittrailShow() | zgw-api-mapping BRC requirements | 0.92 | BrcController = ZGW Besluitregistratie | +| lib/Controller/NrcController.php | 10 public methods | zgw-api-mapping NRC requirements | 0.90 | NRC = Notificatieroutercomponent | +| lib/Controller/AcController.php | index(), create(), show(), update(), patch(), destroy() | zgw-api-mapping AC requirements | 0.88 | AC = Autorisatiecomponent | +| lib/Service/ZgwService.php | 36 public methods | zgw-api-mapping (multiple) | 0.90 | central ZGW orchestrator; REQ-by-REQ mapping needed in annotate pass | +| lib/Service/ZgwMappingService.php | 8 public methods | zgw-api-mapping | 0.88 | explicit mapping-layer service | +| lib/Repair/LoadDefaultZgwMappings.php | getDefaultMappings() + 28 getXxxMapping() helpers | zgw-api-mapping (seed) | 0.90 | all private helpers inherit the single public REQ tag | + +### capability: prometheus-metrics → tasks 1–10 + +| File | Method | REQ | Confidence | Signal | +|---|---|---|---|---| +| lib/Controller/MetricsController.php | index() | REQ-PROM-001 (Metrics Endpoint) | 0.97 | direct match | +| lib/Controller/MetricsController.php | private helpers (collectMetrics, getCached, checkDatabaseHealth, getCaseCounts, etc.) | REQ-PROM-001, REQ-PROM-002, REQ-PROM-003, REQ-PROM-009 (caching) | 0.88 | Pass B inherited from index() caller | +| lib/Controller/HealthController.php | index() | REQ-PROM-004 (Health Check Endpoint) | 0.97 | direct match | +| lib/Controller/HealthController.php | checkDatabase(), checkOpenRegister(), checkFilesystem(), getAppVersion() | REQ-PROM-004 | 0.88 | Pass B inherited | + +### capability: case-management → tasks 1–22 + +| File | Method | REQ | Confidence | Signal | +|---|---|---|---|---| +| lib/Controller/ZrcController.php | 11 additional `public` methods beyond CRUD (e.g. status changes, extensions, suspension, sub-cases) | REQ-CM-14 (status change), REQ-CM-16 (deadline extension), REQ-CM-17 (suspension), REQ-CM-18 (sub-cases) | 0.78 | NEEDS-REVIEW — behavior tag spread; need to read method bodies to map each to exact REQ | +| lib/Service/MilestoneService.php | getMilestones(), getCaseProgress(), markMilestone(), reverseMilestone(), getDurationAnalytics() | doorlooptijd-dashboard requirements | 0.85 | milestones = doorloop milestones | + +### capability: procest-app-scaffold → tasks (multiple) + +| File | Method | REQ | Confidence | Signal | +|---|---|---|---|---| +| lib/AppInfo/Application.php | register(), boot() | procest-app-scaffold Scenario 1.1 / 1.2 (app registration + enable) | 0.93 | canonical bootstrap class | +| lib/Controller/DashboardController.php | page() | procest-app-scaffold (Vue SPA entry) | 0.90 | main template route | +| lib/Repair/InitializeSettings.php | getName(), run() | procest-app-scaffold (InitializeSettings repair step cited in spec scenario) | 0.95 | spec names this class directly | +| lib/Listener/DeepLinkRegistrationListener.php | handle() | procest-app-scaffold (deep link registration) | 0.85 | spec mentions deep-link integration | + +### capability: parafering-* (5 specs: parafeerroute-engine, parafering-actions, parafering-audit-trail, parafering-dashboard, voorstel-management) + +| File | Method | REQ | Confidence | Signal | +|---|---|---|---|---| +| lib/Controller/ParaferingController.php | 7 publics (createVoorstel, startParafering, executeAction, getAuditTrail, getCurrentStep, overrideRoute) | parafering-actions + parafeerroute-engine requirements | 0.85 | terminology match on all method names | +| lib/Service/ParaferingService.php | same 7 publics | same | 0.85 | service-layer twin | +| lib/Service/ParaferingNotificationService.php | notifyStepActivated, notifyVoorstelReturned, notifyParaferingReminder | parafering-actions (notifications) | 0.82 | NEEDS-REVIEW — specific REQ needs reading | + +### capability: wms-wfs-layers → tasks 1–4 + +| File | Method | REQ | Confidence | Signal | +|---|---|---|---|---| +| lib/Controller/GisProxyController.php | proxy(), capabilities() | REQ-LAYER-03 (GIS Proxy), REQ-LAYER-04 (GetCapabilities Parser) | 0.95 | direct match | +| lib/Service/GisProxyService.php | proxyRequest(), getCapabilities() | same | 0.92 | service twin | + +### capability: inspection-checklists + +| File | Method | REQ | Confidence | Signal | +|---|---|---|---|---| +| lib/Controller/InspectionController.php | index(), captureLocation(), completeChecklistItem(), addPhoto(), complete() | inspection-checklists requirements | 0.90 | name match | +| lib/Service/InspectionService.php | same behaviors | same | 0.88 | service twin | +| lib/Service/ChecklistService.php | completeItem(), getProgress(), validateCompletion(), getConformitySummary() | inspection-checklists (progress/validation) | 0.85 | verb match | + +### capability: openregister-integration + +| File | Method | REQ | Confidence | Signal | +|---|---|---|---|---| +| (cross-cutting — all `$this->openRegisterObjectService` calls) | — | REQ-OREG-005 (Object Store Pattern) | 0.80 | NEEDS-REVIEW — this is a pattern rather than a method-specific REQ. Annotating EVERY OpenRegister call would over-tag. Recommendation: annotate only the primary integration points (Application.php boot, repair steps) at file level; let the pattern itself be implicit. | + +### capability: vth-case-type-seed + +| File | Method | REQ | Confidence | Signal | +|---|---|---|---|---| +| lib/Repair/SeedBezwaarBeroepData.php | run() | vth-case-type-seed requirements | 0.92 | name match | +| lib/Service/SeedDataService.php | seedBezwaarBeroepData() | same | 0.92 | name match | + +(Full enumeration continues — roughly 180 method-level Bucket 1 candidates across 47 files once finalized.) + +## Bucket 2a — Existing capability, no REQ (reverse-spec --extend) + +Clusters where file path points at a known capability but the observed behavior isn't covered by any existing REQ: + +### cluster: case-management (8 methods) → `/opsx-reverse-spec procest --extend case-management` +- lib/Controller/DashboardController.php::page() — actually plumbing; no extension needed +- lib/Controller/EmailController.php::send(), sendFromTemplate(), preview(), templates() — case email integration not in existing REQs +- lib/Service/CaseEmailService.php — 8 publics, none covered +- **Observed behavior**: Cases can send outbound email, render from templates per caseType, and process inbound replies matched back to cases by subject line. + +### cluster: admin-settings (2 methods) → `--extend admin-settings` +- lib/Controller/SettingsController.php::getCustomSettings(), setCustomSetting() — REQ-ADMIN-* covers the UI but not the settings-bag API + +### cluster: case-types (0 — existing REQs cover CRUD; any gaps need reading) + +### cluster: dashboard (0 — appears covered) + +### cluster: task-management (0 — appears covered) + +### cluster: roles-decisions (0 — appears covered) + +### cluster: inspection-checklists (2 methods) → `--extend inspection-checklists` +- lib/Service/InspectionService.php::calculateDistance() — GPS distance helper not specified + +### cluster: zgw-api-mapping (6 methods) → `--extend zgw-api-mapping` +- lib/Middleware/ZgwAuthMiddleware.php — 4 publics + 5 privates — ZGW scope-based auth not specified explicitly; needs REQs for auth contract +- lib/Middleware/TenantMiddleware.php — tenant resolution on ZGW endpoints + +### cluster: procest-app-scaffold (3 methods) → `--extend procest-app-scaffold` +- lib/Middleware/TenantMiddleware.php::beforeController(), afterException() — covered by multi-tenancy if that spec exists +- (move to 2b cluster "multi-tenancy" if no tenant spec) + +## Bucket 2b — No capability owner (reverse-spec --cluster) + +Clusters with no capability owner — would require a new spec if retrofitted: + +### cluster: appointments (3 files, ~15 methods) → `--cluster appointments` +- lib/Controller/AppointmentController.php (6 publics) +- lib/Controller/PublicAppointmentController.php (3 publics) +- lib/BackgroundJob/AppointmentReminderJob.php +- lib/Service/AppointmentService.php (7 publics) +- lib/Service/AppointmentBackend/* (interface + 3 backends: JCC, Local, Qmatic) +- **Observed behavior**: Appointment booking with 3 pluggable backends (JCC for municipal self-service, Qmatic for queue management, Local for dev). Supports book/cancel/reschedule/no-show + public reschedule via token. Nightly reminder job. + +### cluster: berichtenbox (2 files, ~8 methods) → `--cluster berichtenbox` +- lib/Controller/BerichtenboxController.php +- lib/BackgroundJob/BerichtenboxReadStatusJob.php +- lib/Service/BerichtenboxService.php + adapter interface + MockAdapter +- **Observed behavior**: Sends citizen messages to Dutch government MijnOverheid Berichtenbox with BSN validation; polls read status via adapter pattern. + +### cluster: case-sharing (4 files, ~15 methods) → `--cluster case-sharing` +- lib/Controller/CaseSharingController.php +- lib/Controller/PublicShareController.php +- lib/BackgroundJob/ShareMaintenanceJob.php +- lib/Service/CaseSharingService.php (9 publics) +- lib/Service/CaseTransferService.php (4 publics) +- **Observed behavior**: Generate tokenized public-read links for cases, partner shares with filtered case data, case transfer workflow between users/orgs with accept/reject. + +### cluster: stuf-protocol (2 files, ~20 methods) → `--cluster stuf-protocol` +- lib/Controller/StufController.php (3 publics + 8 privates) +- lib/Service/StufFieldMappingService.php (12 publics) +- lib/Service/StufMessageBuilder.php (6 publics) +- **Observed behavior**: Bidirectional SOAP-based StUF-ZKN / StUF-BG protocol mapping — ISO ↔ StUF date formats, confidentiality level mapping, StUF message construction for legacy ZGW clients. + +### cluster: leges (3 files, ~10 methods) → `--cluster leges` +- lib/Controller/LegesController.php +- lib/Service/LegesCalculationService.php +- lib/Service/LegesExportService.php +- **Observed behavior**: Tax/fee calculation with 5 strategies (vast, percentage, staffel, maximum, combinatie), recalculation on case changes, verrekening (offset) + teruggaaf (refund) paths, exports to CSV/ASCII/XML. + +### cluster: ai-assistant (2 files, ~25 methods) → `--cluster ai-assistant` +- lib/Controller/AiController.php (12 publics) +- lib/Service/AiService.php (12 publics + 10 private prompt builders) +- **Observed behavior**: Case-scoped AI: document classification, data extraction, Q&A, summarization, routing suggestion, next-step suggestion. PII stripping, audit trail, per-feature enable flags. + +### cluster: multi-tenancy (2 files, ~10 methods) → `--cluster multi-tenancy` +- lib/Controller/TenantController.php +- lib/Middleware/TenantMiddleware.php +- lib/Service/TenantService.php +- **Observed behavior**: Tenant resolution on requests, tenant-scoped CRUD, per-controller tenant enforcement. + +### cluster: templates (1 file, 4 methods) → `--cluster templates` +- lib/Controller/TemplateController.php +- lib/Service/TemplateLibraryService.php +- **Observed behavior**: Template library for case-type configurations (separate from email templates). + +### cluster: case-definition-export-import (2 files) → `--cluster case-definition-export-import` +- lib/Controller/CaseDefinitionController.php (export, validate, import) +- lib/Service/CaseDefinitionExportService.php +- lib/Service/CaseDefinitionImportService.php +- **NOTE**: `workflow-import-export` spec exists — might be 2a, not 2b. Needs reading to confirm scope overlap. + +### cluster: dso-intake (1 file) → `--cluster dso-intake` +- lib/Service/DsoIntakeService.php (processAanvraag, getDeadlineDuration) +- **Observed behavior**: Receives DSO (Digitaal Stelsel Omgevingswet) aanvraag messages and converts to internal cases. + +### cluster: consultation (1 file) → possibly 2a under `advice-management` +- lib/Controller/ConsultationController.php + lib/Service/ConsultationService.php +- **NOTE**: Overlap with `advice-management` spec — probably 2a (--extend advice-management). + +### cluster: notifications (1 file) → possibly 2a under `zgw-api-mapping` NRC +- lib/Service/NotificatieService.php +- **NOTE**: Likely covered by NRC requirements in zgw-api-mapping. + +## Bucket 3 — Unimplemented REQs + +**3a and 3b deferred** — detecting REQs whose code "used to exist but is now broken" requires a keyword-based grep over git history that I haven't run yet (would take a separate pass). For an app built greenfield over specs, 3a is unlikely. 3b will show up once I do a systematic "which REQ has zero matched methods" reverse check against the full inventory. + +## Bucket 4 — ADR conformance findings + +### missing-`@spec`-in-file-docblock (89 of 89 files) +Expected — this is exactly what retrofit fixes. Not a separate finding during retrofit. + +### forbidden-patterns scan +Not run in this pilot. Should be done via the existing `/hydra-gate-forbidden-patterns` skill, which has a word-boundary grep already tuned. + +### hardcoded-strings scan +Not run in this pilot — needs separate pass over Vue (skipped). + +## Notes for the human reviewer + +- **case-management/spec.md has duplicated REQ blocks** (lines 63–945 and 1013–1946). Pre-retrofit cleanup recommended — treating as 22 unique REQs for now. +- **ZrcController is large** (17 publics + 22 privates) — many are ZGW CRUD (Bucket 1) but ~11 are `case-management` behaviors that need careful REQ mapping during annotate. Good candidate for chunked annotation by method-group. +- **The 2b clusters are large.** 8 clusters × ~5 REQs each ≈ 40+ reverse-spec REQs. With the 5-REQ-per-run cap, that's 8–10 PRs of reverse-spec work. Sequencing matters: do the independent clusters first (leges, stuf-protocol, templates) before the ones that might overlap or merge (consultation → advice-management, notifications → zgw-api-mapping). +- **The "Requirement-named" spec dialect (31 specs, 160 requirements)** is the bigger matching challenge. These don't have REQ-IDs in the spec file — the scanner needs to synthesize them. Confidence scores for these will run lower than for REQ-numbered specs until the synthesis is stable. +- **Vue/TS frontend (184 files) not scanned.** Likely dominated by `src/views/cases/*.vue` (case-management), `src/views/settings/*.vue` (admin-settings), `src/components/**` (many capabilities). Frontend scan is a natural follow-up; will land in a separate Bucket-1-rich PR. +- **No existing `@spec` annotations** — procest is fully legacy. Expected; confirms the retrofit premise. + +## Suggested next steps (for the human driving the retrofit) + +1. Review this report. Flag any Bucket 1 matches that look wrong. +2. Decide on 2a vs 2b for the borderline clusters: `consultation` (→ advice-management?), `notifications` (→ zgw-api-mapping?), `case-definition-export-import` (→ workflow-import-export?). +3. Decide sequencing for reverse-spec passes. Recommend starting with `leges` or `stuf-protocol` — self-contained, well-defined behaviors that make good dogfood. +4. Schedule a Vue scan follow-up — same skill, wider glob. +5. `/opsx-annotate procest` against this report when ready. Will create ghost change `retrofit-annotate-procest-2026-04-20` and land the Bucket 1 annotations as one PR. diff --git a/package-lock.json b/package-lock.json index bdd19110..becdcff9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,6 +16,7 @@ "@nextcloud/l10n": "^2.0.1", "@nextcloud/router": "^2.0.1", "@nextcloud/vue": "^8.16.0", + "apexcharts": "^3.45.0", "gridstack": "^10.3.1", "leaflet": "^1.9.4", "leaflet-draw": "^1.0.4", @@ -23,6 +24,7 @@ "pinia": "^2.1.7", "proj4": "^2.20.4", "vue": "^2.7.14", + "vue-apexcharts": "^1.6.2", "vue-material-design-icons": "^5.3.0", "vue-router": "^3.6.5" }, @@ -38,6 +40,7 @@ "css-loader": "~7.1.1", "eslint": "^8.56.0", "eslint-import-resolver-alias": "^1.1.2", + "sass-loader": "^16.0.7", "style-loader": "~4.0.0", "stylelint": "^15.11.0", "vue-loader": "^15.11.1 <16.0.0", @@ -64,142 +67,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/compat-data": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", - "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", - "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.29.0", - "@babel/generator": "^7.29.0", - "@babel/helper-compilation-targets": "^7.28.6", - "@babel/helper-module-transforms": "^7.28.6", - "@babel/helpers": "^7.28.6", - "@babel/parser": "^7.29.0", - "@babel/template": "^7.28.6", - "@babel/traverse": "^7.29.0", - "@babel/types": "^7.29.0", - "@jridgewell/remapping": "^2.3.5", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/eslint-parser": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.28.6.tgz", - "integrity": "sha512-QGmsKi2PBO/MHSQk+AAgA9R6OHQr+VqnniFE0eMWZcVcfBZoA2dKn2hUsl3Csg/Plt9opRUWdY7//VXsrIlEiA==", - "dev": true, - "peer": true, - "dependencies": { - "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", - "eslint-visitor-keys": "^2.1.0", - "semver": "^6.3.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || >=14.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.11.0", - "eslint": "^7.5.0 || ^8.0.0 || ^9.0.0" - } - }, - "node_modules/@babel/generator": { - "version": "7.29.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", - "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/parser": "^7.29.0", - "@babel/types": "^7.29.0", - "@jridgewell/gen-mapping": "^0.3.12", - "@jridgewell/trace-mapping": "^0.3.28", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", - "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/compat-data": "^7.28.6", - "@babel/helper-validator-option": "^7.27.1", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-globals": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", - "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", - "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/traverse": "^7.28.6", - "@babel/types": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", - "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/helper-module-imports": "^7.28.6", - "@babel/helper-validator-identifier": "^7.28.5", - "@babel/traverse": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, "node_modules/@babel/helper-string-parser": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", @@ -216,30 +83,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-validator-option": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", - "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", - "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/template": "^7.28.6", - "@babel/types": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/parser": { "version": "7.29.0", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", @@ -262,40 +105,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/template": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", - "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.28.6", - "@babel/parser": "^7.28.6", - "@babel/types": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", - "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.29.0", - "@babel/generator": "^7.29.0", - "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.29.0", - "@babel/template": "^7.28.6", - "@babel/types": "^7.29.0", - "debug": "^4.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/types": { "version": "7.29.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", @@ -617,55 +426,6 @@ "node": ">=14.17.0" } }, - "node_modules/@emnapi/core": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.8.1.tgz", - "integrity": "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@emnapi/wasi-threads": "1.1.0", - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/runtime": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz", - "integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/wasi-threads": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", - "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@es-joy/jsdoccomment": { - "version": "0.41.0", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.41.0.tgz", - "integrity": "sha512-aKUhyn1QI5Ksbqcr3fFJj16p99QdjUxXAEuFst1Z47DRyoiMwivIH9MV/ARcJOCXVjPfjITciej8ZD2O/6qUmw==", - "dev": true, - "peer": true, - "dependencies": { - "comment-parser": "1.4.1", - "esquery": "^1.5.0", - "jsdoc-type-pratt-parser": "~4.0.0" - }, - "engines": { - "node": ">=16" - } - }, "node_modules/@eslint-community/eslint-utils": { "version": "4.9.1", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", @@ -1026,17 +786,6 @@ "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@jridgewell/remapping": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", - "dev": true, - "peer": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", @@ -1072,525 +821,441 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@jsonjoy.com/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" + "node_modules/@linusborg/vue-simple-portal": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@linusborg/vue-simple-portal/-/vue-simple-portal-0.1.5.tgz", + "integrity": "sha512-dq+oubEVW4UabBoQxmH97GiDa+F6sTomw4KcXFHnXEpw69rdkXFCxo1WzwuvWjoLiUVYJTyN1dtlUvTa50VcXg==", + "dependencies": { + "nanoid": "^3.1.20" }, "peerDependencies": { - "tslib": "2" + "vue": "^2.6.6" } }, - "node_modules/@jsonjoy.com/buffers": { - "version": "17.67.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-17.67.0.tgz", - "integrity": "sha512-tfExRpYxBvi32vPs9ZHaTjSP4fHAfzSmcahOfNxtvGHcyJel+aibkPlGeBB+7AoC6hL7lXIE++8okecBxx7lcw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" + "node_modules/@mapbox/hast-util-table-cell-style": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@mapbox/hast-util-table-cell-style/-/hast-util-table-cell-style-0.2.1.tgz", + "integrity": "sha512-LyQz4XJIdCdY/+temIhD/Ed0x/p4GAOUycpFSEK2Ads1CPKZy6b7V/2ROEtQiLLQ8soIs0xe/QAoR6kwpyW/yw==", + "dependencies": { + "unist-util-visit": "^1.4.1" }, - "peerDependencies": { - "tslib": "2" + "engines": { + "node": ">=12" } }, - "node_modules/@jsonjoy.com/codegen": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz", - "integrity": "sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "node_modules/@mapbox/hast-util-table-cell-style/node_modules/unist-util-is": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", + "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==" + }, + "node_modules/@mapbox/hast-util-table-cell-style/node_modules/unist-util-visit": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", + "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", + "dependencies": { + "unist-util-visit-parents": "^2.0.0" } }, - "node_modules/@jsonjoy.com/fs-core": { - "version": "4.56.10", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.56.10.tgz", - "integrity": "sha512-PyAEA/3cnHhsGcdY+AmIU+ZPqTuZkDhCXQ2wkXypdLitSpd6d5Ivxhnq4wa2ETRWFVJGabYynBWxIijOswSmOw==", - "dev": true, - "peer": true, + "node_modules/@mapbox/hast-util-table-cell-style/node_modules/unist-util-visit-parents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", + "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", + "dependencies": { + "unist-util-is": "^3.0.0" + } + }, + "node_modules/@nextcloud/auth": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/@nextcloud/auth/-/auth-2.5.3.tgz", + "integrity": "sha512-KIhWLk0BKcP4hvypE4o11YqKOPeFMfEFjRrhUUF+h7Fry+dhTBIEIxuQPVCKXMIpjTDd8791y8V6UdRZ2feKAQ==", "dependencies": { - "@jsonjoy.com/fs-node-builtins": "4.56.10", - "@jsonjoy.com/fs-node-utils": "4.56.10", - "thingies": "^2.5.0" + "@nextcloud/browser-storage": "^0.5.0", + "@nextcloud/event-bus": "^3.3.2" }, "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" } }, - "node_modules/@jsonjoy.com/fs-fsa": { - "version": "4.56.10", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.56.10.tgz", - "integrity": "sha512-/FVK63ysNzTPOnCCcPoPHt77TOmachdMS422txM4KhxddLdbW1fIbFMYH0AM0ow/YchCyS5gqEjKLNyv71j/5Q==", - "dev": true, - "peer": true, + "node_modules/@nextcloud/axios": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@nextcloud/axios/-/axios-2.5.2.tgz", + "integrity": "sha512-8frJb77jNMbz00TjsSqs1PymY0nIEbNM4mVmwen2tXY7wNgRai6uXilIlXKOYB9jR/F/HKRj6B4vUwVwZbhdbw==", "dependencies": { - "@jsonjoy.com/fs-core": "4.56.10", - "@jsonjoy.com/fs-node-builtins": "4.56.10", - "@jsonjoy.com/fs-node-utils": "4.56.10", - "thingies": "^2.5.0" + "@nextcloud/auth": "^2.5.1", + "@nextcloud/router": "^3.0.1", + "axios": "^1.12.2" }, "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" } }, - "node_modules/@jsonjoy.com/fs-node": { - "version": "4.56.10", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.56.10.tgz", - "integrity": "sha512-7R4Gv3tkUdW3dXfXiOkqxkElxKNVdd8BDOWC0/dbERd0pXpPY+s2s1Mino+aTvkGrFPiY+mmVxA7zhskm4Ue4Q==", - "dev": true, - "peer": true, + "node_modules/@nextcloud/axios/node_modules/@nextcloud/router": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@nextcloud/router/-/router-3.1.0.tgz", + "integrity": "sha512-e4dkIaxRSwdZJlZFpn9x03QgBn/Sa2hN1hp/BA7+AbzykmSAlKuWfdmX8j/8ewrLpQwYmZR23IZO9XwpJXq2Uw==", "dependencies": { - "@jsonjoy.com/fs-core": "4.56.10", - "@jsonjoy.com/fs-node-builtins": "4.56.10", - "@jsonjoy.com/fs-node-utils": "4.56.10", - "@jsonjoy.com/fs-print": "4.56.10", - "@jsonjoy.com/fs-snapshot": "4.56.10", - "glob-to-regex.js": "^1.0.0", - "thingies": "^2.5.0" + "@nextcloud/typings": "^1.10.0" }, "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" } }, - "node_modules/@jsonjoy.com/fs-node-builtins": { - "version": "4.56.10", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.56.10.tgz", - "integrity": "sha512-uUnKz8R0YJyKq5jXpZtkGV9U0pJDt8hmYcLRrPjROheIfjMXsz82kXMgAA/qNg0wrZ1Kv+hrg7azqEZx6XZCVw==", - "dev": true, - "peer": true, + "node_modules/@nextcloud/browser-storage": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@nextcloud/browser-storage/-/browser-storage-0.5.0.tgz", + "integrity": "sha512-usYr4GlJQlK3hgZURvklqWb9ivi7sgsSuFqXrs7s4hl1LTS4enzPrnkQumm6nRsQruf0ITS+OBsK+oELEbvYPA==", "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "node": "^24 || ^22 || ^20" } }, - "node_modules/@jsonjoy.com/fs-node-to-fsa": { - "version": "4.56.10", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.56.10.tgz", - "integrity": "sha512-oH+O6Y4lhn9NyG6aEoFwIBNKZeYy66toP5LJcDOMBgL99BKQMUf/zWJspdRhMdn/3hbzQsZ8EHHsuekbFLGUWw==", + "node_modules/@nextcloud/browserslist-config": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@nextcloud/browserslist-config/-/browserslist-config-3.1.2.tgz", + "integrity": "sha512-2iXl1rqQOHvggFIl/V3J5OpbodVazOsO38Gz/2sUAmtWXuOpGZG+7i6zQcVqGVaT1VzyPJ1gPiMpyyZi/XRWNA==", "dev": true, - "peer": true, - "dependencies": { - "@jsonjoy.com/fs-fsa": "4.56.10", - "@jsonjoy.com/fs-node-builtins": "4.56.10", - "@jsonjoy.com/fs-node-utils": "4.56.10" - }, "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" + "node": "^20 || ^22 || ^24", + "npm": ">=10.5.0" }, "peerDependencies": { - "tslib": "2" + "browserslist": "^4.26.3" } }, - "node_modules/@jsonjoy.com/fs-node-utils": { - "version": "4.56.10", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.56.10.tgz", - "integrity": "sha512-8EuPBgVI2aDPwFdaNQeNpHsyqPi3rr+85tMNG/lHvQLiVjzoZsvxA//Xd8aB567LUhy4QS03ptT+unkD/DIsNg==", - "dev": true, - "peer": true, + "node_modules/@nextcloud/capabilities": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@nextcloud/capabilities/-/capabilities-1.2.1.tgz", + "integrity": "sha512-snZ0/910zzwN6PDsIlx2Uvktr1S5x0ClhDUnfPlCj7ntNvECzuVHNY5wzby22LIkc+9ZjaDKtCwuCt2ye+9p/Q==", "dependencies": { - "@jsonjoy.com/fs-node-builtins": "4.56.10" + "@nextcloud/initial-state": "^3.0.0" }, "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" } }, - "node_modules/@jsonjoy.com/fs-print": { - "version": "4.56.10", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.56.10.tgz", - "integrity": "sha512-JW4fp5mAYepzFsSGrQ48ep8FXxpg4niFWHdF78wDrFGof7F3tKDJln72QFDEn/27M1yHd4v7sKHHVPh78aWcEw==", - "dev": true, - "peer": true, - "dependencies": { - "@jsonjoy.com/fs-node-utils": "4.56.10", - "tree-dump": "^1.1.0" - }, + "node_modules/@nextcloud/capabilities/node_modules/@nextcloud/initial-state": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@nextcloud/initial-state/-/initial-state-3.0.0.tgz", + "integrity": "sha512-cV+HBdkQJGm8FxkBI5rFT/FbMNWNBvpbj6OPrg4Ae4YOOsQ15CL8InPOAw1t4XkOkQK2NEdUGQLVUz/19wXbdQ==", "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" } }, - "node_modules/@jsonjoy.com/fs-snapshot": { - "version": "4.56.10", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.56.10.tgz", - "integrity": "sha512-DkR6l5fj7+qj0+fVKm/OOXMGfDFCGXLfyHkORH3DF8hxkpDgIHbhf/DwncBMs2igu/ST7OEkexn1gIqoU6Y+9g==", - "dev": true, - "peer": true, + "node_modules/@nextcloud/dialogs": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@nextcloud/dialogs/-/dialogs-3.2.0.tgz", + "integrity": "sha512-notaHF8LXPJINBbILCbRe+dgXnJPe7NQTIrN1vwfaGUSG9GUfEf+v367yyg2brCgV6ulE/HmNhYjTQwW5AqSJA==", + "deprecated": "versions before v4.x are no longer supported, please update", "dependencies": { - "@jsonjoy.com/buffers": "^17.65.0", - "@jsonjoy.com/fs-node-utils": "4.56.10", - "@jsonjoy.com/json-pack": "^17.65.0", - "@jsonjoy.com/util": "^17.65.0" + "@nextcloud/l10n": "^1.3.0", + "@nextcloud/typings": "^1.0.0", + "core-js": "^3.6.4", + "toastify-js": "^1.12.0" }, "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "node": "^16.0.0", + "npm": "^7.0.0 || ^8.0.0" } }, - "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/base64": { - "version": "17.67.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-17.67.0.tgz", - "integrity": "sha512-5SEsJGsm15aP8TQGkDfJvz9axgPwAEm98S5DxOuYe8e1EbfajcDmgeXXzccEjh+mLnjqEKrkBdjHWS5vFNwDdw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "node_modules/@nextcloud/dialogs/node_modules/@nextcloud/l10n": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@nextcloud/l10n/-/l10n-1.6.0.tgz", + "integrity": "sha512-aKGlgrwN9OiafN791sYus0shfwNeU3PlrH6Oi9ISma6iJSvN6a8aJM8WGKCJ9pqBaTR5PrDuckuM/WnybBWb6A==", + "dependencies": { + "core-js": "^3.6.4", + "node-gettext": "^3.0.0" } }, - "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/codegen": { - "version": "17.67.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-17.67.0.tgz", - "integrity": "sha512-idnkUplROpdBOV0HMcwhsCUS5TRUi9poagdGs70A6S4ux9+/aPuKbh8+UYRTLYQHtXvAdNfQWXDqZEx5k4Dj2Q==", + "node_modules/@nextcloud/eslint-config": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/@nextcloud/eslint-config/-/eslint-config-8.4.2.tgz", + "integrity": "sha512-zsDcBxvp2Vr/BgasK/vNYJ84LOXjl4RseJPrcp93zcnaB2WnygV50Sd0nQ5JN0ngTyPjiIlGd92MMzrMTofjRA==", "dev": true, - "peer": true, "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" + "node": "^20.0.0", + "npm": "^10.0.0" }, "peerDependencies": { - "tslib": "2" + "@babel/core": "^7.26.9", + "@babel/eslint-parser": "^7.16.5", + "@nextcloud/eslint-plugin": "^2.2.1", + "@vue/eslint-config-typescript": "^13.0.0", + "eslint": "^8.27.0", + "eslint-config-standard": "^17.1.0", + "eslint-import-resolver-exports": "^1.0.0-beta.5", + "eslint-import-resolver-typescript": "^3.8.0", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-jsdoc": "^46.2.6", + "eslint-plugin-n": "^16.0.0", + "eslint-plugin-promise": "^6.6.0", + "eslint-plugin-vue": "^9.7.0", + "typescript": "^5.0.2" } }, - "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pack": { - "version": "17.67.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-17.67.0.tgz", - "integrity": "sha512-t0ejURcGaZsn1ClbJ/3kFqSOjlryd92eQY465IYrezsXmPcfHPE/av4twRSxf6WE+TkZgLY+71vCZbiIiFKA/w==", - "dev": true, - "peer": true, + "node_modules/@nextcloud/event-bus": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@nextcloud/event-bus/-/event-bus-3.3.3.tgz", + "integrity": "sha512-zIfvKmUGkXpVzRKoXrcO9hkoiKDm65fqNxy/XIbIxrQhZByPq3gDkjBpnu3V5Gs8JdYwa73R8DjzV9oH8HYhIg==", "dependencies": { - "@jsonjoy.com/base64": "17.67.0", - "@jsonjoy.com/buffers": "17.67.0", - "@jsonjoy.com/codegen": "17.67.0", - "@jsonjoy.com/json-pointer": "17.67.0", - "@jsonjoy.com/util": "17.67.0", - "hyperdyperid": "^1.2.0", - "thingies": "^2.5.0", - "tree-dump": "^1.1.0" + "@types/semver": "^7.7.0", + "semver": "^7.7.2" }, "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" + "node": "^20 || ^22 || ^24" + } + }, + "node_modules/@nextcloud/event-bus/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "bin": { + "semver": "bin/semver.js" }, - "peerDependencies": { - "tslib": "2" + "engines": { + "node": ">=10" } }, - "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pointer": { - "version": "17.67.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-17.67.0.tgz", - "integrity": "sha512-+iqOFInH+QZGmSuaybBUNdh7yvNrXvqR+h3wjXm0N/3JK1EyyFAeGJvqnmQL61d1ARLlk/wJdFKSL+LHJ1eaUA==", - "dev": true, - "peer": true, + "node_modules/@nextcloud/files": { + "version": "3.12.2", + "resolved": "https://registry.npmjs.org/@nextcloud/files/-/files-3.12.2.tgz", + "integrity": "sha512-vBo8tf3Xh6efiF8CrEo3pKj9AtvAF6RdDGO1XKL65IxV8+UUd9Uxl2lUExHlzoDRRczCqfGfaWfRRaFhYqce5Q==", + "optional": true, "dependencies": { - "@jsonjoy.com/util": "17.67.0" + "@nextcloud/auth": "^2.5.3", + "@nextcloud/capabilities": "^1.2.1", + "@nextcloud/l10n": "^3.4.1", + "@nextcloud/logger": "^3.0.3", + "@nextcloud/paths": "^3.0.0", + "@nextcloud/router": "^3.1.0", + "@nextcloud/sharing": "^0.3.0", + "cancelable-promise": "^4.3.1", + "is-svg": "^6.1.0", + "typescript-event-target": "^1.1.1", + "webdav": "^5.8.0" }, "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" } }, - "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/util": { - "version": "17.67.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-17.67.0.tgz", - "integrity": "sha512-6+8xBaz1rLSohlGh68D1pdw3AwDi9xydm8QNlAFkvnavCJYSze+pxoW2VKP8p308jtlMRLs5NTHfPlZLd4w7ew==", - "dev": true, - "peer": true, + "node_modules/@nextcloud/files/node_modules/@nextcloud/l10n": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@nextcloud/l10n/-/l10n-3.4.1.tgz", + "integrity": "sha512-aTFinTcKiK2gEXwLgutXekpZZ8/v/4QiC8C3QCLH5m0o+WtxsBC+fqV142ebC/rfDnzCLhY4ZtswSu8bFbZocg==", + "optional": true, "dependencies": { - "@jsonjoy.com/buffers": "17.67.0", - "@jsonjoy.com/codegen": "17.67.0" + "@nextcloud/router": "^3.0.1", + "@nextcloud/typings": "^1.9.1", + "@types/escape-html": "^1.0.4", + "dompurify": "^3.2.6", + "escape-html": "^1.0.3" }, "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "node": "^20 || ^22 || ^24" } }, - "node_modules/@jsonjoy.com/json-pack": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.21.0.tgz", - "integrity": "sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg==", - "dev": true, - "peer": true, + "node_modules/@nextcloud/files/node_modules/@nextcloud/router": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@nextcloud/router/-/router-3.1.0.tgz", + "integrity": "sha512-e4dkIaxRSwdZJlZFpn9x03QgBn/Sa2hN1hp/BA7+AbzykmSAlKuWfdmX8j/8ewrLpQwYmZR23IZO9XwpJXq2Uw==", + "optional": true, "dependencies": { - "@jsonjoy.com/base64": "^1.1.2", - "@jsonjoy.com/buffers": "^1.2.0", - "@jsonjoy.com/codegen": "^1.0.0", - "@jsonjoy.com/json-pointer": "^1.0.2", - "@jsonjoy.com/util": "^1.9.0", - "hyperdyperid": "^1.2.0", - "thingies": "^2.5.0", - "tree-dump": "^1.1.0" + "@nextcloud/typings": "^1.10.0" }, "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" } }, - "node_modules/@jsonjoy.com/json-pack/node_modules/@jsonjoy.com/buffers": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", - "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", - "dev": true, - "peer": true, + "node_modules/@nextcloud/initial-state": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@nextcloud/initial-state/-/initial-state-2.2.0.tgz", + "integrity": "sha512-cDW98L5KGGgpS8pzd+05304/p80cyu8U2xSDQGa+kGPTpUFmCbv2qnO5WrwwGTauyjYijCal2bmw82VddSH+Pg==", "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "node": "^20.0.0", + "npm": "^10.0.0" } }, - "node_modules/@jsonjoy.com/json-pointer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-1.0.2.tgz", - "integrity": "sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==", - "dev": true, - "peer": true, + "node_modules/@nextcloud/l10n": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@nextcloud/l10n/-/l10n-2.2.0.tgz", + "integrity": "sha512-UAM2NJcl/NR46MANSF7Gr7q8/Up672zRyGrxLpN3k4URNmWQM9upkbRME+1K3T29wPrUyOIbQu710ZjvZafqFA==", + "license": "GPL-3.0-or-later", "dependencies": { - "@jsonjoy.com/codegen": "^1.0.0", - "@jsonjoy.com/util": "^1.9.0" + "@nextcloud/router": "^2.1.2", + "@nextcloud/typings": "^1.7.0", + "dompurify": "^3.0.3", + "escape-html": "^1.0.3", + "node-gettext": "^3.0.0" }, "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "node": "^20.0.0", + "npm": "^9.0.0" } }, - "node_modules/@jsonjoy.com/util": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.9.0.tgz", - "integrity": "sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==", - "dev": true, - "peer": true, + "node_modules/@nextcloud/logger": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@nextcloud/logger/-/logger-3.0.3.tgz", + "integrity": "sha512-TcbVRL4/O5ffI1RXFmQAFD3gwwT15AAdr1770x+RNqVvfBdoGVyhzOwCIyA5Vfc3fA1iJXFa+rE6buJZSoqlcw==", "dependencies": { - "@jsonjoy.com/buffers": "^1.0.0", - "@jsonjoy.com/codegen": "^1.0.0" + "@nextcloud/auth": "^2.5.3" }, "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" } }, - "node_modules/@jsonjoy.com/util/node_modules/@jsonjoy.com/buffers": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", - "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", - "dev": true, - "peer": true, + "node_modules/@nextcloud/paths": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@nextcloud/paths/-/paths-3.0.0.tgz", + "integrity": "sha512-+sTfTkIbVUa2Ue3bkz3R7F1mhddvHPOWUxkSNg7Q5dAsimVFBaTRgiBAJmsAag3JPsxyuS8kUgeb0zdEssRdTA==", + "optional": true, "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" } }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", - "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", - "dev": true, - "peer": true - }, - "node_modules/@linusborg/vue-simple-portal": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@linusborg/vue-simple-portal/-/vue-simple-portal-0.1.5.tgz", - "integrity": "sha512-dq+oubEVW4UabBoQxmH97GiDa+F6sTomw4KcXFHnXEpw69rdkXFCxo1WzwuvWjoLiUVYJTyN1dtlUvTa50VcXg==", + "node_modules/@nextcloud/router": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@nextcloud/router/-/router-2.1.2.tgz", + "integrity": "sha512-Jj5fgjeHT1vVIgOyUGOeHfwk2KgaO77QGfqZAT6GWXvpAsN0mkqwljkg4FkHrQRouYqCE4VnJ5o8/w0DAN89tA==", "dependencies": { - "nanoid": "^3.1.20" + "@nextcloud/typings": "^1.0.0", + "core-js": "^3.6.4" }, - "peerDependencies": { - "vue": "^2.6.6" + "engines": { + "node": "^16.0.0", + "npm": "^7.0.0 || ^8.0.0" } }, - "node_modules/@mapbox/hast-util-table-cell-style": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@mapbox/hast-util-table-cell-style/-/hast-util-table-cell-style-0.2.1.tgz", - "integrity": "sha512-LyQz4XJIdCdY/+temIhD/Ed0x/p4GAOUycpFSEK2Ads1CPKZy6b7V/2ROEtQiLLQ8soIs0xe/QAoR6kwpyW/yw==", + "node_modules/@nextcloud/sharing": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@nextcloud/sharing/-/sharing-0.3.0.tgz", + "integrity": "sha512-kV7qeUZvd1fTKeFyH+W5Qq5rNOqG9rLATZM3U9MBxWXHJs3OxMqYQb8UQ3NYONzsX3zDGJmdQECIGHm1ei2sCA==", "dependencies": { - "unist-util-visit": "^1.4.1" + "@nextcloud/initial-state": "^3.0.0", + "is-svg": "^6.1.0" }, "engines": { - "node": ">=12" + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" + }, + "optionalDependencies": { + "@nextcloud/files": "^3.12.0" } }, - "node_modules/@mapbox/hast-util-table-cell-style/node_modules/unist-util-is": { + "node_modules/@nextcloud/sharing/node_modules/@nextcloud/initial-state": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", - "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==" - }, - "node_modules/@mapbox/hast-util-table-cell-style/node_modules/unist-util-visit": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", - "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", - "dependencies": { - "unist-util-visit-parents": "^2.0.0" - } - }, - "node_modules/@mapbox/hast-util-table-cell-style/node_modules/unist-util-visit-parents": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", - "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", - "dependencies": { - "unist-util-is": "^3.0.0" + "resolved": "https://registry.npmjs.org/@nextcloud/initial-state/-/initial-state-3.0.0.tgz", + "integrity": "sha512-cV+HBdkQJGm8FxkBI5rFT/FbMNWNBvpbj6OPrg4Ae4YOOsQ15CL8InPOAw1t4XkOkQK2NEdUGQLVUz/19wXbdQ==", + "engines": { + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" } }, - "node_modules/@napi-rs/wasm-runtime": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", - "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", + "node_modules/@nextcloud/stylelint-config": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@nextcloud/stylelint-config/-/stylelint-config-2.4.0.tgz", + "integrity": "sha512-S/q/offcs9pwnkjSrnfvsONryCOe6e1lfK2sszN6ZtkYyXvaqi8EbQuuhaGlxCstn9oXwbXfAI6O3Y8lGrjdFg==", "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@emnapi/core": "^1.4.3", - "@emnapi/runtime": "^1.4.3", - "@tybys/wasm-util": "^0.10.0" + "license": "AGPL-3.0-or-later", + "engines": { + "node": "^20.0.0", + "npm": "^10.0.0" + }, + "peerDependencies": { + "stylelint": "^15.6.0", + "stylelint-config-recommended-scss": "^13.1.0", + "stylelint-config-recommended-vue": "^1.1.0" } }, - "node_modules/@nextcloud/auth": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/@nextcloud/auth/-/auth-2.5.3.tgz", - "integrity": "sha512-KIhWLk0BKcP4hvypE4o11YqKOPeFMfEFjRrhUUF+h7Fry+dhTBIEIxuQPVCKXMIpjTDd8791y8V6UdRZ2feKAQ==", + "node_modules/@nextcloud/typings": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@nextcloud/typings/-/typings-1.10.0.tgz", + "integrity": "sha512-SMC42rDjOH3SspPTLMZRv76ZliHpj2JJkF8pGLP8l1QrVTZxE47Qz5qeKmbj2VL+dRv2e/NgixlAFmzVnxkhqg==", + "dependencies": { + "@types/jquery": "3.5.16" + }, + "engines": { + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" + } + }, + "node_modules/@nextcloud/vue": { + "version": "8.36.0", + "resolved": "https://registry.npmjs.org/@nextcloud/vue/-/vue-8.36.0.tgz", + "integrity": "sha512-x1MEh4nvCrD1zoJ3ybhtbSDox+1wyHRP7st95Uu14Wm630quRrfXGaQ1bxqaZ7en/wqaihR0NPyQKfmjrPmseg==", "dependencies": { + "@floating-ui/dom": "^1.7.5", + "@linusborg/vue-simple-portal": "^0.1.5", + "@nextcloud/auth": "^2.5.3", + "@nextcloud/axios": "^2.5.2", "@nextcloud/browser-storage": "^0.5.0", - "@nextcloud/event-bus": "^3.3.2" + "@nextcloud/capabilities": "^1.2.1", + "@nextcloud/event-bus": "^3.3.3", + "@nextcloud/initial-state": "^2.2.0", + "@nextcloud/l10n": "^3.4.1", + "@nextcloud/logger": "^3.0.3", + "@nextcloud/router": "^3.1.0", + "@nextcloud/sharing": "^0.3.0", + "@nextcloud/vue-select": "^3.26.0", + "@vueuse/components": "^11.0.0", + "@vueuse/core": "^11.0.0", + "blurhash": "^2.0.5", + "clone": "^2.1.2", + "debounce": "^2.2.0", + "dompurify": "^3.3.1", + "emoji-mart-vue-fast": "^15.0.5", + "escape-html": "^1.0.3", + "floating-vue": "^1.0.0-beta.19", + "focus-trap": "^7.8.0", + "linkify-string": "^4.3.2", + "md5": "^2.3.0", + "p-queue": "^8.1.1", + "rehype-external-links": "^3.0.0", + "rehype-highlight": "^7.0.2", + "rehype-react": "^7.1.2", + "remark-breaks": "^4.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.0.0", + "remark-unlink-protocols": "^1.0.0", + "splitpanes": "^2.4.1", + "string-length": "^5.0.1", + "striptags": "^3.2.0", + "tabbable": "^6.4.0", + "tributejs": "^5.1.3", + "unified": "^11.0.1", + "unist-builder": "^4.0.0", + "unist-util-visit": "^5.1.0", + "vue": "^2.7.16", + "vue-color": "^2.8.1", + "vue-frag": "^1.4.3", + "vue-router": "^3.6.5", + "vue2-datepicker": "^3.11.0" }, "engines": { "node": "^20.0.0 || ^22.0.0 || ^24.0.0" } }, - "node_modules/@nextcloud/axios": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/@nextcloud/axios/-/axios-2.5.2.tgz", - "integrity": "sha512-8frJb77jNMbz00TjsSqs1PymY0nIEbNM4mVmwen2tXY7wNgRai6uXilIlXKOYB9jR/F/HKRj6B4vUwVwZbhdbw==", + "node_modules/@nextcloud/vue-select": { + "version": "3.26.0", + "resolved": "https://registry.npmjs.org/@nextcloud/vue-select/-/vue-select-3.26.0.tgz", + "integrity": "sha512-UvJExrxzx5pP3lv7j6zrv2yj6B1dXph7sh3lLNPnbJPjPoH/yg58mHNFBcPJrRYMbpy2t3hlC6F7s33KCTr9FA==", + "engines": { + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" + }, + "peerDependencies": { + "vue": "2.x" + } + }, + "node_modules/@nextcloud/vue/node_modules/@nextcloud/l10n": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@nextcloud/l10n/-/l10n-3.4.1.tgz", + "integrity": "sha512-aTFinTcKiK2gEXwLgutXekpZZ8/v/4QiC8C3QCLH5m0o+WtxsBC+fqV142ebC/rfDnzCLhY4ZtswSu8bFbZocg==", "dependencies": { - "@nextcloud/auth": "^2.5.1", "@nextcloud/router": "^3.0.1", - "axios": "^1.12.2" + "@nextcloud/typings": "^1.9.1", + "@types/escape-html": "^1.0.4", + "dompurify": "^3.2.6", + "escape-html": "^1.0.3" }, "engines": { - "node": "^20.0.0 || ^22.0.0 || ^24.0.0" + "node": "^20 || ^22 || ^24" } }, - "node_modules/@nextcloud/axios/node_modules/@nextcloud/router": { + "node_modules/@nextcloud/vue/node_modules/@nextcloud/router": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@nextcloud/router/-/router-3.1.0.tgz", "integrity": "sha512-e4dkIaxRSwdZJlZFpn9x03QgBn/Sa2hN1hp/BA7+AbzykmSAlKuWfdmX8j/8ewrLpQwYmZR23IZO9XwpJXq2Uw==", @@ -1601,122 +1266,114 @@ "node": "^20.0.0 || ^22.0.0 || ^24.0.0" } }, - "node_modules/@nextcloud/browser-storage": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@nextcloud/browser-storage/-/browser-storage-0.5.0.tgz", - "integrity": "sha512-usYr4GlJQlK3hgZURvklqWb9ivi7sgsSuFqXrs7s4hl1LTS4enzPrnkQumm6nRsQruf0ITS+OBsK+oELEbvYPA==", - "engines": { - "node": "^24 || ^22 || ^20" - } - }, - "node_modules/@nextcloud/browserslist-config": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@nextcloud/browserslist-config/-/browserslist-config-3.1.2.tgz", - "integrity": "sha512-2iXl1rqQOHvggFIl/V3J5OpbodVazOsO38Gz/2sUAmtWXuOpGZG+7i6zQcVqGVaT1VzyPJ1gPiMpyyZi/XRWNA==", + "node_modules/@nextcloud/webpack-vue-config": { + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/@nextcloud/webpack-vue-config/-/webpack-vue-config-6.3.2.tgz", + "integrity": "sha512-3ihWEW6kflGggVXNqL1gNrIx88GibJMIb1sC5CHjjZ/+2kkdOQ2HizoYKyMqPfcqji9UtwgdT+RlFVC4SViNJg==", "dev": true, + "hasInstallScript": true, "engines": { - "node": "^20 || ^22 || ^24", - "npm": ">=10.5.0" + "node": "^20.0.0", + "npm": "^9.0.0 || ^10.0.0" }, "peerDependencies": { - "browserslist": "^4.26.3" + "@babel/core": "^7.22.9", + "babel-loader": "^10.0.0", + "css-loader": "^7.1.1", + "node-polyfill-webpack-plugin": "4.0.0", + "sass": "^1.64.2", + "sass-loader": "^16.0.2", + "style-loader": "^4.0.0", + "ts-loader": "^9.4.4", + "vue": "^2.7.16 || ^3.5.13", + "vue-loader": "^15.11.1 || ^17.4.2", + "webpack": "^5.88.2", + "webpack-cli": "^6.0.1", + "webpack-dev-server": "^5.0.2" } }, - "node_modules/@nextcloud/capabilities": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@nextcloud/capabilities/-/capabilities-1.2.1.tgz", - "integrity": "sha512-snZ0/910zzwN6PDsIlx2Uvktr1S5x0ClhDUnfPlCj7ntNvECzuVHNY5wzby22LIkc+9ZjaDKtCwuCt2ye+9p/Q==", + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, "dependencies": { - "@nextcloud/initial-state": "^3.0.0" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, "engines": { - "node": "^20.0.0 || ^22.0.0 || ^24.0.0" + "node": ">= 8" } }, - "node_modules/@nextcloud/capabilities/node_modules/@nextcloud/initial-state": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@nextcloud/initial-state/-/initial-state-3.0.0.tgz", - "integrity": "sha512-cV+HBdkQJGm8FxkBI5rFT/FbMNWNBvpbj6OPrg4Ae4YOOsQ15CL8InPOAw1t4XkOkQK2NEdUGQLVUz/19wXbdQ==", + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, "engines": { - "node": "^20.0.0 || ^22.0.0 || ^24.0.0" + "node": ">= 8" } }, - "node_modules/@nextcloud/dialogs": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@nextcloud/dialogs/-/dialogs-3.2.0.tgz", - "integrity": "sha512-notaHF8LXPJINBbILCbRe+dgXnJPe7NQTIrN1vwfaGUSG9GUfEf+v367yyg2brCgV6ulE/HmNhYjTQwW5AqSJA==", - "deprecated": "versions before v4.x are no longer supported, please update", + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, "dependencies": { - "@nextcloud/l10n": "^1.3.0", - "@nextcloud/typings": "^1.0.0", - "core-js": "^3.6.4", - "toastify-js": "^1.12.0" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, "engines": { - "node": "^16.0.0", - "npm": "^7.0.0 || ^8.0.0" + "node": ">= 8" } }, - "node_modules/@nextcloud/dialogs/node_modules/@nextcloud/l10n": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@nextcloud/l10n/-/l10n-1.6.0.tgz", - "integrity": "sha512-aKGlgrwN9OiafN791sYus0shfwNeU3PlrH6Oi9ISma6iJSvN6a8aJM8WGKCJ9pqBaTR5PrDuckuM/WnybBWb6A==", + "node_modules/@npmcli/agent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-3.0.0.tgz", + "integrity": "sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q==", + "dev": true, + "license": "ISC", + "optional": true, "dependencies": { - "core-js": "^3.6.4", - "node-gettext": "^3.0.0" + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@nextcloud/eslint-config": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/@nextcloud/eslint-config/-/eslint-config-8.4.2.tgz", - "integrity": "sha512-zsDcBxvp2Vr/BgasK/vNYJ84LOXjl4RseJPrcp93zcnaB2WnygV50Sd0nQ5JN0ngTyPjiIlGd92MMzrMTofjRA==", + "node_modules/@npmcli/agent/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true, - "engines": { - "node": "^20.0.0", - "npm": "^10.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.26.9", - "@babel/eslint-parser": "^7.16.5", - "@nextcloud/eslint-plugin": "^2.2.1", - "@vue/eslint-config-typescript": "^13.0.0", - "eslint": "^8.27.0", - "eslint-config-standard": "^17.1.0", - "eslint-import-resolver-exports": "^1.0.0-beta.5", - "eslint-import-resolver-typescript": "^3.8.0", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-jsdoc": "^46.2.6", - "eslint-plugin-n": "^16.0.0", - "eslint-plugin-promise": "^6.6.0", - "eslint-plugin-vue": "^9.7.0", - "typescript": "^5.0.2" - } + "license": "ISC", + "optional": true }, - "node_modules/@nextcloud/eslint-plugin": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@nextcloud/eslint-plugin/-/eslint-plugin-2.2.1.tgz", - "integrity": "sha512-RX+0FxpL1h2EzjNLeW0VSGTkbyWIq7WgV7QAjtyUmDbSGwf1ds9Zy5OcRkgXRHRIu/W0gB0DhS2iz9qXHphCzA==", + "node_modules/@npmcli/fs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-4.0.0.tgz", + "integrity": "sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==", "dev": true, - "peer": true, + "license": "ISC", + "optional": true, "dependencies": { - "fast-xml-parser": "^4.2.5", - "requireindex": "^1.2.0", - "semver": "^7.5.3" + "semver": "^7.3.5" }, "engines": { - "node": "^20.0.0", - "npm": "^10.0.0" - }, - "peerDependencies": { - "eslint": ">=7.0.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@nextcloud/eslint-plugin/node_modules/semver": { + "node_modules/@npmcli/fs/node_modules/semver": { "version": "7.7.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, - "peer": true, + "license": "ISC", + "optional": true, "bin": { "semver": "bin/semver.js" }, @@ -1724,1815 +1381,201 @@ "node": ">=10" } }, - "node_modules/@nextcloud/event-bus": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@nextcloud/event-bus/-/event-bus-3.3.3.tgz", - "integrity": "sha512-zIfvKmUGkXpVzRKoXrcO9hkoiKDm65fqNxy/XIbIxrQhZByPq3gDkjBpnu3V5Gs8JdYwa73R8DjzV9oH8HYhIg==", - "dependencies": { - "@types/semver": "^7.7.0", - "semver": "^7.7.2" - }, - "engines": { - "node": "^20 || ^22 || ^24" - } - }, - "node_modules/@nextcloud/event-bus/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@nextcloud/files": { - "version": "3.12.2", - "resolved": "https://registry.npmjs.org/@nextcloud/files/-/files-3.12.2.tgz", - "integrity": "sha512-vBo8tf3Xh6efiF8CrEo3pKj9AtvAF6RdDGO1XKL65IxV8+UUd9Uxl2lUExHlzoDRRczCqfGfaWfRRaFhYqce5Q==", - "optional": true, - "dependencies": { - "@nextcloud/auth": "^2.5.3", - "@nextcloud/capabilities": "^1.2.1", - "@nextcloud/l10n": "^3.4.1", - "@nextcloud/logger": "^3.0.3", - "@nextcloud/paths": "^3.0.0", - "@nextcloud/router": "^3.1.0", - "@nextcloud/sharing": "^0.3.0", - "cancelable-promise": "^4.3.1", - "is-svg": "^6.1.0", - "typescript-event-target": "^1.1.1", - "webdav": "^5.8.0" - }, - "engines": { - "node": "^20.0.0 || ^22.0.0 || ^24.0.0" - } - }, - "node_modules/@nextcloud/files/node_modules/@nextcloud/l10n": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/@nextcloud/l10n/-/l10n-3.4.1.tgz", - "integrity": "sha512-aTFinTcKiK2gEXwLgutXekpZZ8/v/4QiC8C3QCLH5m0o+WtxsBC+fqV142ebC/rfDnzCLhY4ZtswSu8bFbZocg==", - "optional": true, - "dependencies": { - "@nextcloud/router": "^3.0.1", - "@nextcloud/typings": "^1.9.1", - "@types/escape-html": "^1.0.4", - "dompurify": "^3.2.6", - "escape-html": "^1.0.3" - }, - "engines": { - "node": "^20 || ^22 || ^24" - } - }, - "node_modules/@nextcloud/files/node_modules/@nextcloud/router": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@nextcloud/router/-/router-3.1.0.tgz", - "integrity": "sha512-e4dkIaxRSwdZJlZFpn9x03QgBn/Sa2hN1hp/BA7+AbzykmSAlKuWfdmX8j/8ewrLpQwYmZR23IZO9XwpJXq2Uw==", - "optional": true, - "dependencies": { - "@nextcloud/typings": "^1.10.0" - }, - "engines": { - "node": "^20.0.0 || ^22.0.0 || ^24.0.0" - } - }, - "node_modules/@nextcloud/initial-state": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@nextcloud/initial-state/-/initial-state-2.2.0.tgz", - "integrity": "sha512-cDW98L5KGGgpS8pzd+05304/p80cyu8U2xSDQGa+kGPTpUFmCbv2qnO5WrwwGTauyjYijCal2bmw82VddSH+Pg==", - "engines": { - "node": "^20.0.0", - "npm": "^10.0.0" - } - }, - "node_modules/@nextcloud/l10n": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@nextcloud/l10n/-/l10n-2.2.0.tgz", - "integrity": "sha512-UAM2NJcl/NR46MANSF7Gr7q8/Up672zRyGrxLpN3k4URNmWQM9upkbRME+1K3T29wPrUyOIbQu710ZjvZafqFA==", - "license": "GPL-3.0-or-later", - "dependencies": { - "@nextcloud/router": "^2.1.2", - "@nextcloud/typings": "^1.7.0", - "dompurify": "^3.0.3", - "escape-html": "^1.0.3", - "node-gettext": "^3.0.0" - }, - "engines": { - "node": "^20.0.0", - "npm": "^9.0.0" - } - }, - "node_modules/@nextcloud/logger": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@nextcloud/logger/-/logger-3.0.3.tgz", - "integrity": "sha512-TcbVRL4/O5ffI1RXFmQAFD3gwwT15AAdr1770x+RNqVvfBdoGVyhzOwCIyA5Vfc3fA1iJXFa+rE6buJZSoqlcw==", - "dependencies": { - "@nextcloud/auth": "^2.5.3" - }, - "engines": { - "node": "^20.0.0 || ^22.0.0 || ^24.0.0" - } - }, - "node_modules/@nextcloud/paths": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@nextcloud/paths/-/paths-3.0.0.tgz", - "integrity": "sha512-+sTfTkIbVUa2Ue3bkz3R7F1mhddvHPOWUxkSNg7Q5dAsimVFBaTRgiBAJmsAag3JPsxyuS8kUgeb0zdEssRdTA==", - "optional": true, - "engines": { - "node": "^20.0.0 || ^22.0.0 || ^24.0.0" - } - }, - "node_modules/@nextcloud/router": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@nextcloud/router/-/router-2.1.2.tgz", - "integrity": "sha512-Jj5fgjeHT1vVIgOyUGOeHfwk2KgaO77QGfqZAT6GWXvpAsN0mkqwljkg4FkHrQRouYqCE4VnJ5o8/w0DAN89tA==", - "dependencies": { - "@nextcloud/typings": "^1.0.0", - "core-js": "^3.6.4" - }, - "engines": { - "node": "^16.0.0", - "npm": "^7.0.0 || ^8.0.0" - } - }, - "node_modules/@nextcloud/sharing": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@nextcloud/sharing/-/sharing-0.3.0.tgz", - "integrity": "sha512-kV7qeUZvd1fTKeFyH+W5Qq5rNOqG9rLATZM3U9MBxWXHJs3OxMqYQb8UQ3NYONzsX3zDGJmdQECIGHm1ei2sCA==", - "dependencies": { - "@nextcloud/initial-state": "^3.0.0", - "is-svg": "^6.1.0" - }, - "engines": { - "node": "^20.0.0 || ^22.0.0 || ^24.0.0" - }, - "optionalDependencies": { - "@nextcloud/files": "^3.12.0" - } - }, - "node_modules/@nextcloud/sharing/node_modules/@nextcloud/initial-state": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@nextcloud/initial-state/-/initial-state-3.0.0.tgz", - "integrity": "sha512-cV+HBdkQJGm8FxkBI5rFT/FbMNWNBvpbj6OPrg4Ae4YOOsQ15CL8InPOAw1t4XkOkQK2NEdUGQLVUz/19wXbdQ==", - "engines": { - "node": "^20.0.0 || ^22.0.0 || ^24.0.0" - } - }, - "node_modules/@nextcloud/stylelint-config": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@nextcloud/stylelint-config/-/stylelint-config-2.4.0.tgz", - "integrity": "sha512-S/q/offcs9pwnkjSrnfvsONryCOe6e1lfK2sszN6ZtkYyXvaqi8EbQuuhaGlxCstn9oXwbXfAI6O3Y8lGrjdFg==", - "dev": true, - "license": "AGPL-3.0-or-later", - "engines": { - "node": "^20.0.0", - "npm": "^10.0.0" - }, - "peerDependencies": { - "stylelint": "^15.6.0", - "stylelint-config-recommended-scss": "^13.1.0", - "stylelint-config-recommended-vue": "^1.1.0" - } - }, - "node_modules/@nextcloud/typings": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@nextcloud/typings/-/typings-1.10.0.tgz", - "integrity": "sha512-SMC42rDjOH3SspPTLMZRv76ZliHpj2JJkF8pGLP8l1QrVTZxE47Qz5qeKmbj2VL+dRv2e/NgixlAFmzVnxkhqg==", - "dependencies": { - "@types/jquery": "3.5.16" - }, - "engines": { - "node": "^20.0.0 || ^22.0.0 || ^24.0.0" - } - }, - "node_modules/@nextcloud/vue": { - "version": "8.36.0", - "resolved": "https://registry.npmjs.org/@nextcloud/vue/-/vue-8.36.0.tgz", - "integrity": "sha512-x1MEh4nvCrD1zoJ3ybhtbSDox+1wyHRP7st95Uu14Wm630quRrfXGaQ1bxqaZ7en/wqaihR0NPyQKfmjrPmseg==", - "dependencies": { - "@floating-ui/dom": "^1.7.5", - "@linusborg/vue-simple-portal": "^0.1.5", - "@nextcloud/auth": "^2.5.3", - "@nextcloud/axios": "^2.5.2", - "@nextcloud/browser-storage": "^0.5.0", - "@nextcloud/capabilities": "^1.2.1", - "@nextcloud/event-bus": "^3.3.3", - "@nextcloud/initial-state": "^2.2.0", - "@nextcloud/l10n": "^3.4.1", - "@nextcloud/logger": "^3.0.3", - "@nextcloud/router": "^3.1.0", - "@nextcloud/sharing": "^0.3.0", - "@nextcloud/vue-select": "^3.26.0", - "@vueuse/components": "^11.0.0", - "@vueuse/core": "^11.0.0", - "blurhash": "^2.0.5", - "clone": "^2.1.2", - "debounce": "^2.2.0", - "dompurify": "^3.3.1", - "emoji-mart-vue-fast": "^15.0.5", - "escape-html": "^1.0.3", - "floating-vue": "^1.0.0-beta.19", - "focus-trap": "^7.8.0", - "linkify-string": "^4.3.2", - "md5": "^2.3.0", - "p-queue": "^8.1.1", - "rehype-external-links": "^3.0.0", - "rehype-highlight": "^7.0.2", - "rehype-react": "^7.1.2", - "remark-breaks": "^4.0.0", - "remark-parse": "^11.0.0", - "remark-rehype": "^11.0.0", - "remark-unlink-protocols": "^1.0.0", - "splitpanes": "^2.4.1", - "string-length": "^5.0.1", - "striptags": "^3.2.0", - "tabbable": "^6.4.0", - "tributejs": "^5.1.3", - "unified": "^11.0.1", - "unist-builder": "^4.0.0", - "unist-util-visit": "^5.1.0", - "vue": "^2.7.16", - "vue-color": "^2.8.1", - "vue-frag": "^1.4.3", - "vue-router": "^3.6.5", - "vue2-datepicker": "^3.11.0" - }, - "engines": { - "node": "^20.0.0 || ^22.0.0 || ^24.0.0" - } - }, - "node_modules/@nextcloud/vue-select": { - "version": "3.26.0", - "resolved": "https://registry.npmjs.org/@nextcloud/vue-select/-/vue-select-3.26.0.tgz", - "integrity": "sha512-UvJExrxzx5pP3lv7j6zrv2yj6B1dXph7sh3lLNPnbJPjPoH/yg58mHNFBcPJrRYMbpy2t3hlC6F7s33KCTr9FA==", - "engines": { - "node": "^20.0.0 || ^22.0.0 || ^24.0.0" - }, - "peerDependencies": { - "vue": "2.x" - } - }, - "node_modules/@nextcloud/vue/node_modules/@nextcloud/l10n": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/@nextcloud/l10n/-/l10n-3.4.1.tgz", - "integrity": "sha512-aTFinTcKiK2gEXwLgutXekpZZ8/v/4QiC8C3QCLH5m0o+WtxsBC+fqV142ebC/rfDnzCLhY4ZtswSu8bFbZocg==", - "dependencies": { - "@nextcloud/router": "^3.0.1", - "@nextcloud/typings": "^1.9.1", - "@types/escape-html": "^1.0.4", - "dompurify": "^3.2.6", - "escape-html": "^1.0.3" - }, - "engines": { - "node": "^20 || ^22 || ^24" - } - }, - "node_modules/@nextcloud/vue/node_modules/@nextcloud/router": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@nextcloud/router/-/router-3.1.0.tgz", - "integrity": "sha512-e4dkIaxRSwdZJlZFpn9x03QgBn/Sa2hN1hp/BA7+AbzykmSAlKuWfdmX8j/8ewrLpQwYmZR23IZO9XwpJXq2Uw==", - "dependencies": { - "@nextcloud/typings": "^1.10.0" - }, - "engines": { - "node": "^20.0.0 || ^22.0.0 || ^24.0.0" - } - }, - "node_modules/@nextcloud/webpack-vue-config": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/@nextcloud/webpack-vue-config/-/webpack-vue-config-6.3.2.tgz", - "integrity": "sha512-3ihWEW6kflGggVXNqL1gNrIx88GibJMIb1sC5CHjjZ/+2kkdOQ2HizoYKyMqPfcqji9UtwgdT+RlFVC4SViNJg==", - "dev": true, - "hasInstallScript": true, - "engines": { - "node": "^20.0.0", - "npm": "^9.0.0 || ^10.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.22.9", - "babel-loader": "^10.0.0", - "css-loader": "^7.1.1", - "node-polyfill-webpack-plugin": "4.0.0", - "sass": "^1.64.2", - "sass-loader": "^16.0.2", - "style-loader": "^4.0.0", - "ts-loader": "^9.4.4", - "vue": "^2.7.16 || ^3.5.13", - "vue-loader": "^15.11.1 || ^17.4.2", - "webpack": "^5.88.2", - "webpack-cli": "^6.0.1", - "webpack-dev-server": "^5.0.2" - } - }, - "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { - "version": "5.1.1-v1", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", - "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", - "dev": true, - "peer": true, - "dependencies": { - "eslint-scope": "5.1.1" - } - }, - "node_modules/@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nolyfill/is-core-module": { - "version": "1.0.39", - "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", - "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=12.4.0" - } - }, - "node_modules/@npmcli/agent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-3.0.0.tgz", - "integrity": "sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q==", - "dev": true, - "license": "ISC", - "optional": true, - "dependencies": { - "agent-base": "^7.1.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.1", - "lru-cache": "^10.0.1", - "socks-proxy-agent": "^8.0.3" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/agent/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC", - "optional": true - }, - "node_modules/@npmcli/fs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-4.0.0.tgz", - "integrity": "sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==", - "dev": true, - "license": "ISC", - "optional": true, - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/fs/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "dev": true, - "license": "ISC", - "optional": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@oozcitak/dom": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@oozcitak/dom/-/dom-2.0.2.tgz", - "integrity": "sha512-GjpKhkSYC3Mj4+lfwEyI1dqnsKTgwGy48ytZEhm4A/xnH/8z9M3ZVXKr/YGQi3uCLs1AEBS+x5T2JPiueEDW8w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@oozcitak/infra": "^2.0.2", - "@oozcitak/url": "^3.0.0", - "@oozcitak/util": "^10.0.0" - }, - "engines": { - "node": ">=20.0" - } - }, - "node_modules/@oozcitak/infra": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@oozcitak/infra/-/infra-2.0.2.tgz", - "integrity": "sha512-2g+E7hoE2dgCz/APPOEK5s3rMhJvNxSMBrP+U+j1OWsIbtSpWxxlUjq1lU8RIsFJNYv7NMlnVsCuHcUzJW+8vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@oozcitak/util": "^10.0.0" - }, - "engines": { - "node": ">=20.0" - } - }, - "node_modules/@oozcitak/url": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@oozcitak/url/-/url-3.0.0.tgz", - "integrity": "sha512-ZKfET8Ak1wsLAiLWNfFkZc/BraDccuTJKR6svTYc7sVjbR+Iu0vtXdiDMY4o6jaFl5TW2TlS7jbLl4VovtAJWQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@oozcitak/infra": "^2.0.2", - "@oozcitak/util": "^10.0.0" - }, - "engines": { - "node": ">=20.0" - } - }, - "node_modules/@oozcitak/util": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@oozcitak/util/-/util-10.0.0.tgz", - "integrity": "sha512-hAX0pT/73190NLqBPPWSdBVGtbY6VOhWYK3qqHqtXQ1gK7kS2yz4+ivsN07hpJ6I3aeMtKP6J6npsEKOAzuTLA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=20.0" - } - }, - "node_modules/@parcel/watcher": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.6.tgz", - "integrity": "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "peer": true, - "dependencies": { - "detect-libc": "^2.0.3", - "is-glob": "^4.0.3", - "node-addon-api": "^7.0.0", - "picomatch": "^4.0.3" - }, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "@parcel/watcher-android-arm64": "2.5.6", - "@parcel/watcher-darwin-arm64": "2.5.6", - "@parcel/watcher-darwin-x64": "2.5.6", - "@parcel/watcher-freebsd-x64": "2.5.6", - "@parcel/watcher-linux-arm-glibc": "2.5.6", - "@parcel/watcher-linux-arm-musl": "2.5.6", - "@parcel/watcher-linux-arm64-glibc": "2.5.6", - "@parcel/watcher-linux-arm64-musl": "2.5.6", - "@parcel/watcher-linux-x64-glibc": "2.5.6", - "@parcel/watcher-linux-x64-musl": "2.5.6", - "@parcel/watcher-win32-arm64": "2.5.6", - "@parcel/watcher-win32-ia32": "2.5.6", - "@parcel/watcher-win32-x64": "2.5.6" - } - }, - "node_modules/@parcel/watcher-android-arm64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.6.tgz", - "integrity": "sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "peer": true, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-darwin-arm64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.6.tgz", - "integrity": "sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-darwin-x64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.6.tgz", - "integrity": "sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-freebsd-x64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.6.tgz", - "integrity": "sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "peer": true, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm-glibc": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.6.tgz", - "integrity": "sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm-musl": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.6.tgz", - "integrity": "sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm64-glibc": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.6.tgz", - "integrity": "sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm64-musl": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.6.tgz", - "integrity": "sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-x64-glibc": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.6.tgz", - "integrity": "sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-x64-musl": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.6.tgz", - "integrity": "sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-win32-arm64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.6.tgz", - "integrity": "sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-win32-ia32": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.6.tgz", - "integrity": "sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-win32-x64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.6.tgz", - "integrity": "sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/@peculiar/asn1-cms": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-cms/-/asn1-cms-2.6.1.tgz", - "integrity": "sha512-vdG4fBF6Lkirkcl53q6eOdn3XYKt+kJTG59edgRZORlg/3atWWEReRCx5rYE1ZzTTX6vLK5zDMjHh7vbrcXGtw==", - "dev": true, - "peer": true, - "dependencies": { - "@peculiar/asn1-schema": "^2.6.0", - "@peculiar/asn1-x509": "^2.6.1", - "@peculiar/asn1-x509-attr": "^2.6.1", - "asn1js": "^3.0.6", - "tslib": "^2.8.1" - } - }, - "node_modules/@peculiar/asn1-csr": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-csr/-/asn1-csr-2.6.1.tgz", - "integrity": "sha512-WRWnKfIocHyzFYQTka8O/tXCiBquAPSrRjXbOkHbO4qdmS6loffCEGs+rby6WxxGdJCuunnhS2duHURhjyio6w==", - "dev": true, - "peer": true, - "dependencies": { - "@peculiar/asn1-schema": "^2.6.0", - "@peculiar/asn1-x509": "^2.6.1", - "asn1js": "^3.0.6", - "tslib": "^2.8.1" - } - }, - "node_modules/@peculiar/asn1-ecc": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-ecc/-/asn1-ecc-2.6.1.tgz", - "integrity": "sha512-+Vqw8WFxrtDIN5ehUdvlN2m73exS2JVG0UAyfVB31gIfor3zWEAQPD+K9ydCxaj3MLen9k0JhKpu9LqviuCE1g==", - "dev": true, - "peer": true, - "dependencies": { - "@peculiar/asn1-schema": "^2.6.0", - "@peculiar/asn1-x509": "^2.6.1", - "asn1js": "^3.0.6", - "tslib": "^2.8.1" - } - }, - "node_modules/@peculiar/asn1-pfx": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-pfx/-/asn1-pfx-2.6.1.tgz", - "integrity": "sha512-nB5jVQy3MAAWvq0KY0R2JUZG8bO/bTLpnwyOzXyEh/e54ynGTatAR+csOnXkkVD9AFZ2uL8Z7EV918+qB1qDvw==", - "dev": true, - "peer": true, - "dependencies": { - "@peculiar/asn1-cms": "^2.6.1", - "@peculiar/asn1-pkcs8": "^2.6.1", - "@peculiar/asn1-rsa": "^2.6.1", - "@peculiar/asn1-schema": "^2.6.0", - "asn1js": "^3.0.6", - "tslib": "^2.8.1" - } - }, - "node_modules/@peculiar/asn1-pkcs8": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.6.1.tgz", - "integrity": "sha512-JB5iQ9Izn5yGMw3ZG4Nw3Xn/hb/G38GYF3lf7WmJb8JZUydhVGEjK/ZlFSWhnlB7K/4oqEs8HnfFIKklhR58Tw==", - "dev": true, - "peer": true, - "dependencies": { - "@peculiar/asn1-schema": "^2.6.0", - "@peculiar/asn1-x509": "^2.6.1", - "asn1js": "^3.0.6", - "tslib": "^2.8.1" - } - }, - "node_modules/@peculiar/asn1-pkcs9": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.6.1.tgz", - "integrity": "sha512-5EV8nZoMSxeWmcxWmmcolg22ojZRgJg+Y9MX2fnE2bGRo5KQLqV5IL9kdSQDZxlHz95tHvIq9F//bvL1OeNILw==", - "dev": true, - "peer": true, - "dependencies": { - "@peculiar/asn1-cms": "^2.6.1", - "@peculiar/asn1-pfx": "^2.6.1", - "@peculiar/asn1-pkcs8": "^2.6.1", - "@peculiar/asn1-schema": "^2.6.0", - "@peculiar/asn1-x509": "^2.6.1", - "@peculiar/asn1-x509-attr": "^2.6.1", - "asn1js": "^3.0.6", - "tslib": "^2.8.1" - } - }, - "node_modules/@peculiar/asn1-rsa": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-rsa/-/asn1-rsa-2.6.1.tgz", - "integrity": "sha512-1nVMEh46SElUt5CB3RUTV4EG/z7iYc7EoaDY5ECwganibQPkZ/Y2eMsTKB/LeyrUJ+W/tKoD9WUqIy8vB+CEdA==", - "dev": true, - "peer": true, - "dependencies": { - "@peculiar/asn1-schema": "^2.6.0", - "@peculiar/asn1-x509": "^2.6.1", - "asn1js": "^3.0.6", - "tslib": "^2.8.1" - } - }, - "node_modules/@peculiar/asn1-schema": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.6.0.tgz", - "integrity": "sha512-xNLYLBFTBKkCzEZIw842BxytQQATQv+lDTCEMZ8C196iJcJJMBUZxrhSTxLaohMyKK8QlzRNTRkUmanucnDSqg==", - "dev": true, - "peer": true, - "dependencies": { - "asn1js": "^3.0.6", - "pvtsutils": "^1.3.6", - "tslib": "^2.8.1" - } - }, - "node_modules/@peculiar/asn1-x509": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509/-/asn1-x509-2.6.1.tgz", - "integrity": "sha512-O9jT5F1A2+t3r7C4VT7LYGXqkGLK7Kj1xFpz7U0isPrubwU5PbDoyYtx6MiGst29yq7pXN5vZbQFKRCP+lLZlA==", - "dev": true, - "peer": true, - "dependencies": { - "@peculiar/asn1-schema": "^2.6.0", - "asn1js": "^3.0.6", - "pvtsutils": "^1.3.6", - "tslib": "^2.8.1" - } - }, - "node_modules/@peculiar/asn1-x509-attr": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.6.1.tgz", - "integrity": "sha512-tlW6cxoHwgcQghnJwv3YS+9OO1737zgPogZ+CgWRUK4roEwIPzRH4JEiG770xe5HX2ATfCpmX60gurfWIF9dcQ==", - "dev": true, - "peer": true, - "dependencies": { - "@peculiar/asn1-schema": "^2.6.0", - "@peculiar/asn1-x509": "^2.6.1", - "asn1js": "^3.0.6", - "tslib": "^2.8.1" - } - }, - "node_modules/@peculiar/x509": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/@peculiar/x509/-/x509-1.14.3.tgz", - "integrity": "sha512-C2Xj8FZ0uHWeCXXqX5B4/gVFQmtSkiuOolzAgutjTfseNOHT3pUjljDZsTSxXFGgio54bCzVFqmEOUrIVk8RDA==", - "dev": true, - "peer": true, - "dependencies": { - "@peculiar/asn1-cms": "^2.6.0", - "@peculiar/asn1-csr": "^2.6.0", - "@peculiar/asn1-ecc": "^2.6.0", - "@peculiar/asn1-pkcs9": "^2.6.0", - "@peculiar/asn1-rsa": "^2.6.0", - "@peculiar/asn1-schema": "^2.6.0", - "@peculiar/asn1-x509": "^2.6.0", - "pvtsutils": "^1.3.6", - "reflect-metadata": "^0.2.2", - "tslib": "^2.8.1", - "tsyringe": "^4.10.0" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@rtsao/scc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", - "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", - "dev": true, - "peer": true - }, - "node_modules/@tokenizer/token": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", - "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==" - }, - "node_modules/@tybys/wasm-util": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", - "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.6", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", - "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", - "dev": true, - "peer": true, - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/bonjour": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", - "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", - "dev": true, - "peer": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "dev": true, - "peer": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", - "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", - "dev": true, - "peer": true, - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "node_modules/@types/debug": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/escape-html": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@types/escape-html/-/escape-html-1.0.4.tgz", - "integrity": "sha512-qZ72SFTgUAZ5a7Tj6kf2SHLetiH5S6f8G5frB2SPQ3EyF02kxdyBFf4Tz4banE3xCgGnKgWLt//a6VuYHKYJTg==" - }, - "node_modules/@types/eslint": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", - "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", - "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "dev": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true - }, - "node_modules/@types/express": { - "version": "4.17.25", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.25.tgz", - "integrity": "sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==", - "dev": true, - "peer": true, - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "^1" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.19.8", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.8.tgz", - "integrity": "sha512-02S5fmqeoKzVZCHPZid4b8JH2eM5HzQLZWN2FohQEy/0eXTq8VXZfSN6Pcr3F6N9R/vNrj7cpgbhjie6m/1tCA==", - "dev": true, - "peer": true, - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/hast": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", - "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/http-errors": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", - "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", - "dev": true, - "peer": true - }, - "node_modules/@types/http-proxy": { - "version": "1.17.17", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.17.tgz", - "integrity": "sha512-ED6LB+Z1AVylNTu7hdzuBqOgMnvG/ld6wGCG8wFnAzKX5uyW2K3WD52v0gnLCTK/VLpXtKckgWuyScYK6cSPaw==", - "dev": true, - "peer": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/jquery": { - "version": "3.5.16", - "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.16.tgz", - "integrity": "sha512-bsI7y4ZgeMkmpG9OM710RRzDFp+w4P1RGiIt30C1mSBT+ExCleeh4HObwgArnDFELmRrOpXgSYN9VF1hj+f1lw==", - "dependencies": { - "@types/sizzle": "*" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true, - "peer": true - }, - "node_modules/@types/mdast": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", - "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "dev": true, - "peer": true - }, - "node_modules/@types/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/ms": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", - "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==" - }, - "node_modules/@types/node": { - "version": "25.2.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.3.tgz", - "integrity": "sha512-m0jEgYlYz+mDJZ2+F4v8D1AyQb+QzsNqRuI7xg1VQX/KlKS0qT9r1Mo16yo5F/MtifXFgaofIFsdFMox2SxIbQ==", - "dev": true, - "dependencies": { - "undici-types": "~7.16.0" - } - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", - "dev": true, - "peer": true - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "dev": true, - "peer": true - }, - "node_modules/@types/react": { - "version": "19.2.14", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz", - "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", - "peer": true, - "dependencies": { - "csstype": "^3.2.2" - } - }, - "node_modules/@types/retry": { - "version": "0.12.2", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", - "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", - "dev": true, - "peer": true - }, - "node_modules/@types/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==" - }, - "node_modules/@types/send": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", - "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", - "dev": true, - "peer": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/serve-index": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", - "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", - "dev": true, - "peer": true, - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.10", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.10.tgz", - "integrity": "sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==", - "dev": true, - "peer": true, - "dependencies": { - "@types/http-errors": "*", - "@types/node": "*", - "@types/send": "<1" - } - }, - "node_modules/@types/serve-static/node_modules/@types/send": { - "version": "0.17.6", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.6.tgz", - "integrity": "sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==", - "dev": true, - "peer": true, - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/sizzle": { - "version": "2.3.10", - "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.10.tgz", - "integrity": "sha512-TC0dmN0K8YcWEAEfiPi5gJP14eJe30TTGjkvek3iM/1NdHHsdCA/Td6GvNndMOo/iSnIsZ4HuuhrYPDAmbxzww==" - }, - "node_modules/@types/sockjs": { - "version": "0.3.36", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", - "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", - "dev": true, - "peer": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/trusted-types": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", - "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", - "optional": true - }, - "node_modules/@types/unist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==" - }, - "node_modules/@types/web-bluetooth": { - "version": "0.0.20", - "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", - "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==" - }, - "node_modules/@types/ws": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", - "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", - "dev": true, - "peer": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", - "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/type-utils": "7.18.0", - "@typescript-eslint/utils": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "graphemer": "^1.4.0", - "ignore": "^5.3.1", - "natural-compare": "^1.4.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^7.0.0", - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", - "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", - "dev": true, - "license": "BSD-2-Clause", - "peer": true, - "dependencies": { - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", - "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", - "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/utils": "7.18.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", - "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", + "node_modules/@oozcitak/dom": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@oozcitak/dom/-/dom-2.0.2.tgz", + "integrity": "sha512-GjpKhkSYC3Mj4+lfwEyI1dqnsKTgwGy48ytZEhm4A/xnH/8z9M3ZVXKr/YGQi3uCLs1AEBS+x5T2JPiueEDW8w==", "dev": true, "license": "MIT", - "peer": true, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", - "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", - "dev": true, - "license": "BSD-2-Clause", - "peer": true, "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" + "@oozcitak/infra": "^2.0.2", + "@oozcitak/url": "^3.0.0", + "@oozcitak/util": "^10.0.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=20.0" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "node_modules/@oozcitak/infra": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@oozcitak/infra/-/infra-2.0.2.tgz", + "integrity": "sha512-2g+E7hoE2dgCz/APPOEK5s3rMhJvNxSMBrP+U+j1OWsIbtSpWxxlUjq1lU8RIsFJNYv7NMlnVsCuHcUzJW+8vA==", "dev": true, - "license": "ISC", - "peer": true, - "bin": { - "semver": "bin/semver.js" + "license": "MIT", + "dependencies": { + "@oozcitak/util": "^10.0.0" }, "engines": { - "node": ">=10" + "node": ">=20.0" } }, - "node_modules/@typescript-eslint/utils": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", - "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", + "node_modules/@oozcitak/url": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@oozcitak/url/-/url-3.0.0.tgz", + "integrity": "sha512-ZKfET8Ak1wsLAiLWNfFkZc/BraDccuTJKR6svTYc7sVjbR+Iu0vtXdiDMY4o6jaFl5TW2TlS7jbLl4VovtAJWQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0" + "@oozcitak/infra": "^2.0.2", + "@oozcitak/util": "^10.0.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" + "node": ">=20.0" } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", - "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", + "node_modules/@oozcitak/util": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@oozcitak/util/-/util-10.0.0.tgz", + "integrity": "sha512-hAX0pT/73190NLqBPPWSdBVGtbY6VOhWYK3qqHqtXQ1gK7kS2yz4+ivsN07hpJ6I3aeMtKP6J6npsEKOAzuTLA==", "dev": true, "license": "MIT", - "peer": true, - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "eslint-visitor-keys": "^3.4.3" - }, "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=20.0" } }, - "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, - "license": "Apache-2.0", - "peer": true, + "license": "MIT", + "optional": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=14" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", - "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==" + "node_modules/@tokenizer/token": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==" }, - "node_modules/@unrs/resolver-binding-android-arm-eabi": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz", - "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "peer": true + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "dependencies": { + "@types/ms": "*" + } }, - "node_modules/@unrs/resolver-binding-android-arm64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz", - "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "peer": true + "node_modules/@types/escape-html": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/escape-html/-/escape-html-1.0.4.tgz", + "integrity": "sha512-qZ72SFTgUAZ5a7Tj6kf2SHLetiH5S6f8G5frB2SPQ3EyF02kxdyBFf4Tz4banE3xCgGnKgWLt//a6VuYHKYJTg==" }, - "node_modules/@unrs/resolver-binding-darwin-arm64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz", - "integrity": "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==", - "cpu": [ - "arm64" - ], + "node_modules/@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "peer": true + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } }, - "node_modules/@unrs/resolver-binding-darwin-x64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz", - "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==", - "cpu": [ - "x64" - ], + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "peer": true + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } }, - "node_modules/@unrs/resolver-binding-freebsd-x64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz", - "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "peer": true + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true }, - "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz", - "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "dependencies": { + "@types/unist": "*" + } }, - "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz", - "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true + "node_modules/@types/jquery": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.16.tgz", + "integrity": "sha512-bsI7y4ZgeMkmpG9OM710RRzDFp+w4P1RGiIt30C1mSBT+ExCleeh4HObwgArnDFELmRrOpXgSYN9VF1hj+f1lw==", + "dependencies": { + "@types/sizzle": "*" + } }, - "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz", - "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true }, - "node_modules/@unrs/resolver-binding-linux-arm64-musl": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz", - "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "dependencies": { + "@types/unist": "*" + } }, - "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz", - "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==", - "cpu": [ - "ppc64" - ], + "node_modules/@types/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true + "license": "MIT" }, - "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz", - "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==" }, - "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz", - "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==", - "cpu": [ - "riscv64" - ], + "node_modules/@types/node": { + "version": "25.2.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.3.tgz", + "integrity": "sha512-m0jEgYlYz+mDJZ2+F4v8D1AyQb+QzsNqRuI7xg1VQX/KlKS0qT9r1Mo16yo5F/MtifXFgaofIFsdFMox2SxIbQ==", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true + "dependencies": { + "undici-types": "~7.16.0" + } }, - "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz", - "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==", - "cpu": [ - "s390x" - ], + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true + "license": "MIT" }, - "node_modules/@unrs/resolver-binding-linux-x64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz", - "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true + "node_modules/@types/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==" }, - "node_modules/@unrs/resolver-binding-linux-x64-musl": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz", - "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true + "node_modules/@types/sizzle": { + "version": "2.3.10", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.10.tgz", + "integrity": "sha512-TC0dmN0K8YcWEAEfiPi5gJP14eJe30TTGjkvek3iM/1NdHHsdCA/Td6GvNndMOo/iSnIsZ4HuuhrYPDAmbxzww==" }, - "node_modules/@unrs/resolver-binding-wasm32-wasi": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz", - "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==", - "cpu": [ - "wasm32" - ], - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@napi-rs/wasm-runtime": "^0.2.11" - }, - "engines": { - "node": ">=14.0.0" - } + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "optional": true }, - "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz", - "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "peer": true + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==" }, - "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz", - "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "peer": true + "node_modules/@types/web-bluetooth": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", + "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==" }, - "node_modules/@unrs/resolver-binding-win32-x64-msvc": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz", - "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "peer": true + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==" }, "node_modules/@vue/compiler-sfc": { "version": "2.7.16", @@ -3627,31 +1670,6 @@ "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==" }, - "node_modules/@vue/eslint-config-typescript": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-13.0.0.tgz", - "integrity": "sha512-MHh9SncG/sfqjVqjcuFLOLD6Ed4dRAis4HNt0dXASeAuLqIAx4YMB1/m2o4pUKK1vCt8fUvYG8KKX2Ot3BVZTg==", - "dev": true, - "peer": true, - "dependencies": { - "@typescript-eslint/eslint-plugin": "^7.1.1", - "@typescript-eslint/parser": "^7.1.1", - "vue-eslint-parser": "^9.3.1" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "peerDependencies": { - "eslint": "^8.56.0", - "eslint-plugin-vue": "^9.0.0", - "typescript": ">=4.7.4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, "node_modules/@vueuse/components": { "version": "11.3.0", "resolved": "https://registry.npmjs.org/@vueuse/components/-/components-11.3.0.tgz", @@ -3972,6 +1990,12 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, + "node_modules/@yr/monotone-cubic-spline": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@yr/monotone-cubic-spline/-/monotone-cubic-spline-1.0.3.tgz", + "integrity": "sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA==", + "license": "MIT" + }, "node_modules/abbrev": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", @@ -3983,43 +2007,6 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dev": true, - "peer": true, - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "peer": true, - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/acorn": { "version": "8.15.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", @@ -4137,19 +2124,6 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "dev": true, - "engines": [ - "node >= 0.8.0" - ], - "peer": true, - "bin": { - "ansi-html": "bin/ansi-html" - } - }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -4174,28 +2148,19 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "peer": true, + "node_modules/apexcharts": { + "version": "3.54.1", + "resolved": "https://registry.npmjs.org/apexcharts/-/apexcharts-3.54.1.tgz", + "integrity": "sha512-E4et0h/J1U3r3EwS/WlqJCQIbepKbp6wGUmaAwJOMjHUP4Ci0gxanLa7FR3okx6p9coi4st6J853/Cb1NP0vpA==", + "license": "MIT", "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/are-docs-informative": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", - "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==", - "dev": true, - "peer": true, - "engines": { - "node": ">=14" + "@yr/monotone-cubic-spline": "^1.0.3", + "svg.draggable.js": "^2.2.2", + "svg.easing.js": "^2.0.0", + "svg.filter.js": "^2.0.2", + "svg.pathmorphing.js": "^0.1.3", + "svg.resize.js": "^1.4.3", + "svg.select.js": "^3.0.1" } }, "node_modules/argparse": { @@ -4204,53 +2169,6 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", - "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", - "dev": true, - "peer": true, - "dependencies": { - "call-bound": "^1.0.3", - "is-array-buffer": "^3.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true, - "peer": true - }, - "node_modules/array-includes": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", - "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.24.0", - "es-object-atoms": "^1.1.1", - "get-intrinsic": "^1.3.0", - "is-string": "^1.1.1", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -4260,88 +2178,6 @@ "node": ">=8" } }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", - "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.9", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "es-shim-unscopables": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", - "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", - "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", - "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", - "dev": true, - "peer": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "is-array-buffer": "^3.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", @@ -4352,55 +2188,6 @@ "node": ">=0.10.0" } }, - "node_modules/asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", - "dev": true, - "peer": true, - "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/asn1.js/node_modules/bn.js": { - "version": "4.12.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", - "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/asn1js": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.7.tgz", - "integrity": "sha512-uLvq6KJu04qoQM6gvBfKFjlh6Gl0vOKQuR5cJMDHQkmwfMOQeN3F3SHCv9SNYSL+CRoHvOGFfllDlVz03GQjvQ==", - "dev": true, - "peer": true, - "dependencies": { - "pvtsutils": "^1.3.6", - "pvutils": "^1.1.3", - "tslib": "^2.8.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/assert": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", - "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.2", - "is-nan": "^1.3.2", - "object-is": "^1.1.5", - "object.assign": "^4.1.4", - "util": "^0.12.5" - } - }, "node_modules/astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", @@ -4411,37 +2198,11 @@ "node": ">=8" } }, - "node_modules/async-function": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", - "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dev": true, - "peer": true, - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/axios": { "version": "1.13.5", "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.5.tgz", @@ -4452,23 +2213,6 @@ "proxy-from-env": "^1.1.0" } }, - "node_modules/babel-loader": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-10.0.0.tgz", - "integrity": "sha512-z8jt+EdS61AMw22nSfoNJAZ0vrtmhPRVi6ghL3rCeRZI8cdNYFiV5xeV3HbE7rlZZNmGH8BVccwWt8/ED0QOHA==", - "dev": true, - "peer": true, - "dependencies": { - "find-up": "^5.0.0" - }, - "engines": { - "node": "^18.20.0 || ^20.10.0 || >=22.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0", - "webpack": ">=5.61.0" - } - }, "node_modules/bail": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", @@ -4508,7 +2252,8 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "optional": true }, "node_modules/baseline-browser-mapping": { "version": "2.9.19", @@ -4519,13 +2264,6 @@ "baseline-browser-mapping": "dist/cli.js" } }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true, - "peer": true - }, "node_modules/big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", @@ -4535,19 +2273,6 @@ "node": "*" } }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/bindings": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", @@ -4610,110 +2335,26 @@ "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "node_modules/blurhash": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/blurhash/-/blurhash-2.0.5.tgz", - "integrity": "sha512-cRygWd7kGBQO3VEhPiTgq4Wc43ctsM+o46urrmPOiuAe+07fzlSB9OJVdpgDL0jPqXUVQ9ht7aq7kxOeJHRK+w==" - }, - "node_modules/bn.js": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.3.tgz", - "integrity": "sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/body-parser": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", - "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", - "dev": true, - "peer": true, - "dependencies": { - "bytes": "~3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "~1.2.0", - "http-errors": "~2.0.1", - "iconv-lite": "~0.4.24", - "on-finished": "~2.4.1", - "qs": "~6.14.0", - "raw-body": "~2.5.3", - "type-is": "~1.6.18", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "peer": true - }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.14.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz", - "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==", - "dev": true, - "peer": true, - "dependencies": { - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 6" } }, - "node_modules/bonjour-service": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", - "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", - "dev": true, - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true, - "peer": true + "node_modules/blurhash": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/blurhash/-/blurhash-2.0.5.tgz", + "integrity": "sha512-cRygWd7kGBQO3VEhPiTgq4Wc43ctsM+o46urrmPOiuAe+07fzlSB9OJVdpgDL0jPqXUVQ9ht7aq7kxOeJHRK+w==" }, "node_modules/brace-expansion": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "devOptional": true, + "optional": true, "dependencies": { "balanced-match": "^1.0.0" } @@ -4730,146 +2371,6 @@ "node": ">=8" } }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "dev": true, - "peer": true - }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "peer": true, - "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "peer": true, - "dependencies": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "node_modules/browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "peer": true, - "dependencies": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/browserify-rsa": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.1.tgz", - "integrity": "sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==", - "dev": true, - "peer": true, - "dependencies": { - "bn.js": "^5.2.1", - "randombytes": "^2.1.0", - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/browserify-sign": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.5.tgz", - "integrity": "sha512-C2AUdAJg6rlM2W5QMp2Q4KGQMVBwR1lIimTsUnutJ8bMpW5B52pGpR2gEnNBNwijumDo5FojQ0L9JrXA8m4YEw==", - "dev": true, - "peer": true, - "dependencies": { - "bn.js": "^5.2.2", - "browserify-rsa": "^4.1.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.6.1", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.9", - "readable-stream": "^2.3.8", - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/browserify-sign/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "peer": true - }, - "node_modules/browserify-sign/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "peer": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/browserify-sign/node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "peer": true - }, - "node_modules/browserify-sign/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "peer": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/browserify-sign/node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "peer": true - }, - "node_modules/browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, - "peer": true, - "dependencies": { - "pako": "~1.0.5" - } - }, "node_modules/browserslist": { "version": "4.28.1", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", @@ -4903,129 +2404,18 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "peer": true, - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "dev": true, - "peer": true - }, - "node_modules/builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", - "dev": true, - "peer": true - }, - "node_modules/builtins": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.1.0.tgz", - "integrity": "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==", - "dev": true, - "peer": true, - "dependencies": { - "semver": "^7.0.0" - } - }, - "node_modules/builtins/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "dev": true, - "peer": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/bundle-name": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", - "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", - "dev": true, - "peer": true, - "dependencies": { - "run-applescript": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/byte-length": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/byte-length/-/byte-length-1.0.2.tgz", "integrity": "sha512-ovBpjmsgd/teRmgcPh23d4gJvxDoXtAzEL9xTfMU8Yc2kqCDb7L9jAG0XHl1nzuGl+h3ebCIF1i62UFyA9V/2Q==", "optional": true }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/bytestreamjs": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bytestreamjs/-/bytestreamjs-2.0.1.tgz", - "integrity": "sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/cacache": { "version": "19.0.1", "resolved": "https://registry.npmjs.org/cacache/-/cacache-19.0.1.tgz", @@ -5082,25 +2472,6 @@ "license": "ISC", "optional": true }, - "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/call-bind-apply-helpers": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", @@ -5113,23 +2484,6 @@ "node": ">= 0.4" } }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -5251,22 +2605,6 @@ "node": "*" } }, - "node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "dev": true, - "peer": true, - "dependencies": { - "readdirp": "^4.0.1" - }, - "engines": { - "node": ">= 14.16.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, "node_modules/chownr": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", @@ -5287,21 +2625,6 @@ "node": ">=6.0" } }, - "node_modules/cipher-base": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.7.tgz", - "integrity": "sha512-Mz9QMT5fJe7bKI7MH31UilT5cEK5EHHRCccw/YRFsRY47AuNgaV6HY3rscp0/I4Q+tTW/5zoqpSeRRI54TkDWA==", - "dev": true, - "peer": true, - "dependencies": { - "inherits": "^2.0.4", - "safe-buffer": "^5.2.1", - "to-buffer": "^1.2.2" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/clamp": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/clamp/-/clamp-1.0.1.tgz", @@ -5386,88 +2709,12 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, - "node_modules/comment-parser": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz", - "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "peer": true, - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", - "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", - "dev": true, - "peer": true, - "dependencies": { - "bytes": "3.1.2", - "compressible": "~2.0.18", - "debug": "2.6.9", - "negotiator": "~0.6.4", - "on-headers": "~1.1.0", - "safe-buffer": "5.2.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "peer": true - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "dev": true, - "peer": true - }, "node_modules/consolidate": { "version": "0.15.1", "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz", @@ -5481,60 +2728,6 @@ "node": ">= 0.10.0" } }, - "node_modules/constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", - "dev": true, - "peer": true - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "peer": true, - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "peer": true - }, - "node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", - "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", - "dev": true, - "peer": true - }, "node_modules/core-js": { "version": "3.48.0", "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.48.0.tgz", @@ -5542,15 +2735,8 @@ "hasInstallScript": true, "funding": { "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true, - "peer": true + "url": "https://opencollective.com/core-js" + } }, "node_modules/cosmiconfig": { "version": "8.3.6", @@ -5579,54 +2765,6 @@ } } }, - "node_modules/create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "dev": true, - "peer": true, - "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - } - }, - "node_modules/create-ecdh/node_modules/bn.js": { - "version": "4.12.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", - "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "peer": true, - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "peer": true, - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -5649,33 +2787,6 @@ "node": "*" } }, - "node_modules/crypto-browserify": { - "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, - "peer": true, - "dependencies": { - "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" - }, - "engines": { - "node": ">= 0.10" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/css-functions-list": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.3.3.tgz", @@ -5773,60 +2884,6 @@ "node": ">= 12" } }, - "node_modules/data-view-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", - "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", - "dev": true, - "peer": true, - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", - "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", - "dev": true, - "peer": true, - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/inspect-js" - } - }, - "node_modules/data-view-byte-offset": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", - "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", - "dev": true, - "peer": true, - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/date-format-parse": { "version": "0.2.7", "resolved": "https://registry.npmjs.org/date-format-parse/-/date-format-parse-0.2.7.tgz", @@ -5961,85 +3018,6 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, - "node_modules/default-browser": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", - "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==", - "dev": true, - "peer": true, - "dependencies": { - "bundle-name": "^4.1.0", - "default-browser-id": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser-id": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", - "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", - "dev": true, - "peer": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, - "peer": true, - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-lazy-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, - "peer": true, - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -6048,16 +3026,6 @@ "node": ">=0.4.0" } }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/dequal": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", @@ -6066,28 +3034,6 @@ "node": ">=6" } }, - "node_modules/des.js": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", - "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", - "dev": true, - "peer": true, - "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, "node_modules/detect-libc": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", @@ -6098,13 +3044,6 @@ "node": ">=8" } }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true, - "peer": true - }, "node_modules/devlop": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", @@ -6117,26 +3056,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "peer": true, - "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "node_modules/diffie-hellman/node_modules/bn.js": { - "version": "4.12.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", - "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -6157,19 +3076,6 @@ "license": "MIT", "optional": true }, - "node_modules/dns-packet": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", - "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", - "dev": true, - "peer": true, - "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -6182,80 +3088,6 @@ "node": ">=6.0.0" } }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/dom-serializer/node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, - "license": "BSD-2-Clause", - "peer": true, - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/domain-browser": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-5.7.0.tgz", - "integrity": "sha512-edTFu0M/7wO1pXY6GDxVNVW086uqwWYIHP98txhcPyV995X21JIH2DtYp33sQJOupYoXKe9RwTw2Ya2vWaquTQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4" - }, - "funding": { - "url": "https://bevry.me/fund" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause", - "peer": true - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dev": true, - "license": "BSD-2-Clause", - "peer": true, - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, "node_modules/dompurify": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.3.3.tgz", @@ -6265,22 +3097,6 @@ "@types/trusted-types": "^2.0.7" } }, - "node_modules/domutils": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", - "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", - "dev": true, - "license": "BSD-2-Clause", - "peer": true, - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -6302,43 +3118,12 @@ "license": "MIT", "optional": true }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true, - "peer": true - }, "node_modules/electron-to-chromium": { "version": "1.5.286", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz", "integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==", "dev": true }, - "node_modules/elliptic": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", - "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", - "dev": true, - "peer": true, - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", - "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/emoji-mart-vue-fast": { "version": "15.0.5", "resolved": "https://registry.npmjs.org/emoji-mart-vue-fast/-/emoji-mart-vue-fast-15.0.5.tgz", @@ -6367,16 +3152,6 @@ "node": ">= 4" } }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/encoding": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", @@ -6479,75 +3254,6 @@ "is-arrayish": "^0.2.1" } }, - "node_modules/es-abstract": { - "version": "1.24.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.1.tgz", - "integrity": "sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==", - "dev": true, - "peer": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.2", - "arraybuffer.prototype.slice": "^1.0.4", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "data-view-buffer": "^1.0.2", - "data-view-byte-length": "^1.0.2", - "data-view-byte-offset": "^1.0.1", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "es-set-tostringtag": "^2.1.0", - "es-to-primitive": "^1.3.0", - "function.prototype.name": "^1.1.8", - "get-intrinsic": "^1.3.0", - "get-proto": "^1.0.1", - "get-symbol-description": "^1.1.0", - "globalthis": "^1.0.4", - "gopd": "^1.2.0", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "internal-slot": "^1.1.0", - "is-array-buffer": "^3.0.5", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.2", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.2.1", - "is-set": "^2.0.3", - "is-shared-array-buffer": "^1.0.4", - "is-string": "^1.1.1", - "is-typed-array": "^1.1.15", - "is-weakref": "^1.1.1", - "math-intrinsics": "^1.1.0", - "object-inspect": "^1.13.4", - "object-keys": "^1.1.1", - "object.assign": "^4.1.7", - "own-keys": "^1.0.1", - "regexp.prototype.flags": "^1.5.4", - "safe-array-concat": "^1.1.3", - "safe-push-apply": "^1.0.0", - "safe-regex-test": "^1.1.0", - "set-proto": "^1.0.0", - "stop-iteration-iterator": "^1.1.0", - "string.prototype.trim": "^1.2.10", - "string.prototype.trimend": "^1.0.9", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.3", - "typed-array-byte-length": "^1.0.3", - "typed-array-byte-offset": "^1.0.4", - "typed-array-length": "^1.0.7", - "unbox-primitive": "^1.1.0", - "which-typed-array": "^1.1.19" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/es-define-property": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", @@ -6581,49 +3287,18 @@ "node": ">= 0.4" } }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", - "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", - "dev": true, - "peer": true, - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-to-primitive": { - "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, - "peer": true, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "dependencies": { - "is-callable": "^1.2.7", - "is-date-object": "^1.0.5", - "is-symbol": "^1.0.4" + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/escalade": { @@ -6708,435 +3383,17 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint-compat-utils": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz", - "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==", - "dev": true, - "peer": true, - "dependencies": { - "semver": "^7.5.4" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "eslint": ">=6.0.0" - } - }, - "node_modules/eslint-compat-utils/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "dev": true, - "peer": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-config-standard": { - "version": "17.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz", - "integrity": "sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "peer": true, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "eslint": "^8.0.1", - "eslint-plugin-import": "^2.25.2", - "eslint-plugin-n": "^15.0.0 || ^16.0.0 ", - "eslint-plugin-promise": "^6.0.0" - } - }, "node_modules/eslint-import-resolver-alias": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/eslint-import-resolver-alias/-/eslint-import-resolver-alias-1.1.2.tgz", "integrity": "sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - }, - "peerDependencies": { - "eslint-plugin-import": ">=1.4.0" - } - }, - "node_modules/eslint-import-resolver-exports": { - "version": "1.0.0-beta.5", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-exports/-/eslint-import-resolver-exports-1.0.0-beta.5.tgz", - "integrity": "sha512-o6t0w7muUpXr7MkUVzD5igQoDfAQvTmcPp8HEAJdNF8eOuAO+yn6I/TTyMxz9ecCwzX7e02vzlkHURoScUuidg==", - "dev": true, - "peer": true, - "dependencies": { - "resolve.exports": "^2.0.0" - }, - "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", - "dev": true, - "peer": true, - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "peer": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-import-resolver-typescript": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.1.tgz", - "integrity": "sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==", - "dev": true, - "peer": true, - "dependencies": { - "@nolyfill/is-core-module": "1.0.39", - "debug": "^4.4.0", - "get-tsconfig": "^4.10.0", - "is-bun-module": "^2.0.0", - "stable-hash": "^0.0.5", - "tinyglobby": "^0.2.13", - "unrs-resolver": "^1.6.2" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint-import-resolver-typescript" - }, - "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*", - "eslint-plugin-import-x": "*" - }, - "peerDependenciesMeta": { - "eslint-plugin-import": { - "optional": true - }, - "eslint-plugin-import-x": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", - "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", - "dev": true, - "peer": true, - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "peer": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-es-x": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz", - "integrity": "sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==", - "dev": true, - "funding": [ - "https://github.com/sponsors/ota-meshi", - "https://opencollective.com/eslint" - ], - "peer": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.1.2", - "@eslint-community/regexpp": "^4.11.0", - "eslint-compat-utils": "^0.5.1" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": ">=8" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.32.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", - "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", - "dev": true, - "peer": true, - "dependencies": { - "@rtsao/scc": "^1.1.0", - "array-includes": "^3.1.9", - "array.prototype.findlastindex": "^1.2.6", - "array.prototype.flat": "^1.3.3", - "array.prototype.flatmap": "^1.3.3", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.12.1", - "hasown": "^2.0.2", - "is-core-module": "^2.16.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.8", - "object.groupby": "^1.0.3", - "object.values": "^1.2.1", - "semver": "^6.3.1", - "string.prototype.trimend": "^1.0.9", - "tsconfig-paths": "^3.15.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" - } - }, - "node_modules/eslint-plugin-import/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "peer": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "peer": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "peer": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/eslint-plugin-jsdoc": { - "version": "46.10.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-46.10.1.tgz", - "integrity": "sha512-x8wxIpv00Y50NyweDUpa+58ffgSAI5sqe+zcZh33xphD0AVh+1kqr1ombaTRb7Fhpove1zfUuujlX9DWWBP5ag==", - "dev": true, - "peer": true, - "dependencies": { - "@es-joy/jsdoccomment": "~0.41.0", - "are-docs-informative": "^0.0.2", - "comment-parser": "1.4.1", - "debug": "^4.3.4", - "escape-string-regexp": "^4.0.0", - "esquery": "^1.5.0", - "is-builtin-module": "^3.2.1", - "semver": "^7.5.4", - "spdx-expression-parse": "^4.0.0" - }, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" - } - }, - "node_modules/eslint-plugin-jsdoc/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "dev": true, - "peer": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-plugin-n": { - "version": "16.6.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.6.2.tgz", - "integrity": "sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==", - "dev": true, - "peer": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "builtins": "^5.0.1", - "eslint-plugin-es-x": "^7.5.0", - "get-tsconfig": "^4.7.0", - "globals": "^13.24.0", - "ignore": "^5.2.4", - "is-builtin-module": "^3.2.1", - "is-core-module": "^2.12.1", - "minimatch": "^3.1.2", - "resolve": "^1.22.2", - "semver": "^7.5.3" - }, - "engines": { - "node": ">=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-plugin-n/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "peer": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint-plugin-n/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "license": "ISC", - "peer": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/eslint-plugin-n/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "dev": true, - "peer": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-plugin-promise": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.6.0.tgz", - "integrity": "sha512-57Zzfw8G6+Gq7axm2Pdo3gW/Rx3h9Yywgn61uE/3elTCOePEHVrn2i5CdfBwA1BLK0Q0WqctICIUSqXZW/VprQ==", - "dev": true, - "peer": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" - } - }, - "node_modules/eslint-plugin-vue": { - "version": "9.33.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.33.0.tgz", - "integrity": "sha512-174lJKuNsuDIlLpjeXc5E2Tss8P44uIimAfGD0b90k0NoirJqpG7stLuU9Vp/9ioTOrQdWVREc4mRd1BD+CvGw==", - "dev": true, - "peer": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "globals": "^13.24.0", - "natural-compare": "^1.4.0", - "nth-check": "^2.1.1", - "postcss-selector-parser": "^6.0.15", - "semver": "^7.6.3", - "vue-eslint-parser": "^9.4.3", - "xml-name-validator": "^4.0.0" - }, - "engines": { - "node": "^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0" - } - }, - "node_modules/eslint-plugin-vue/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "dev": true, - "peer": true, - "bin": { - "semver": "bin/semver.js" - }, + "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 4" + }, + "peerDependencies": { + "eslint-plugin-import": ">=1.4.0" } }, "node_modules/eslint-scope": { @@ -7152,16 +3409,6 @@ "node": ">=8.0.0" } }, - "node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - } - }, "node_modules/eslint/node_modules/@eslint/eslintrc": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", @@ -7345,26 +3592,6 @@ "node": ">=0.10.0" } }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, "node_modules/eventemitter3": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", @@ -7379,17 +3606,6 @@ "node": ">=0.8.x" } }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "peer": true, - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, "node_modules/expand-template": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", @@ -7409,86 +3625,6 @@ "license": "Apache-2.0", "optional": true }, - "node_modules/express": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", - "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", - "dev": true, - "peer": true, - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "~1.20.3", - "content-disposition": "~0.5.4", - "content-type": "~1.0.4", - "cookie": "~0.7.1", - "cookie-signature": "~1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.3.1", - "fresh": "~0.5.2", - "http-errors": "~2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "~2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "~0.1.12", - "proxy-addr": "~2.0.7", - "qs": "~6.14.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "~0.19.0", - "serve-static": "~1.16.2", - "setprototypeof": "1.2.0", - "statuses": "~2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "peer": true - }, - "node_modules/express/node_modules/qs": { - "version": "6.14.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz", - "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==", - "dev": true, - "peer": true, - "dependencies": { - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -7572,26 +3708,6 @@ "path-expression-matcher": "^1.1.3" } }, - "node_modules/fast-xml-parser": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.4.tgz", - "integrity": "sha512-jE8ugADnYOBsu1uaoayVl1tVKAMNOXyjwvv2U6udEA2ORBhDooJDWoGxTkhd4Qn4yh59JVVt/pKXtjPwx9OguQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "strnum": "^1.0.5" - }, - "bin": { - "fxparser": "src/cli/cli.js" - } - }, "node_modules/fastest-levenshtein": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", @@ -7610,19 +3726,6 @@ "reusify": "^1.0.4" } }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, - "peer": true, - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/fetch-blob": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", @@ -7678,42 +3781,6 @@ "node": ">=8" } }, - "node_modules/finalhandler": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", - "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", - "dev": true, - "peer": true, - "dependencies": { - "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.2", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "peer": true - }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -7811,22 +3878,6 @@ } } }, - "node_modules/for-each": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", - "dev": true, - "peer": true, - "dependencies": { - "is-callable": "^1.2.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/foreground-child": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", @@ -7872,26 +3923,6 @@ "node": ">=12.20.0" } }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", @@ -7920,21 +3951,6 @@ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -7943,57 +3959,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/function.prototype.name": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", - "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "functions-have-names": "^1.2.3", - "hasown": "^2.0.2", - "is-callable": "^1.2.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "peer": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/generator-function": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", - "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/get-intrinsic": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", @@ -8029,37 +3994,6 @@ "node": ">= 0.4" } }, - "node_modules/get-symbol-description": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", - "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", - "dev": true, - "peer": true, - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-tsconfig": { - "version": "4.13.6", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.6.tgz", - "integrity": "sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==", - "dev": true, - "peer": true, - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, "node_modules/github-from-package": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", @@ -8101,23 +4035,6 @@ "node": ">=10.13.0" } }, - "node_modules/glob-to-regex.js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/glob-to-regex.js/-/glob-to-regex.js-1.2.0.tgz", - "integrity": "sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, "node_modules/glob-to-regexp": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", @@ -8203,23 +4120,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", - "dev": true, - "peer": true, - "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -8286,13 +4186,6 @@ ], "license": "MIT" }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true, - "peer": true - }, "node_modules/hard-rejection": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", @@ -8303,19 +4196,6 @@ "node": ">=6" } }, - "node_modules/has-bigints": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", - "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -8325,35 +4205,6 @@ "node": ">=8" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, - "peer": true, - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", - "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", - "dev": true, - "peer": true, - "dependencies": { - "dunder-proto": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/has-symbols": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", @@ -8379,37 +4230,12 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hash-base": { - "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, - "peer": true, - "dependencies": { - "inherits": "^2.0.4", - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/hash-sum": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", "dev": true }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "peer": true, - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -8496,18 +4322,6 @@ "node": ">=12.0.0" } }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "dev": true, - "peer": true, - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, "node_modules/hosted-git-info": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", @@ -8531,74 +4345,21 @@ "yallist": "^4.0.0" }, "engines": { - "node": ">=10" - } - }, - "node_modules/hosted-git-info/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, - "node_modules/hot-patcher": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hot-patcher/-/hot-patcher-2.0.1.tgz", - "integrity": "sha512-ECg1JFG0YzehicQaogenlcs2qg6WsXQsxtnbr1i696u5tLUjtJdQAh0u2g0Q5YV45f263Ta1GnUJsc8WIfJf4Q==", - "optional": true - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dev": true, - "peer": true, - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hpack.js/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "peer": true - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "peer": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "node": ">=10" } }, - "node_modules/hpack.js/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "node_modules/hosted-git-info/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true, - "peer": true + "license": "ISC" }, - "node_modules/hpack.js/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "peer": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } + "node_modules/hot-patcher": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hot-patcher/-/hot-patcher-2.0.1.tgz", + "integrity": "sha512-ECg1JFG0YzehicQaogenlcs2qg6WsXQsxtnbr1i696u5tLUjtJdQAh0u2g0Q5YV45f263Ta1GnUJsc8WIfJf4Q==", + "optional": true }, "node_modules/html-tags": { "version": "3.3.1", @@ -8613,41 +4374,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - }, - "node_modules/htmlparser2/node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, - "license": "BSD-2-Clause", - "peer": true, - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, "node_modules/http-cache-semantics": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", @@ -8656,56 +4382,6 @@ "license": "BSD-2-Clause", "optional": true }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "dev": true, - "peer": true - }, - "node_modules/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", - "dev": true, - "peer": true, - "dependencies": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/http-parser-js": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", - "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", - "dev": true, - "peer": true - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "peer": true, - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, "node_modules/http-proxy-agent": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", @@ -8721,58 +4397,6 @@ "node": ">= 14" } }, - "node_modules/http-proxy-middleware": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", - "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", - "dev": true, - "peer": true, - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } - } - }, - "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/http-proxy/node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true, - "peer": true - }, - "node_modules/https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", - "dev": true, - "peer": true - }, "node_modules/https-proxy-agent": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", @@ -8788,29 +4412,6 @@ "node": ">= 14" } }, - "node_modules/hyperdyperid": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", - "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10.18" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "peer": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/icss-utils": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", @@ -8841,7 +4442,8 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "optional": true }, "node_modules/ignore": { "version": "5.3.2", @@ -8852,14 +4454,6 @@ "node": ">= 4" } }, - "node_modules/immutable": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.5.tgz", - "integrity": "sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/import-fresh": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", @@ -8956,21 +4550,6 @@ "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" }, - "node_modules/internal-slot": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", - "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", - "dev": true, - "peer": true, - "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.2", - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/interpret": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", @@ -8991,16 +4570,6 @@ "node": ">= 12" } }, - "node_modules/ipaddr.js": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.3.0.tgz", - "integrity": "sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 10" - } - }, "node_modules/is-absolute-url": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-4.0.1.tgz", @@ -9009,216 +4578,28 @@ "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-arguments": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", - "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", - "dev": true, - "peer": true, - "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", - "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-async-function": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", - "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", - "dev": true, - "peer": true, - "dependencies": { - "async-function": "^1.0.0", - "call-bound": "^1.0.3", - "get-proto": "^1.0.1", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", - "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", - "dev": true, - "peer": true, - "dependencies": { - "has-bigints": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "peer": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", - "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", - "dev": true, - "peer": true, - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "node_modules/is-builtin-module": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", - "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", - "dev": true, - "peer": true, - "dependencies": { - "builtin-modules": "^3.3.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-bun-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz", - "integrity": "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==", - "dev": true, - "peer": true, - "dependencies": { - "semver": "^7.7.1" - } - }, - "node_modules/is-bun-module/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "dev": true, - "peer": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-view": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", - "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", - "dev": true, - "peer": true, - "dependencies": { - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-date-object": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", - "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "dev": true, - "peer": true, "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -9227,22 +4608,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-docker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", - "dev": true, - "peer": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -9252,22 +4617,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-finalizationregistry": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", - "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", - "dev": true, - "peer": true, - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -9278,26 +4627,6 @@ "node": ">=8" } }, - "node_modules/is-generator-function": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", - "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", - "dev": true, - "peer": true, - "dependencies": { - "call-bound": "^1.0.4", - "generator-function": "^2.0.0", - "get-proto": "^1.0.1", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -9310,81 +4639,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-inside-container": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", - "dev": true, - "peer": true, - "dependencies": { - "is-docker": "^3.0.0" - }, - "bin": { - "is-inside-container": "cli.js" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/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, - "peer": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-nan": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", - "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-network-error": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.3.0.tgz", - "integrity": "sha512-6oIwpsgRfnDiyEDLMay/GqCl3HoAtH5+RUKW29gYkL0QA+ipzpDLA16yQs7/RHCSu+BwgbJaOUqa4A99qNVQVw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -9394,23 +4648,6 @@ "node": ">=0.12.0" } }, - "node_modules/is-number-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", - "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", - "dev": true, - "peer": true, - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", @@ -9443,71 +4680,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, - "peer": true, - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/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, - "peer": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", - "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", - "dev": true, - "peer": true, - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-string": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", - "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", - "dev": true, - "peer": true, - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-svg": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-6.1.0.tgz", @@ -9522,109 +4694,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-symbol": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", - "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", - "dev": true, - "peer": true, - "dependencies": { - "call-bound": "^1.0.2", - "has-symbols": "^1.1.0", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", - "dev": true, - "peer": true, - "dependencies": { - "which-typed-array": "^1.1.16" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/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, - "peer": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakref": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", - "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", - "dev": true, - "peer": true, - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", - "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", - "dev": true, - "peer": true, - "dependencies": { - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-wsl": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", - "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", - "dev": true, - "peer": true, - "dependencies": { - "is-inside-container": "^1.0.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true, - "peer": true - }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -9704,29 +4773,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jsdoc-type-pratt-parser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz", - "integrity": "sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/jsesc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", - "dev": true, - "peer": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", @@ -9751,19 +4797,6 @@ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "peer": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -9785,20 +4818,9 @@ "node_modules/known-css-properties": { "version": "0.29.0", "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz", - "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/launch-editor": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.13.0.tgz", - "integrity": "sha512-u+9asUHMJ99lA15VRMXw5XKfySFR9dGXwgsgS14YTbUq3GITP58mIM32At90P5fZ+MUId5Yw+IwI/yKub7jnCQ==", - "dev": true, - "peer": true, - "dependencies": { - "picocolors": "^1.1.1", - "shell-quote": "^1.8.3" - } + "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==", + "dev": true, + "license": "MIT" }, "node_modules/layerr": { "version": "3.0.0", @@ -9873,12 +4895,6 @@ "linkifyjs": "^4.0.0" } }, - "node_modules/linkifyjs": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/linkifyjs/-/linkifyjs-4.3.2.tgz", - "integrity": "sha512-NT1CJtq3hHIreOianA8aSXn6Cw0JzYOuDQbOrSPe7gqFnCpKP++MQe3ODgO3oh2GJFORkAAdqredOa60z63GbA==", - "peer": true - }, "node_modules/loader-runner": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz", @@ -9933,13 +4949,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lodash": { - "version": "4.17.23", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", - "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", - "dev": true, - "peer": true - }, "node_modules/lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", @@ -9978,16 +4987,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "peer": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, "node_modules/make-fetch-happen": { "version": "14.0.3", "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-14.0.3.tgz", @@ -10070,18 +5069,6 @@ "is-buffer": "~1.1.6" } }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "peer": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, "node_modules/mdast-squeeze-paragraphs": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-6.0.0.tgz", @@ -10196,46 +5183,6 @@ "dev": true, "license": "CC0-1.0" }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memfs": { - "version": "4.56.10", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.56.10.tgz", - "integrity": "sha512-eLvzyrwqLHnLYalJP7YZ3wBe79MXktMdfQbvMrVD80K+NhrIukCVBvgP30zTJYEEDh9hZ/ep9z0KOdD7FSHo7w==", - "dev": true, - "peer": true, - "dependencies": { - "@jsonjoy.com/fs-core": "4.56.10", - "@jsonjoy.com/fs-fsa": "4.56.10", - "@jsonjoy.com/fs-node": "4.56.10", - "@jsonjoy.com/fs-node-builtins": "4.56.10", - "@jsonjoy.com/fs-node-to-fsa": "4.56.10", - "@jsonjoy.com/fs-node-utils": "4.56.10", - "@jsonjoy.com/fs-print": "4.56.10", - "@jsonjoy.com/fs-snapshot": "4.56.10", - "@jsonjoy.com/json-pack": "^1.11.0", - "@jsonjoy.com/util": "^1.9.0", - "glob-to-regex.js": "^1.0.1", - "thingies": "^2.5.0", - "tree-dump": "^1.0.3", - "tslib": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, "node_modules/meow": { "version": "10.1.5", "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz", @@ -10276,16 +5223,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", - "dev": true, - "peer": true, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/merge-source-map": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", @@ -10319,16 +5256,6 @@ "node": ">= 8" } }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/mgrs": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/mgrs/-/mgrs-1.0.0.tgz", @@ -10769,41 +5696,6 @@ "node": ">=8.6" } }, - "node_modules/miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "peer": true, - "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "bin": { - "miller-rabin": "bin/miller-rabin" - } - }, - "node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.12.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", - "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "peer": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -10837,26 +5729,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true, - "peer": true - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "dev": true, - "peer": true - }, "node_modules/minimatch": { "version": "9.0.9", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", - "devOptional": true, "license": "ISC", + "optional": true, "dependencies": { "brace-expansion": "^2.0.2" }, @@ -11088,20 +5966,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "dev": true, - "peer": true, - "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, "node_modules/nan": { "version": "2.22.2", "resolved": "https://registry.npmjs.org/nan/-/nan-2.22.2.tgz", @@ -11135,22 +5999,6 @@ "license": "MIT", "optional": true }, - "node_modules/napi-postinstall": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz", - "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==", - "dev": true, - "peer": true, - "bin": { - "napi-postinstall": "lib/cli.js" - }, - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/napi-postinstall" - } - }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -11181,16 +6029,6 @@ "url": "https://nearley.js.org/#give-to-nearley" } }, - "node_modules/negotiator": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", - "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", @@ -11231,14 +6069,6 @@ "node": ">=10" } }, - "node_modules/node-addon-api": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", - "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", - "dev": true, - "optional": true, - "peer": true - }, "node_modules/node-domexception": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", @@ -11353,58 +6183,6 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/node-polyfill-webpack-plugin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/node-polyfill-webpack-plugin/-/node-polyfill-webpack-plugin-4.0.0.tgz", - "integrity": "sha512-WLk77vLpbcpmTekRj6s6vYxk30XoyaY5MDZ4+9g8OaKoG3Ij+TjOqhpQjVUlfDZBPBgpNATDltaQkzuXSnnkwg==", - "dev": true, - "peer": true, - "dependencies": { - "assert": "^2.1.0", - "browserify-zlib": "^0.2.0", - "buffer": "^6.0.3", - "console-browserify": "^1.2.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.12.0", - "domain-browser": "^5.7.0", - "events": "^3.3.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "^1.0.1", - "process": "^0.11.10", - "punycode": "^2.3.1", - "querystring-es3": "^0.2.1", - "readable-stream": "^4.5.2", - "stream-browserify": "^3.0.0", - "stream-http": "^3.2.0", - "string_decoder": "^1.3.0", - "timers-browserify": "^2.0.12", - "tty-browserify": "^0.0.1", - "type-fest": "^4.18.2", - "url": "^0.11.3", - "util": "^0.12.5", - "vm-browserify": "^1.1.2" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "webpack": ">=5" - } - }, - "node_modules/node-polyfill-webpack-plugin/node_modules/type-fest": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/node-releases": { "version": "2.0.27", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", @@ -11466,163 +6244,6 @@ "node": ">=0.10.0" } }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "peer": true, - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-is": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", - "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", - "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0", - "has-symbols": "^1.1.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.groupby": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", - "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.values": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", - "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true, - "peer": true - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "peer": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", - "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -11632,25 +6253,6 @@ "wrappy": "1" } }, - "node_modules/open": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", - "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", - "dev": true, - "peer": true, - "dependencies": { - "default-browser": "^5.2.1", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", - "wsl-utils": "^0.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -11668,31 +6270,6 @@ "node": ">= 0.8.0" } }, - "node_modules/os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", - "dev": true, - "peer": true - }, - "node_modules/own-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", - "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", - "dev": true, - "peer": true, - "dependencies": { - "get-intrinsic": "^1.2.6", - "object-keys": "^1.1.1", - "safe-push-apply": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -11752,24 +6329,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-retry": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.1.tgz", - "integrity": "sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==", - "dev": true, - "peer": true, - "dependencies": { - "@types/retry": "0.12.2", - "is-network-error": "^1.0.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/p-timeout": { "version": "6.1.4", "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz", @@ -11805,13 +6364,6 @@ "dev": true, "license": "MIT" }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true, - "peer": true - }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -11824,23 +6376,6 @@ "node": ">=6" } }, - "node_modules/parse-asn1": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.9.tgz", - "integrity": "sha512-fIYNuZ/HastSb80baGOuPRo1O9cf4baWw5WsAp7dBuUzeTD/BoaG8sVTdlPFksBE2lF21dN+A1AnrpIjSWqHHg==", - "dev": true, - "peer": true, - "dependencies": { - "asn1.js": "^4.10.1", - "browserify-aes": "^1.2.0", - "evp_bytestokey": "^1.0.3", - "pbkdf2": "^3.1.5", - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -11860,23 +6395,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true, - "peer": true - }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -11958,38 +6476,13 @@ "license": "ISC", "optional": true }, - "node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", - "dev": true, - "peer": true - }, "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pbkdf2": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.5.tgz", - "integrity": "sha512-Q3CG/cYvCO1ye4QKkuH7EXxs3VC/rI1/trd+qX2+PolbaKG0H+bgcZzrTt96mMyRtejk+JMCiLUn3y29W8qmFQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, - "peer": true, - "dependencies": { - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "ripemd160": "^2.0.3", - "safe-buffer": "^5.2.1", - "sha.js": "^2.4.12", - "to-buffer": "^1.2.1" - }, "engines": { - "node": ">= 0.10" + "node": ">=8" } }, "node_modules/picocolors": { @@ -12119,34 +6612,6 @@ "node": ">=8" } }, - "node_modules/pkijs": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/pkijs/-/pkijs-3.3.3.tgz", - "integrity": "sha512-+KD8hJtqQMYoTuL1bbGOqxb4z+nZkTAwVdNtWwe8Tc2xNbEmdJYIYoc6Qt0uF55e6YW6KuTHw1DjQ18gMhzepw==", - "dev": true, - "peer": true, - "dependencies": { - "@noble/hashes": "1.4.0", - "asn1js": "^3.0.6", - "bytestreamjs": "^2.0.1", - "pvtsutils": "^1.3.6", - "pvutils": "^1.1.3", - "tslib": "^2.8.1" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/possible-typed-array-names": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", - "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/postcss": { "version": "8.5.6", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", @@ -12174,39 +6639,6 @@ "node": "^10 || ^12 || >=14" } }, - "node_modules/postcss-html": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-1.8.1.tgz", - "integrity": "sha512-OLF6P7qctfAWayOhLpcVnTGqVeJzu2W3WpIYelfz2+JV5oGxfkcEvweN9U4XpeqE0P98dcD9ssusGwlF0TK0uQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "htmlparser2": "^8.0.0", - "js-tokens": "^9.0.0", - "postcss": "^8.5.0", - "postcss-safe-parser": "^6.0.0" - }, - "engines": { - "node": "^12 || >=14" - } - }, - "node_modules/postcss-html/node_modules/js-tokens": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", - "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/postcss-media-query-parser": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", - "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/postcss-modules-extract-imports": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", @@ -12316,34 +6748,6 @@ "postcss": "^8.3.3" } }, - "node_modules/postcss-scss": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz", - "integrity": "sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss-scss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "peer": true, - "engines": { - "node": ">=12.0" - }, - "peerDependencies": { - "postcss": "^8.4.29" - } - }, "node_modules/postcss-selector-parser": { "version": "6.1.2", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", @@ -12427,23 +6831,6 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true, - "peer": true - }, "node_modules/proj4": { "version": "2.20.4", "resolved": "https://registry.npmjs.org/proj4/-/proj4-2.20.4.tgz", @@ -12492,30 +6879,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "peer": true, - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-addr/node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -12527,29 +6890,6 @@ "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", "dev": true }, - "node_modules/public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "peer": true, - "dependencies": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/public-encrypt/node_modules/bn.js": { - "version": "4.12.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", - "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/pump": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", @@ -12571,52 +6911,6 @@ "node": ">=6" } }, - "node_modules/pvtsutils": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.6.tgz", - "integrity": "sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==", - "dev": true, - "peer": true, - "dependencies": { - "tslib": "^2.8.1" - } - }, - "node_modules/pvutils": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.5.tgz", - "integrity": "sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/qs": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz", - "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==", - "dev": true, - "peer": true, - "dependencies": { - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.4.x" - } - }, "node_modules/querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", @@ -12679,53 +6973,6 @@ "node": ">=0.12" } }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "peer": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "peer": true, - "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", - "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", - "dev": true, - "peer": true, - "dependencies": { - "bytes": "~3.1.2", - "http-errors": "~2.0.1", - "iconv-lite": "~0.4.24", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -12817,37 +7064,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/readable-stream": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", - "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", - "dev": true, - "peer": true, - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 14.18.0" - }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - }, "node_modules/rechoir": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", @@ -12877,57 +7093,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/reflect-metadata": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", - "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", - "dev": true, - "peer": true - }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", - "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.9", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.7", - "get-proto": "^1.0.1", - "which-builtin-type": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", - "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "set-function-name": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/rehype-external-links": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/rehype-external-links/-/rehype-external-links-3.0.0.tgz", @@ -13137,21 +7302,11 @@ "node": ">=0.10.0" } }, - "node_modules/requireindex": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", - "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.5" - } - }, "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "devOptional": true + "optional": true }, "node_modules/resolve": { "version": "1.22.11", @@ -13203,161 +7358,41 @@ "node": ">=4" } }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "dev": true, - "peer": true, - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" - } - }, - "node_modules/resolve.exports": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", - "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - } - }, "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/ripemd160": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.3.tgz", - "integrity": "sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA==", - "dev": true, - "peer": true, - "dependencies": { - "hash-base": "^3.1.2", - "inherits": "^2.0.4" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/ripemd160/node_modules/hash-base": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.2.tgz", - "integrity": "sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg==", - "dev": true, - "peer": true, - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^2.3.8", - "safe-buffer": "^5.2.1", - "to-buffer": "^1.2.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/ripemd160/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "peer": true - }, - "node_modules/ripemd160/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "peer": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/ripemd160/node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "peer": true - }, - "node_modules/ripemd160/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", "dev": true, - "peer": true, - "dependencies": { - "safe-buffer": "~5.1.0" + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.12" } }, - "node_modules/ripemd160/node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "dev": true, - "peer": true + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } }, - "node_modules/run-applescript": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", - "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, - "peer": true, - "engines": { - "node": ">=18" + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/run-parallel": { @@ -13383,26 +7418,6 @@ "queue-microtask": "^1.2.2" } }, - "node_modules/safe-array-concat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", - "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "has-symbols": "^1.1.0", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -13421,76 +7436,22 @@ "type": "consulting", "url": "https://feross.org/support" } - ] - }, - "node_modules/safe-push-apply": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", - "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", - "dev": true, - "peer": true, - "dependencies": { - "es-errors": "^1.3.0", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-regex-test": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", - "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", - "dev": true, - "peer": true, - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-regex": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + ], + "optional": true }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/sass": { - "version": "1.97.3", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.97.3.tgz", - "integrity": "sha512-fDz1zJpd5GycprAbu4Q2PV/RprsRtKC/0z82z0JLgdytmcq0+ujJbJ/09bPGDxCLkKY3Np5cRAOcWiVkLXJURg==", "dev": true, - "peer": true, - "dependencies": { - "chokidar": "^4.0.0", - "immutable": "^5.0.2", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=14.0.0" - }, - "optionalDependencies": { - "@parcel/watcher": "^2.4.1" - } + "optional": true }, "node_modules/sass-loader": { "version": "16.0.7", "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.7.tgz", "integrity": "sha512-w6q+fRHourZ+e+xA1kcsF27iGM6jdB8teexYCfdUw0sYgcDNeZESnDNT9sUmmPm3ooziwUJXGwZJSTF3kOdBfA==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { "neo-async": "^2.6.2" }, @@ -13584,390 +7545,51 @@ "node_modules/schema-utils/node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/schemes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/schemes/-/schemes-1.4.0.tgz", - "integrity": "sha512-ImFy9FbCsQlVgnE3TCWmLPCFnVzx0lHL/l+umHplDqAKd0dzFpnS6lFZIpagBlYhKwzVmlV36ec0Y1XTu8JBAQ==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "extend": "^3.0.0" - } - }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "dev": true, - "peer": true - }, - "node_modules/selfsigned": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-5.5.0.tgz", - "integrity": "sha512-ftnu3TW4+3eBfLRFnDEkzGxSF/10BJBkaLJuBHZX0kiPS7bRdlpZGu6YGt4KngMkdTwJE6MbjavFpqHvqVt+Ew==", - "dev": true, - "peer": true, - "dependencies": { - "@peculiar/x509": "^1.14.2", - "pkijs": "^3.3.3" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "peer": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/send": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", - "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", - "dev": true, - "peer": true, - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "~0.5.2", - "http-errors": "~2.0.1", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "~2.4.1", - "range-parser": "~1.2.1", - "statuses": "~2.0.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "peer": true - }, - "node_modules/serve-index": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.2.tgz", - "integrity": "sha512-KDj11HScOaLmrPxl70KYNW1PksP4Nb/CLL2yvC+Qd2kHMPEEpfc4Re2e4FOay+bC/+XQl/7zAcWON3JVo5v3KQ==", - "dev": true, - "peer": true, - "dependencies": { - "accepts": "~1.3.8", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.8.0", - "mime-types": "~2.1.35", - "parseurl": "~1.3.3" - }, - "engines": { - "node": ">= 0.8.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "peer": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", - "dev": true, - "peer": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "peer": true - }, - "node_modules/serve-index/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-static": { - "version": "1.16.3", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", - "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", - "dev": true, - "peer": true, - "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "~0.19.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dev": true, - "peer": true, - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-function-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", - "dev": true, - "peer": true, - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-proto": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", - "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", - "dev": true, - "peer": true, - "dependencies": { - "dunder-proto": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true, - "peer": true - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true, - "peer": true - }, - "node_modules/sha.js": { - "version": "2.4.12", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz", - "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", - "dev": true, - "peer": true, - "dependencies": { - "inherits": "^2.0.4", - "safe-buffer": "^5.2.1", - "to-buffer": "^1.2.0" - }, - "bin": { - "sha.js": "bin.js" - }, - "engines": { - "node": ">= 0.10" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", - "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true }, - "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "node_modules/schemes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/schemes/-/schemes-1.4.0.tgz", + "integrity": "sha512-ImFy9FbCsQlVgnE3TCWmLPCFnVzx0lHL/l+umHplDqAKd0dzFpnS6lFZIpagBlYhKwzVmlV36ec0Y1XTu8JBAQ==", "dev": true, - "peer": true, + "license": "MIT", + "optional": true, "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "extend": "^3.0.0" } }, - "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, - "peer": true, "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" + "kind-of": "^6.0.2" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, - "peer": true, "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" + "shebang-regex": "^3.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, - "peer": true, - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, "node_modules/signal-exit": { @@ -14085,18 +7707,6 @@ "node": ">=0.10" } }, - "node_modules/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "dev": true, - "peer": true, - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, "node_modules/socks": { "version": "2.8.7", "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", @@ -14129,16 +7739,6 @@ "node": ">= 14" } }, - "node_modules/source-map": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", - "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 12" - } - }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -14219,53 +7819,6 @@ "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==", "dev": true }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dev": true, - "peer": true, - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dev": true, - "peer": true, - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/spdy-transport/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "peer": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/splitpanes": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/splitpanes/-/splitpanes-2.4.1.tgz", @@ -14285,96 +7838,12 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/stable-hash": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz", - "integrity": "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==", - "dev": true, - "peer": true - }, - "node_modules/statuses": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/stop-iteration-iterator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", - "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", - "dev": true, - "peer": true, - "dependencies": { - "es-errors": "^1.3.0", - "internal-slot": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/stream-browserify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", - "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", - "dev": true, - "peer": true, - "dependencies": { - "inherits": "~2.0.4", - "readable-stream": "^3.5.0" - } - }, - "node_modules/stream-browserify/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "peer": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/stream-http": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", - "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", - "dev": true, - "peer": true, - "dependencies": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "xtend": "^4.0.2" - } - }, - "node_modules/stream-http/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "peer": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, + "optional": true, "dependencies": { "safe-buffer": "~5.2.0" } @@ -14451,65 +7920,6 @@ "node": ">=8" } }, - "node_modules/string.prototype.trim": { - "version": "1.2.10", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", - "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "define-data-property": "^1.1.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-object-atoms": "^1.0.0", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", - "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -14537,16 +7947,6 @@ "node": ">=8" } }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, "node_modules/strip-indent": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.1.1.tgz", @@ -14577,19 +7977,6 @@ "resolved": "https://registry.npmjs.org/striptags/-/striptags-3.2.0.tgz", "integrity": "sha512-g45ZOGzHDMe2bdYMdIvdAfCQkCTDMGBazSw1ypMowwGIee7ZQ5dU0rBJ8Jqgl+jAKIv4dbeE1jscZq9wid1Tkw==" }, - "node_modules/strnum": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.1.2.tgz", - "integrity": "sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "peer": true - }, "node_modules/strtok3": { "version": "10.3.4", "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-10.3.4.tgz", @@ -14679,129 +8066,20 @@ "string-width": "^4.2.3", "strip-ansi": "^6.0.1", "style-search": "^0.1.0", - "supports-hyperlinks": "^3.0.0", - "svg-tags": "^1.0.0", - "table": "^6.8.1", - "write-file-atomic": "^5.0.1" - }, - "bin": { - "stylelint": "bin/stylelint.mjs" - }, - "engines": { - "node": "^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/stylelint" - } - }, - "node_modules/stylelint-config-html": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stylelint-config-html/-/stylelint-config-html-1.1.0.tgz", - "integrity": "sha512-IZv4IVESjKLumUGi+HWeb7skgO6/g4VMuAYrJdlqQFndgbj6WJAXPhaysvBiXefX79upBdQVumgYcdd17gCpjQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": "^12 || >=14" - }, - "funding": { - "url": "https://github.com/sponsors/ota-meshi" - }, - "peerDependencies": { - "postcss-html": "^1.0.0", - "stylelint": ">=14.0.0" - } - }, - "node_modules/stylelint-config-recommended": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-13.0.0.tgz", - "integrity": "sha512-EH+yRj6h3GAe/fRiyaoO2F9l9Tgg50AOFhaszyfov9v6ayXJ1IkSHwTxd7lB48FmOeSGDPLjatjO11fJpmarkQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": "^14.13.1 || >=16.0.0" - }, - "peerDependencies": { - "stylelint": "^15.10.0" - } - }, - "node_modules/stylelint-config-recommended-scss": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-13.1.0.tgz", - "integrity": "sha512-8L5nDfd+YH6AOoBGKmhH8pLWF1dpfY816JtGMePcBqqSsLU+Ysawx44fQSlMOJ2xTfI9yTGpup5JU77c17w1Ww==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "postcss-scss": "^4.0.9", - "stylelint-config-recommended": "^13.0.0", - "stylelint-scss": "^5.3.0" - }, - "peerDependencies": { - "postcss": "^8.3.3", - "stylelint": "^15.10.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - } - } - }, - "node_modules/stylelint-config-recommended-vue": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended-vue/-/stylelint-config-recommended-vue-1.6.1.tgz", - "integrity": "sha512-lLW7hTIMBiTfjenGuDq2kyHA6fBWd/+Df7MO4/AWOxiFeXP9clbpKgg27kHfwA3H7UNMGC7aeP3mNlZB5LMmEQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "semver": "^7.3.5", - "stylelint-config-html": ">=1.0.0", - "stylelint-config-recommended": ">=6.0.0" - }, - "engines": { - "node": "^12 || >=14" - }, - "funding": { - "url": "https://github.com/sponsors/ota-meshi" - }, - "peerDependencies": { - "postcss-html": "^1.0.0", - "stylelint": ">=14.0.0" - } - }, - "node_modules/stylelint-config-recommended-vue/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "dev": true, - "license": "ISC", - "peer": true, + "supports-hyperlinks": "^3.0.0", + "svg-tags": "^1.0.0", + "table": "^6.8.1", + "write-file-atomic": "^5.0.1" + }, "bin": { - "semver": "bin/semver.js" + "stylelint": "bin/stylelint.mjs" }, "engines": { - "node": ">=10" - } - }, - "node_modules/stylelint-scss": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-5.3.2.tgz", - "integrity": "sha512-4LzLaayFhFyneJwLo0IUa8knuIvj+zF0vBFueQs4e3tEaAMIQX8q5th8ziKkgOavr6y/y9yoBe+RXN/edwLzsQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "known-css-properties": "^0.29.0", - "postcss-media-query-parser": "^0.2.3", - "postcss-resolve-nested-selector": "^0.1.1", - "postcss-selector-parser": "^6.0.13", - "postcss-value-parser": "^4.2.0" + "node": "^14.13.1 || >=16.0.0" }, - "peerDependencies": { - "stylelint": "^14.5.1 || ^15.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" } }, "node_modules/stylelint/node_modules/balanced-match": { @@ -14891,6 +8169,97 @@ "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", "dev": true }, + "node_modules/svg.draggable.js": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/svg.draggable.js/-/svg.draggable.js-2.2.2.tgz", + "integrity": "sha512-JzNHBc2fLQMzYCZ90KZHN2ohXL0BQJGQimK1kGk6AvSeibuKcIdDX9Kr0dT9+UJ5O8nYA0RB839Lhvk4CY4MZw==", + "license": "MIT", + "dependencies": { + "svg.js": "^2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/svg.easing.js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/svg.easing.js/-/svg.easing.js-2.0.0.tgz", + "integrity": "sha512-//ctPdJMGy22YoYGV+3HEfHbm6/69LJUTAqI2/5qBvaNHZ9uUFVC82B0Pl299HzgH13rKrBgi4+XyXXyVWWthA==", + "license": "MIT", + "dependencies": { + "svg.js": ">=2.3.x" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/svg.filter.js": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/svg.filter.js/-/svg.filter.js-2.0.2.tgz", + "integrity": "sha512-xkGBwU+dKBzqg5PtilaTb0EYPqPfJ9Q6saVldX+5vCRy31P6TlRCP3U9NxH3HEufkKkpNgdTLBJnmhDHeTqAkw==", + "license": "MIT", + "dependencies": { + "svg.js": "^2.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/svg.js": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/svg.js/-/svg.js-2.7.1.tgz", + "integrity": "sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA==", + "license": "MIT" + }, + "node_modules/svg.pathmorphing.js": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/svg.pathmorphing.js/-/svg.pathmorphing.js-0.1.3.tgz", + "integrity": "sha512-49HWI9X4XQR/JG1qXkSDV8xViuTLIWm/B/7YuQELV5KMOPtXjiwH4XPJvr/ghEDibmLQ9Oc22dpWpG0vUDDNww==", + "license": "MIT", + "dependencies": { + "svg.js": "^2.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/svg.resize.js": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/svg.resize.js/-/svg.resize.js-1.4.3.tgz", + "integrity": "sha512-9k5sXJuPKp+mVzXNvxz7U0uC9oVMQrrf7cFsETznzUDDm0x8+77dtZkWdMfRlmbkEEYvUn9btKuZ3n41oNA+uw==", + "license": "MIT", + "dependencies": { + "svg.js": "^2.6.5", + "svg.select.js": "^2.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/svg.resize.js/node_modules/svg.select.js": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/svg.select.js/-/svg.select.js-2.1.2.tgz", + "integrity": "sha512-tH6ABEyJsAOVAhwcCjF8mw4crjXSI1aa7j2VQR8ZuJ37H2MBUbyeqYr5nEO7sSN3cy9AR9DUwNg0t/962HlDbQ==", + "license": "MIT", + "dependencies": { + "svg.js": "^2.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/svg.select.js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/svg.select.js/-/svg.select.js-3.0.1.tgz", + "integrity": "sha512-h5IS/hKkuVCbKSieR9uQCj9w+zLHoPh+ce19bBYyqF53g6mnPB8sAtIbe1s9dh2S2fCmYX2xel1Ln3PJBbK4kw==", + "license": "MIT", + "dependencies": { + "svg.js": "^2.6.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/tabbable": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.4.0.tgz", @@ -15093,43 +8462,6 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, - "node_modules/thingies": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/thingies/-/thingies-2.5.0.tgz", - "integrity": "sha512-s+2Bwztg6PhWUD7XMfeYm5qliDdSiZm7M7n8KjTkIsm3l/2lgVRc2/Gx/v+ZX8lT4FMA+i8aQvhcWylldc+ZNw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "^2" - } - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true, - "peer": true - }, - "node_modules/timers-browserify": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", - "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", - "dev": true, - "peer": true, - "dependencies": { - "setimmediate": "^1.0.4" - }, - "engines": { - "node": ">=0.6.0" - } - }, "node_modules/tinycolor2": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", @@ -15140,6 +8472,7 @@ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", "dev": true, + "optional": true, "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" @@ -15156,6 +8489,7 @@ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, + "optional": true, "engines": { "node": ">=12.0.0" }, @@ -15173,6 +8507,7 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, + "optional": true, "engines": { "node": ">=12" }, @@ -15180,21 +8515,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/to-buffer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.2.tgz", - "integrity": "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==", - "dev": true, - "peer": true, - "dependencies": { - "isarray": "^2.0.5", - "safe-buffer": "^5.2.1", - "typed-array-buffer": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -15212,33 +8532,6 @@ "resolved": "https://registry.npmjs.org/toastify-js/-/toastify-js-1.12.0.tgz", "integrity": "sha512-HeMHCO9yLPvP9k0apGSdPUWrUbLnxUKNFzgUoZp1PHCLploIX/4DSQ7V8H25ef+h4iO9n0he7ImfcndnN6nDrQ==" }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tree-dump": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.1.0.tgz", - "integrity": "sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, "node_modules/tributejs": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/tributejs/-/tributejs-5.1.3.tgz", @@ -15255,275 +8548,62 @@ }, "node_modules/trim-newlines": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz", - "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/trough": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", - "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/ts-api-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", - "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "typescript": ">=4.2.0" - } - }, - "node_modules/ts-loader": { - "version": "9.5.4", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.4.tgz", - "integrity": "sha512-nCz0rEwunlTZiy6rXFByQU1kVVpCIgUpc/psFiKVrUwrizdnIbRFu8w7bxhUF0X613DYwT4XzrZHpVyMe758hQ==", - "dev": true, - "peer": true, - "dependencies": { - "chalk": "^4.1.0", - "enhanced-resolve": "^5.0.0", - "micromatch": "^4.0.0", - "semver": "^7.3.4", - "source-map": "^0.7.4" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "typescript": "*", - "webpack": "^5.0.0" - } - }, - "node_modules/ts-loader/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "dev": true, - "peer": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tsconfig-paths": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", - "dev": true, - "peer": true, - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "peer": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "peer": true - }, - "node_modules/tsyringe": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/tsyringe/-/tsyringe-4.10.0.tgz", - "integrity": "sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw==", - "dev": true, - "peer": true, - "dependencies": { - "tslib": "^1.9.3" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/tsyringe/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true, - "peer": true - }, - "node_modules/tty-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", - "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", - "dev": true, - "peer": true - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "peer": true, - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typed-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", - "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", - "dev": true, - "peer": true, - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typed-array-byte-length": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", - "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz", + "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==", "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.14" - }, + "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", - "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "dev": true, - "peer": true, + "license": "Apache-2.0", + "optional": true, "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.15", - "reflect.getprototypeof": "^1.0.9" + "safe-buffer": "^5.0.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "*" } }, - "node_modules/typed-array-length": { - "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==", + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, - "peer": true, "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0", - "reflect.getprototypeof": "^1.0.6" + "prelude-ls": "^1.2.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.8.0" } }, - "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "devOptional": true, - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, "engines": { - "node": ">=14.17" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/typescript-event-target": { @@ -15532,25 +8612,6 @@ "integrity": "sha512-TvkrTUpv7gCPlcnSoEwUVUBwsdheKm+HF5u2tPAKubkIGMfovdSizCTaZRY/NhR8+Ijy8iZZUapbVQAsNrkFrw==", "optional": true }, - "node_modules/unbox-primitive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", - "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", - "dev": true, - "peer": true, - "dependencies": { - "call-bound": "^1.0.3", - "has-bigints": "^1.0.2", - "has-symbols": "^1.1.0", - "which-boxed-primitive": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/undici-types": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", @@ -15691,51 +8752,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/unrs-resolver": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz", - "integrity": "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==", - "dev": true, - "hasInstallScript": true, - "peer": true, - "dependencies": { - "napi-postinstall": "^0.3.0" - }, - "funding": { - "url": "https://opencollective.com/unrs-resolver" - }, - "optionalDependencies": { - "@unrs/resolver-binding-android-arm-eabi": "1.11.1", - "@unrs/resolver-binding-android-arm64": "1.11.1", - "@unrs/resolver-binding-darwin-arm64": "1.11.1", - "@unrs/resolver-binding-darwin-x64": "1.11.1", - "@unrs/resolver-binding-freebsd-x64": "1.11.1", - "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", - "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", - "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", - "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", - "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", - "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", - "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", - "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", - "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", - "@unrs/resolver-binding-linux-x64-musl": "1.11.1", - "@unrs/resolver-binding-wasm32-wasi": "1.11.1", - "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", - "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", - "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" - } - }, "node_modules/update-browserslist-db": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", @@ -15775,20 +8791,6 @@ "punycode": "^2.1.0" } }, - "node_modules/url": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.4.tgz", - "integrity": "sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==", - "dev": true, - "peer": true, - "dependencies": { - "punycode": "^1.4.1", - "qs": "^6.12.3" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/url-join": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz", @@ -15808,53 +8810,12 @@ "requires-port": "^1.0.0" } }, - "node_modules/url/node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true, - "peer": true - }, - "node_modules/util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "dev": true, - "peer": true, - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "peer": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -15877,16 +8838,6 @@ "spdx-license-ids": "^3.0.0" } }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/vfile": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", @@ -15913,13 +8864,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "dev": true, - "peer": true - }, "node_modules/vue": { "version": "2.7.16", "resolved": "https://registry.npmjs.org/vue/-/vue-2.7.16.tgz", @@ -15930,6 +8874,16 @@ "csstype": "^3.1.0" } }, + "node_modules/vue-apexcharts": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/vue-apexcharts/-/vue-apexcharts-1.7.0.tgz", + "integrity": "sha512-QMpvBllJ1XvFsK4dwcbyxKalVpHfJnoqsNWszY55HJk/Sn7WP1f5YUv4JIzugqu4GTQB6gLcCVwwPDQFtwr0oQ==", + "license": "MIT", + "peerDependencies": { + "apexcharts": ">=4.0.0", + "vue": "^2.5.17" + } + }, "node_modules/vue-color": { "version": "2.8.2", "resolved": "https://registry.npmjs.org/vue-color/-/vue-color-2.8.2.tgz", @@ -15941,84 +8895,6 @@ "tinycolor2": "^1.1.2" } }, - "node_modules/vue-eslint-parser": { - "version": "9.4.3", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz", - "integrity": "sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==", - "dev": true, - "peer": true, - "dependencies": { - "debug": "^4.3.4", - "eslint-scope": "^7.1.1", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.1", - "esquery": "^1.4.0", - "lodash": "^4.17.21", - "semver": "^7.3.6" - }, - "engines": { - "node": "^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=6.0.0" - } - }, - "node_modules/vue-eslint-parser/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "peer": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "peer": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/vue-eslint-parser/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/vue-eslint-parser/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "dev": true, - "peer": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/vue-frag": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/vue-frag/-/vue-frag-1.4.3.tgz", @@ -16135,16 +9011,6 @@ "node": ">=10.13.0" } }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dev": true, - "peer": true, - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, "node_modules/web-namespaces": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", @@ -16247,243 +9113,77 @@ "loader-runner": "^4.3.1", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^4.3.3", - "tapable": "^2.3.0", - "terser-webpack-plugin": "^5.3.16", - "watchpack": "^2.5.1", - "webpack-sources": "^3.3.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-cli": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-6.0.1.tgz", - "integrity": "sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==", - "dev": true, - "dependencies": { - "@discoveryjs/json-ext": "^0.6.1", - "@webpack-cli/configtest": "^3.0.1", - "@webpack-cli/info": "^3.0.1", - "@webpack-cli/serve": "^3.0.1", - "colorette": "^2.0.14", - "commander": "^12.1.0", - "cross-spawn": "^7.0.3", - "envinfo": "^7.14.0", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^3.1.1", - "rechoir": "^0.8.0", - "webpack-merge": "^6.0.1" - }, - "bin": { - "webpack-cli": "bin/cli.js" - }, - "engines": { - "node": ">=18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.82.0" - }, - "peerDependenciesMeta": { - "webpack-bundle-analyzer": { - "optional": true - }, - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/webpack-cli/node_modules/commander": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", - "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", - "dev": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/webpack-dev-middleware": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.5.tgz", - "integrity": "sha512-uxQ6YqGdE4hgDKNf7hUiPXOdtkXvBJXrfEGYSx7P7LC8hnUYGK70X6xQXUvXeNyBDDcsiQXpG2m3G9vxowaEuA==", - "dev": true, - "peer": true, - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^4.43.1", - "mime-types": "^3.0.1", - "on-finished": "^2.4.1", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" + "schema-utils": "^4.3.3", + "tapable": "^2.3.0", + "terser-webpack-plugin": "^5.3.16", + "watchpack": "^2.5.1", + "webpack-sources": "^3.3.3" + }, + "bin": { + "webpack": "bin/webpack.js" }, "engines": { - "node": ">= 18.12.0" + "node": ">=10.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, - "peerDependencies": { - "webpack": "^5.0.0" - }, "peerDependenciesMeta": { - "webpack": { + "webpack-cli": { "optional": true } } }, - "node_modules/webpack-dev-middleware/node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack-dev-middleware/node_modules/mime-types": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", - "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "node_modules/webpack-cli": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-6.0.1.tgz", + "integrity": "sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==", "dev": true, - "peer": true, "dependencies": { - "mime-db": "^1.54.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/webpack-dev-server": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.3.tgz", - "integrity": "sha512-9Gyu2F7+bg4Vv+pjbovuYDhHX+mqdqITykfzdM9UyKqKHlsE5aAjRhR+oOEfXW5vBeu8tarzlJFIZva4ZjAdrQ==", - "dev": true, - "peer": true, - "dependencies": { - "@types/bonjour": "^3.5.13", - "@types/connect-history-api-fallback": "^1.5.4", - "@types/express": "^4.17.25", - "@types/express-serve-static-core": "^4.17.21", - "@types/serve-index": "^1.9.4", - "@types/serve-static": "^1.15.5", - "@types/sockjs": "^0.3.36", - "@types/ws": "^8.5.10", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.2.1", - "chokidar": "^3.6.0", - "colorette": "^2.0.10", - "compression": "^1.8.1", - "connect-history-api-fallback": "^2.0.0", - "express": "^4.22.1", - "graceful-fs": "^4.2.6", - "http-proxy-middleware": "^2.0.9", - "ipaddr.js": "^2.1.0", - "launch-editor": "^2.6.1", - "open": "^10.0.3", - "p-retry": "^6.2.0", - "schema-utils": "^4.2.0", - "selfsigned": "^5.5.0", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^7.4.2", - "ws": "^8.18.0" + "@discoveryjs/json-ext": "^0.6.1", + "@webpack-cli/configtest": "^3.0.1", + "@webpack-cli/info": "^3.0.1", + "@webpack-cli/serve": "^3.0.1", + "colorette": "^2.0.14", + "commander": "^12.1.0", + "cross-spawn": "^7.0.3", + "envinfo": "^7.14.0", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", + "webpack-merge": "^6.0.1" }, "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" + "webpack-cli": "bin/cli.js" }, "engines": { - "node": ">= 18.12.0" + "node": ">=18.12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^5.0.0" + "webpack": "^5.82.0" }, "peerDependenciesMeta": { - "webpack": { + "webpack-bundle-analyzer": { "optional": true }, - "webpack-cli": { + "webpack-dev-server": { "optional": true } } }, - "node_modules/webpack-dev-server/node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "peer": true, - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/webpack-dev-server/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "peer": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/webpack-dev-server/node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "node_modules/webpack-cli/node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "dev": true, - "peer": true, - "dependencies": { - "picomatch": "^2.2.1" - }, "engines": { - "node": ">=8.10.0" + "node": ">=18" } }, "node_modules/webpack-merge": { @@ -16509,31 +9209,6 @@ "node": ">=10.13.0" } }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dev": true, - "peer": true, - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -16549,95 +9224,6 @@ "node": ">= 8" } }, - "node_modules/which-boxed-primitive": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", - "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", - "dev": true, - "peer": true, - "dependencies": { - "is-bigint": "^1.1.0", - "is-boolean-object": "^1.2.1", - "is-number-object": "^1.1.1", - "is-string": "^1.1.1", - "is-symbol": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-builtin-type": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", - "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", - "dev": true, - "peer": true, - "dependencies": { - "call-bound": "^1.0.2", - "function.prototype.name": "^1.1.6", - "has-tostringtag": "^1.0.2", - "is-async-function": "^2.0.0", - "is-date-object": "^1.1.0", - "is-finalizationregistry": "^1.1.0", - "is-generator-function": "^1.0.10", - "is-regex": "^1.2.1", - "is-weakref": "^1.0.2", - "isarray": "^2.0.5", - "which-boxed-primitive": "^1.1.0", - "which-collection": "^1.0.2", - "which-typed-array": "^1.1.16" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/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, - "peer": true, - "dependencies": { - "is-map": "^2.0.3", - "is-set": "^2.0.3", - "is-weakmap": "^2.0.2", - "is-weakset": "^2.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.20", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz", - "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==", - "dev": true, - "peer": true, - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "for-each": "^0.3.5", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/wildcard": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", @@ -16790,54 +9376,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/ws": { - "version": "8.19.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", - "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/wsl-utils": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", - "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", - "dev": true, - "peer": true, - "dependencies": { - "is-wsl": "^3.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/xml-name-validator": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", - "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=12" - } - }, "node_modules/xmlbuilder2": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/xmlbuilder2/-/xmlbuilder2-4.0.3.tgz", @@ -16854,23 +9392,6 @@ "node": ">=20.0" } }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true, - "peer": true - }, "node_modules/yargs-parser": { "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", @@ -16906,107 +9427,6 @@ "picocolors": "^1.1.1" } }, - "@babel/compat-data": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", - "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", - "dev": true, - "peer": true - }, - "@babel/core": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", - "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", - "dev": true, - "peer": true, - "requires": { - "@babel/code-frame": "^7.29.0", - "@babel/generator": "^7.29.0", - "@babel/helper-compilation-targets": "^7.28.6", - "@babel/helper-module-transforms": "^7.28.6", - "@babel/helpers": "^7.28.6", - "@babel/parser": "^7.29.0", - "@babel/template": "^7.28.6", - "@babel/traverse": "^7.29.0", - "@babel/types": "^7.29.0", - "@jridgewell/remapping": "^2.3.5", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - } - }, - "@babel/eslint-parser": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.28.6.tgz", - "integrity": "sha512-QGmsKi2PBO/MHSQk+AAgA9R6OHQr+VqnniFE0eMWZcVcfBZoA2dKn2hUsl3Csg/Plt9opRUWdY7//VXsrIlEiA==", - "dev": true, - "peer": true, - "requires": { - "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", - "eslint-visitor-keys": "^2.1.0", - "semver": "^6.3.1" - } - }, - "@babel/generator": { - "version": "7.29.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", - "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", - "dev": true, - "peer": true, - "requires": { - "@babel/parser": "^7.29.0", - "@babel/types": "^7.29.0", - "@jridgewell/gen-mapping": "^0.3.12", - "@jridgewell/trace-mapping": "^0.3.28", - "jsesc": "^3.0.2" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", - "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", - "dev": true, - "peer": true, - "requires": { - "@babel/compat-data": "^7.28.6", - "@babel/helper-validator-option": "^7.27.1", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - } - }, - "@babel/helper-globals": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", - "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", - "dev": true, - "peer": true - }, - "@babel/helper-module-imports": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", - "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", - "dev": true, - "peer": true, - "requires": { - "@babel/traverse": "^7.28.6", - "@babel/types": "^7.28.6" - } - }, - "@babel/helper-module-transforms": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", - "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", - "dev": true, - "peer": true, - "requires": { - "@babel/helper-module-imports": "^7.28.6", - "@babel/helper-validator-identifier": "^7.28.5", - "@babel/traverse": "^7.28.6" - } - }, "@babel/helper-string-parser": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", @@ -17017,24 +9437,6 @@ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==" }, - "@babel/helper-validator-option": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", - "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", - "dev": true, - "peer": true - }, - "@babel/helpers": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", - "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", - "dev": true, - "peer": true, - "requires": { - "@babel/template": "^7.28.6", - "@babel/types": "^7.28.6" - } - }, "@babel/parser": { "version": "7.29.0", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", @@ -17048,34 +9450,6 @@ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz", "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==" }, - "@babel/template": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", - "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", - "dev": true, - "peer": true, - "requires": { - "@babel/code-frame": "^7.28.6", - "@babel/parser": "^7.28.6", - "@babel/types": "^7.28.6" - } - }, - "@babel/traverse": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", - "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", - "dev": true, - "peer": true, - "requires": { - "@babel/code-frame": "^7.29.0", - "@babel/generator": "^7.29.0", - "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.29.0", - "@babel/template": "^7.28.6", - "@babel/types": "^7.29.0", - "debug": "^4.3.1" - } - }, "@babel/types": { "version": "7.29.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", @@ -17097,15 +9471,13 @@ "@conduction/nextcloud-vue": { "version": "0.1.0-beta.3", "resolved": "https://registry.npmjs.org/@conduction/nextcloud-vue/-/nextcloud-vue-0.1.0-beta.3.tgz", - "integrity": "sha512-+B02z2vUgN8BTZ0ZRd9mtrIVo55KMETzvEsyt7g0AW50hNU44xd9ILBHjKvZlKQclsLWzT36K0+RWIbcC22QVA==", - "requires": {} + "integrity": "sha512-+B02z2vUgN8BTZ0ZRd9mtrIVo55KMETzvEsyt7g0AW50hNU44xd9ILBHjKvZlKQclsLWzT36K0+RWIbcC22QVA==" }, "@csstools/css-parser-algorithms": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.7.1.tgz", "integrity": "sha512-2SJS42gxmACHgikc1WGesXLIT8d/q2l0UFM7TaEeIzdFCE/FPMtTiizcPGGJtlPo2xuQzY09OhrLTzRxqJqwGw==", - "dev": true, - "requires": {} + "dev": true }, "@csstools/css-tokenizer": { "version": "2.4.1", @@ -17117,15 +9489,13 @@ "version": "2.1.13", "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.13.tgz", "integrity": "sha512-XaHr+16KRU9Gf8XLi3q8kDlI18d5vzKSKCY510Vrtc9iNR0NJzbY9hhTmwhzYZj/ZwGL4VmB3TA9hJW0Um2qFA==", - "dev": true, - "requires": {} + "dev": true }, "@csstools/selector-specificity": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.1.1.tgz", "integrity": "sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA==", - "dev": true, - "requires": {} + "dev": true }, "@cyclonedx/cyclonedx-npm": { "version": "4.2.1", @@ -17149,8 +9519,7 @@ "version": "10.0.0", "resolved": "https://registry.npmjs.org/@cyclonedx/cyclonedx-library/-/cyclonedx-library-10.0.0.tgz", "integrity": "sha512-xDXf2eqzeFHdjamj6oBV3duRSfrlmsJ5+2z9tXp7q5qxJP5Awmjf4ABSutS4qkVHHj7JzKFL/EM0V0Nihc7zPg==", - "dev": true, - "requires": {} + "dev": true }, "ajv": { "version": "8.18.0", @@ -17226,53 +9595,7 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz", "integrity": "sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==", - "dev": true - }, - "@emnapi/core": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.8.1.tgz", - "integrity": "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@emnapi/wasi-threads": "1.1.0", - "tslib": "^2.4.0" - } - }, - "@emnapi/runtime": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz", - "integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "tslib": "^2.4.0" - } - }, - "@emnapi/wasi-threads": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", - "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "tslib": "^2.4.0" - } - }, - "@es-joy/jsdoccomment": { - "version": "0.41.0", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.41.0.tgz", - "integrity": "sha512-aKUhyn1QI5Ksbqcr3fFJj16p99QdjUxXAEuFst1Z47DRyoiMwivIH9MV/ARcJOCXVjPfjITciej8ZD2O/6qUmw==", - "dev": true, - "peer": true, - "requires": { - "comment-parser": "1.4.1", - "esquery": "^1.5.0", - "jsdoc-type-pratt-parser": "~4.0.0" - } + "dev": true }, "@eslint-community/eslint-utils": { "version": "4.9.1", @@ -17530,17 +9853,6 @@ "@jridgewell/trace-mapping": "^0.3.24" } }, - "@jridgewell/remapping": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", - "dev": true, - "peer": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, "@jridgewell/resolve-uri": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", @@ -17573,247 +9885,6 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "@jsonjoy.com/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", - "dev": true, - "peer": true, - "requires": {} - }, - "@jsonjoy.com/buffers": { - "version": "17.67.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-17.67.0.tgz", - "integrity": "sha512-tfExRpYxBvi32vPs9ZHaTjSP4fHAfzSmcahOfNxtvGHcyJel+aibkPlGeBB+7AoC6hL7lXIE++8okecBxx7lcw==", - "dev": true, - "peer": true, - "requires": {} - }, - "@jsonjoy.com/codegen": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz", - "integrity": "sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==", - "dev": true, - "peer": true, - "requires": {} - }, - "@jsonjoy.com/fs-core": { - "version": "4.56.10", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.56.10.tgz", - "integrity": "sha512-PyAEA/3cnHhsGcdY+AmIU+ZPqTuZkDhCXQ2wkXypdLitSpd6d5Ivxhnq4wa2ETRWFVJGabYynBWxIijOswSmOw==", - "dev": true, - "peer": true, - "requires": { - "@jsonjoy.com/fs-node-builtins": "4.56.10", - "@jsonjoy.com/fs-node-utils": "4.56.10", - "thingies": "^2.5.0" - } - }, - "@jsonjoy.com/fs-fsa": { - "version": "4.56.10", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.56.10.tgz", - "integrity": "sha512-/FVK63ysNzTPOnCCcPoPHt77TOmachdMS422txM4KhxddLdbW1fIbFMYH0AM0ow/YchCyS5gqEjKLNyv71j/5Q==", - "dev": true, - "peer": true, - "requires": { - "@jsonjoy.com/fs-core": "4.56.10", - "@jsonjoy.com/fs-node-builtins": "4.56.10", - "@jsonjoy.com/fs-node-utils": "4.56.10", - "thingies": "^2.5.0" - } - }, - "@jsonjoy.com/fs-node": { - "version": "4.56.10", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.56.10.tgz", - "integrity": "sha512-7R4Gv3tkUdW3dXfXiOkqxkElxKNVdd8BDOWC0/dbERd0pXpPY+s2s1Mino+aTvkGrFPiY+mmVxA7zhskm4Ue4Q==", - "dev": true, - "peer": true, - "requires": { - "@jsonjoy.com/fs-core": "4.56.10", - "@jsonjoy.com/fs-node-builtins": "4.56.10", - "@jsonjoy.com/fs-node-utils": "4.56.10", - "@jsonjoy.com/fs-print": "4.56.10", - "@jsonjoy.com/fs-snapshot": "4.56.10", - "glob-to-regex.js": "^1.0.0", - "thingies": "^2.5.0" - } - }, - "@jsonjoy.com/fs-node-builtins": { - "version": "4.56.10", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.56.10.tgz", - "integrity": "sha512-uUnKz8R0YJyKq5jXpZtkGV9U0pJDt8hmYcLRrPjROheIfjMXsz82kXMgAA/qNg0wrZ1Kv+hrg7azqEZx6XZCVw==", - "dev": true, - "peer": true, - "requires": {} - }, - "@jsonjoy.com/fs-node-to-fsa": { - "version": "4.56.10", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.56.10.tgz", - "integrity": "sha512-oH+O6Y4lhn9NyG6aEoFwIBNKZeYy66toP5LJcDOMBgL99BKQMUf/zWJspdRhMdn/3hbzQsZ8EHHsuekbFLGUWw==", - "dev": true, - "peer": true, - "requires": { - "@jsonjoy.com/fs-fsa": "4.56.10", - "@jsonjoy.com/fs-node-builtins": "4.56.10", - "@jsonjoy.com/fs-node-utils": "4.56.10" - } - }, - "@jsonjoy.com/fs-node-utils": { - "version": "4.56.10", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.56.10.tgz", - "integrity": "sha512-8EuPBgVI2aDPwFdaNQeNpHsyqPi3rr+85tMNG/lHvQLiVjzoZsvxA//Xd8aB567LUhy4QS03ptT+unkD/DIsNg==", - "dev": true, - "peer": true, - "requires": { - "@jsonjoy.com/fs-node-builtins": "4.56.10" - } - }, - "@jsonjoy.com/fs-print": { - "version": "4.56.10", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.56.10.tgz", - "integrity": "sha512-JW4fp5mAYepzFsSGrQ48ep8FXxpg4niFWHdF78wDrFGof7F3tKDJln72QFDEn/27M1yHd4v7sKHHVPh78aWcEw==", - "dev": true, - "peer": true, - "requires": { - "@jsonjoy.com/fs-node-utils": "4.56.10", - "tree-dump": "^1.1.0" - } - }, - "@jsonjoy.com/fs-snapshot": { - "version": "4.56.10", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.56.10.tgz", - "integrity": "sha512-DkR6l5fj7+qj0+fVKm/OOXMGfDFCGXLfyHkORH3DF8hxkpDgIHbhf/DwncBMs2igu/ST7OEkexn1gIqoU6Y+9g==", - "dev": true, - "peer": true, - "requires": { - "@jsonjoy.com/buffers": "^17.65.0", - "@jsonjoy.com/fs-node-utils": "4.56.10", - "@jsonjoy.com/json-pack": "^17.65.0", - "@jsonjoy.com/util": "^17.65.0" - }, - "dependencies": { - "@jsonjoy.com/base64": { - "version": "17.67.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-17.67.0.tgz", - "integrity": "sha512-5SEsJGsm15aP8TQGkDfJvz9axgPwAEm98S5DxOuYe8e1EbfajcDmgeXXzccEjh+mLnjqEKrkBdjHWS5vFNwDdw==", - "dev": true, - "peer": true, - "requires": {} - }, - "@jsonjoy.com/codegen": { - "version": "17.67.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-17.67.0.tgz", - "integrity": "sha512-idnkUplROpdBOV0HMcwhsCUS5TRUi9poagdGs70A6S4ux9+/aPuKbh8+UYRTLYQHtXvAdNfQWXDqZEx5k4Dj2Q==", - "dev": true, - "peer": true, - "requires": {} - }, - "@jsonjoy.com/json-pack": { - "version": "17.67.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-17.67.0.tgz", - "integrity": "sha512-t0ejURcGaZsn1ClbJ/3kFqSOjlryd92eQY465IYrezsXmPcfHPE/av4twRSxf6WE+TkZgLY+71vCZbiIiFKA/w==", - "dev": true, - "peer": true, - "requires": { - "@jsonjoy.com/base64": "17.67.0", - "@jsonjoy.com/buffers": "17.67.0", - "@jsonjoy.com/codegen": "17.67.0", - "@jsonjoy.com/json-pointer": "17.67.0", - "@jsonjoy.com/util": "17.67.0", - "hyperdyperid": "^1.2.0", - "thingies": "^2.5.0", - "tree-dump": "^1.1.0" - } - }, - "@jsonjoy.com/json-pointer": { - "version": "17.67.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-17.67.0.tgz", - "integrity": "sha512-+iqOFInH+QZGmSuaybBUNdh7yvNrXvqR+h3wjXm0N/3JK1EyyFAeGJvqnmQL61d1ARLlk/wJdFKSL+LHJ1eaUA==", - "dev": true, - "peer": true, - "requires": { - "@jsonjoy.com/util": "17.67.0" - } - }, - "@jsonjoy.com/util": { - "version": "17.67.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-17.67.0.tgz", - "integrity": "sha512-6+8xBaz1rLSohlGh68D1pdw3AwDi9xydm8QNlAFkvnavCJYSze+pxoW2VKP8p308jtlMRLs5NTHfPlZLd4w7ew==", - "dev": true, - "peer": true, - "requires": { - "@jsonjoy.com/buffers": "17.67.0", - "@jsonjoy.com/codegen": "17.67.0" - } - } - } - }, - "@jsonjoy.com/json-pack": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.21.0.tgz", - "integrity": "sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg==", - "dev": true, - "peer": true, - "requires": { - "@jsonjoy.com/base64": "^1.1.2", - "@jsonjoy.com/buffers": "^1.2.0", - "@jsonjoy.com/codegen": "^1.0.0", - "@jsonjoy.com/json-pointer": "^1.0.2", - "@jsonjoy.com/util": "^1.9.0", - "hyperdyperid": "^1.2.0", - "thingies": "^2.5.0", - "tree-dump": "^1.1.0" - }, - "dependencies": { - "@jsonjoy.com/buffers": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", - "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", - "dev": true, - "peer": true, - "requires": {} - } - } - }, - "@jsonjoy.com/json-pointer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-1.0.2.tgz", - "integrity": "sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==", - "dev": true, - "peer": true, - "requires": { - "@jsonjoy.com/codegen": "^1.0.0", - "@jsonjoy.com/util": "^1.9.0" - } - }, - "@jsonjoy.com/util": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.9.0.tgz", - "integrity": "sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==", - "dev": true, - "peer": true, - "requires": { - "@jsonjoy.com/buffers": "^1.0.0", - "@jsonjoy.com/codegen": "^1.0.0" - }, - "dependencies": { - "@jsonjoy.com/buffers": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", - "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", - "dev": true, - "peer": true, - "requires": {} - } - } - }, - "@leichtgewicht/ip-codec": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", - "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", - "dev": true, - "peer": true - }, "@linusborg/vue-simple-portal": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/@linusborg/vue-simple-portal/-/vue-simple-portal-0.1.5.tgz", @@ -17853,19 +9924,6 @@ } } }, - "@napi-rs/wasm-runtime": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", - "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@emnapi/core": "^1.4.3", - "@emnapi/runtime": "^1.4.3", - "@tybys/wasm-util": "^0.10.0" - } - }, "@nextcloud/auth": { "version": "2.5.3", "resolved": "https://registry.npmjs.org/@nextcloud/auth/-/auth-2.5.3.tgz", @@ -17904,8 +9962,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/@nextcloud/browserslist-config/-/browserslist-config-3.1.2.tgz", "integrity": "sha512-2iXl1rqQOHvggFIl/V3J5OpbodVazOsO38Gz/2sUAmtWXuOpGZG+7i6zQcVqGVaT1VzyPJ1gPiMpyyZi/XRWNA==", - "dev": true, - "requires": {} + "dev": true }, "@nextcloud/capabilities": { "version": "1.2.1", @@ -17948,29 +10005,7 @@ "version": "8.4.2", "resolved": "https://registry.npmjs.org/@nextcloud/eslint-config/-/eslint-config-8.4.2.tgz", "integrity": "sha512-zsDcBxvp2Vr/BgasK/vNYJ84LOXjl4RseJPrcp93zcnaB2WnygV50Sd0nQ5JN0ngTyPjiIlGd92MMzrMTofjRA==", - "dev": true, - "requires": {} - }, - "@nextcloud/eslint-plugin": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@nextcloud/eslint-plugin/-/eslint-plugin-2.2.1.tgz", - "integrity": "sha512-RX+0FxpL1h2EzjNLeW0VSGTkbyWIq7WgV7QAjtyUmDbSGwf1ds9Zy5OcRkgXRHRIu/W0gB0DhS2iz9qXHphCzA==", - "dev": true, - "peer": true, - "requires": { - "fast-xml-parser": "^4.2.5", - "requireindex": "^1.2.0", - "semver": "^7.5.3" - }, - "dependencies": { - "semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "dev": true, - "peer": true - } - } + "dev": true }, "@nextcloud/event-bus": { "version": "3.3.3", @@ -18092,8 +10127,7 @@ "version": "2.4.0", "resolved": "https://registry.npmjs.org/@nextcloud/stylelint-config/-/stylelint-config-2.4.0.tgz", "integrity": "sha512-S/q/offcs9pwnkjSrnfvsONryCOe6e1lfK2sszN6ZtkYyXvaqi8EbQuuhaGlxCstn9oXwbXfAI6O3Y8lGrjdFg==", - "dev": true, - "requires": {} + "dev": true }, "@nextcloud/typings": { "version": "1.10.0", @@ -18181,32 +10215,13 @@ "@nextcloud/vue-select": { "version": "3.26.0", "resolved": "https://registry.npmjs.org/@nextcloud/vue-select/-/vue-select-3.26.0.tgz", - "integrity": "sha512-UvJExrxzx5pP3lv7j6zrv2yj6B1dXph7sh3lLNPnbJPjPoH/yg58mHNFBcPJrRYMbpy2t3hlC6F7s33KCTr9FA==", - "requires": {} + "integrity": "sha512-UvJExrxzx5pP3lv7j6zrv2yj6B1dXph7sh3lLNPnbJPjPoH/yg58mHNFBcPJrRYMbpy2t3hlC6F7s33KCTr9FA==" }, "@nextcloud/webpack-vue-config": { "version": "6.3.2", "resolved": "https://registry.npmjs.org/@nextcloud/webpack-vue-config/-/webpack-vue-config-6.3.2.tgz", "integrity": "sha512-3ihWEW6kflGggVXNqL1gNrIx88GibJMIb1sC5CHjjZ/+2kkdOQ2HizoYKyMqPfcqji9UtwgdT+RlFVC4SViNJg==", - "dev": true, - "requires": {} - }, - "@nicolo-ribaudo/eslint-scope-5-internals": { - "version": "5.1.1-v1", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", - "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", - "dev": true, - "peer": true, - "requires": { - "eslint-scope": "5.1.1" - } - }, - "@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", - "dev": true, - "peer": true + "dev": true }, "@nodelib/fs.scandir": { "version": "2.1.5", @@ -18234,13 +10249,6 @@ "fastq": "^1.6.0" } }, - "@nolyfill/is-core-module": { - "version": "1.0.39", - "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", - "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", - "dev": true, - "peer": true - }, "@npmcli/agent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-3.0.0.tgz", @@ -18267,355 +10275,58 @@ "@npmcli/fs": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-4.0.0.tgz", - "integrity": "sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==", - "dev": true, - "optional": true, - "requires": { - "semver": "^7.3.5" - }, - "dependencies": { - "semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "dev": true, - "optional": true - } - } - }, - "@oozcitak/dom": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@oozcitak/dom/-/dom-2.0.2.tgz", - "integrity": "sha512-GjpKhkSYC3Mj4+lfwEyI1dqnsKTgwGy48ytZEhm4A/xnH/8z9M3ZVXKr/YGQi3uCLs1AEBS+x5T2JPiueEDW8w==", - "dev": true, - "requires": { - "@oozcitak/infra": "^2.0.2", - "@oozcitak/url": "^3.0.0", - "@oozcitak/util": "^10.0.0" - } - }, - "@oozcitak/infra": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@oozcitak/infra/-/infra-2.0.2.tgz", - "integrity": "sha512-2g+E7hoE2dgCz/APPOEK5s3rMhJvNxSMBrP+U+j1OWsIbtSpWxxlUjq1lU8RIsFJNYv7NMlnVsCuHcUzJW+8vA==", - "dev": true, - "requires": { - "@oozcitak/util": "^10.0.0" - } - }, - "@oozcitak/url": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@oozcitak/url/-/url-3.0.0.tgz", - "integrity": "sha512-ZKfET8Ak1wsLAiLWNfFkZc/BraDccuTJKR6svTYc7sVjbR+Iu0vtXdiDMY4o6jaFl5TW2TlS7jbLl4VovtAJWQ==", - "dev": true, - "requires": { - "@oozcitak/infra": "^2.0.2", - "@oozcitak/util": "^10.0.0" - } - }, - "@oozcitak/util": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@oozcitak/util/-/util-10.0.0.tgz", - "integrity": "sha512-hAX0pT/73190NLqBPPWSdBVGtbY6VOhWYK3qqHqtXQ1gK7kS2yz4+ivsN07hpJ6I3aeMtKP6J6npsEKOAzuTLA==", - "dev": true - }, - "@parcel/watcher": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.6.tgz", - "integrity": "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@parcel/watcher-android-arm64": "2.5.6", - "@parcel/watcher-darwin-arm64": "2.5.6", - "@parcel/watcher-darwin-x64": "2.5.6", - "@parcel/watcher-freebsd-x64": "2.5.6", - "@parcel/watcher-linux-arm-glibc": "2.5.6", - "@parcel/watcher-linux-arm-musl": "2.5.6", - "@parcel/watcher-linux-arm64-glibc": "2.5.6", - "@parcel/watcher-linux-arm64-musl": "2.5.6", - "@parcel/watcher-linux-x64-glibc": "2.5.6", - "@parcel/watcher-linux-x64-musl": "2.5.6", - "@parcel/watcher-win32-arm64": "2.5.6", - "@parcel/watcher-win32-ia32": "2.5.6", - "@parcel/watcher-win32-x64": "2.5.6", - "detect-libc": "^2.0.3", - "is-glob": "^4.0.3", - "node-addon-api": "^7.0.0", - "picomatch": "^4.0.3" - }, - "dependencies": { - "picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "@parcel/watcher-android-arm64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.6.tgz", - "integrity": "sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==", - "dev": true, - "optional": true, - "peer": true - }, - "@parcel/watcher-darwin-arm64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.6.tgz", - "integrity": "sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==", - "dev": true, - "optional": true, - "peer": true - }, - "@parcel/watcher-darwin-x64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.6.tgz", - "integrity": "sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==", - "dev": true, - "optional": true, - "peer": true - }, - "@parcel/watcher-freebsd-x64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.6.tgz", - "integrity": "sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==", - "dev": true, - "optional": true, - "peer": true - }, - "@parcel/watcher-linux-arm-glibc": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.6.tgz", - "integrity": "sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==", - "dev": true, - "optional": true, - "peer": true - }, - "@parcel/watcher-linux-arm-musl": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.6.tgz", - "integrity": "sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==", - "dev": true, - "optional": true, - "peer": true - }, - "@parcel/watcher-linux-arm64-glibc": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.6.tgz", - "integrity": "sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==", - "dev": true, - "optional": true, - "peer": true - }, - "@parcel/watcher-linux-arm64-musl": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.6.tgz", - "integrity": "sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==", - "dev": true, - "optional": true, - "peer": true - }, - "@parcel/watcher-linux-x64-glibc": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.6.tgz", - "integrity": "sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==", - "dev": true, - "optional": true, - "peer": true - }, - "@parcel/watcher-linux-x64-musl": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.6.tgz", - "integrity": "sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==", - "dev": true, - "optional": true, - "peer": true - }, - "@parcel/watcher-win32-arm64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.6.tgz", - "integrity": "sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==", - "dev": true, - "optional": true, - "peer": true - }, - "@parcel/watcher-win32-ia32": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.6.tgz", - "integrity": "sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==", - "dev": true, - "optional": true, - "peer": true - }, - "@parcel/watcher-win32-x64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.6.tgz", - "integrity": "sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==", - "dev": true, - "optional": true, - "peer": true - }, - "@peculiar/asn1-cms": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-cms/-/asn1-cms-2.6.1.tgz", - "integrity": "sha512-vdG4fBF6Lkirkcl53q6eOdn3XYKt+kJTG59edgRZORlg/3atWWEReRCx5rYE1ZzTTX6vLK5zDMjHh7vbrcXGtw==", - "dev": true, - "peer": true, - "requires": { - "@peculiar/asn1-schema": "^2.6.0", - "@peculiar/asn1-x509": "^2.6.1", - "@peculiar/asn1-x509-attr": "^2.6.1", - "asn1js": "^3.0.6", - "tslib": "^2.8.1" - } - }, - "@peculiar/asn1-csr": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-csr/-/asn1-csr-2.6.1.tgz", - "integrity": "sha512-WRWnKfIocHyzFYQTka8O/tXCiBquAPSrRjXbOkHbO4qdmS6loffCEGs+rby6WxxGdJCuunnhS2duHURhjyio6w==", - "dev": true, - "peer": true, - "requires": { - "@peculiar/asn1-schema": "^2.6.0", - "@peculiar/asn1-x509": "^2.6.1", - "asn1js": "^3.0.6", - "tslib": "^2.8.1" - } - }, - "@peculiar/asn1-ecc": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-ecc/-/asn1-ecc-2.6.1.tgz", - "integrity": "sha512-+Vqw8WFxrtDIN5ehUdvlN2m73exS2JVG0UAyfVB31gIfor3zWEAQPD+K9ydCxaj3MLen9k0JhKpu9LqviuCE1g==", - "dev": true, - "peer": true, - "requires": { - "@peculiar/asn1-schema": "^2.6.0", - "@peculiar/asn1-x509": "^2.6.1", - "asn1js": "^3.0.6", - "tslib": "^2.8.1" - } - }, - "@peculiar/asn1-pfx": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-pfx/-/asn1-pfx-2.6.1.tgz", - "integrity": "sha512-nB5jVQy3MAAWvq0KY0R2JUZG8bO/bTLpnwyOzXyEh/e54ynGTatAR+csOnXkkVD9AFZ2uL8Z7EV918+qB1qDvw==", - "dev": true, - "peer": true, - "requires": { - "@peculiar/asn1-cms": "^2.6.1", - "@peculiar/asn1-pkcs8": "^2.6.1", - "@peculiar/asn1-rsa": "^2.6.1", - "@peculiar/asn1-schema": "^2.6.0", - "asn1js": "^3.0.6", - "tslib": "^2.8.1" - } - }, - "@peculiar/asn1-pkcs8": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.6.1.tgz", - "integrity": "sha512-JB5iQ9Izn5yGMw3ZG4Nw3Xn/hb/G38GYF3lf7WmJb8JZUydhVGEjK/ZlFSWhnlB7K/4oqEs8HnfFIKklhR58Tw==", - "dev": true, - "peer": true, - "requires": { - "@peculiar/asn1-schema": "^2.6.0", - "@peculiar/asn1-x509": "^2.6.1", - "asn1js": "^3.0.6", - "tslib": "^2.8.1" - } - }, - "@peculiar/asn1-pkcs9": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.6.1.tgz", - "integrity": "sha512-5EV8nZoMSxeWmcxWmmcolg22ojZRgJg+Y9MX2fnE2bGRo5KQLqV5IL9kdSQDZxlHz95tHvIq9F//bvL1OeNILw==", - "dev": true, - "peer": true, - "requires": { - "@peculiar/asn1-cms": "^2.6.1", - "@peculiar/asn1-pfx": "^2.6.1", - "@peculiar/asn1-pkcs8": "^2.6.1", - "@peculiar/asn1-schema": "^2.6.0", - "@peculiar/asn1-x509": "^2.6.1", - "@peculiar/asn1-x509-attr": "^2.6.1", - "asn1js": "^3.0.6", - "tslib": "^2.8.1" - } - }, - "@peculiar/asn1-rsa": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-rsa/-/asn1-rsa-2.6.1.tgz", - "integrity": "sha512-1nVMEh46SElUt5CB3RUTV4EG/z7iYc7EoaDY5ECwganibQPkZ/Y2eMsTKB/LeyrUJ+W/tKoD9WUqIy8vB+CEdA==", - "dev": true, - "peer": true, - "requires": { - "@peculiar/asn1-schema": "^2.6.0", - "@peculiar/asn1-x509": "^2.6.1", - "asn1js": "^3.0.6", - "tslib": "^2.8.1" - } - }, - "@peculiar/asn1-schema": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.6.0.tgz", - "integrity": "sha512-xNLYLBFTBKkCzEZIw842BxytQQATQv+lDTCEMZ8C196iJcJJMBUZxrhSTxLaohMyKK8QlzRNTRkUmanucnDSqg==", + "integrity": "sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==", "dev": true, - "peer": true, + "optional": true, "requires": { - "asn1js": "^3.0.6", - "pvtsutils": "^1.3.6", - "tslib": "^2.8.1" + "semver": "^7.3.5" + }, + "dependencies": { + "semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "optional": true + } } }, - "@peculiar/asn1-x509": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509/-/asn1-x509-2.6.1.tgz", - "integrity": "sha512-O9jT5F1A2+t3r7C4VT7LYGXqkGLK7Kj1xFpz7U0isPrubwU5PbDoyYtx6MiGst29yq7pXN5vZbQFKRCP+lLZlA==", + "@oozcitak/dom": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@oozcitak/dom/-/dom-2.0.2.tgz", + "integrity": "sha512-GjpKhkSYC3Mj4+lfwEyI1dqnsKTgwGy48ytZEhm4A/xnH/8z9M3ZVXKr/YGQi3uCLs1AEBS+x5T2JPiueEDW8w==", "dev": true, - "peer": true, "requires": { - "@peculiar/asn1-schema": "^2.6.0", - "asn1js": "^3.0.6", - "pvtsutils": "^1.3.6", - "tslib": "^2.8.1" + "@oozcitak/infra": "^2.0.2", + "@oozcitak/url": "^3.0.0", + "@oozcitak/util": "^10.0.0" } }, - "@peculiar/asn1-x509-attr": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.6.1.tgz", - "integrity": "sha512-tlW6cxoHwgcQghnJwv3YS+9OO1737zgPogZ+CgWRUK4roEwIPzRH4JEiG770xe5HX2ATfCpmX60gurfWIF9dcQ==", + "@oozcitak/infra": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@oozcitak/infra/-/infra-2.0.2.tgz", + "integrity": "sha512-2g+E7hoE2dgCz/APPOEK5s3rMhJvNxSMBrP+U+j1OWsIbtSpWxxlUjq1lU8RIsFJNYv7NMlnVsCuHcUzJW+8vA==", "dev": true, - "peer": true, "requires": { - "@peculiar/asn1-schema": "^2.6.0", - "@peculiar/asn1-x509": "^2.6.1", - "asn1js": "^3.0.6", - "tslib": "^2.8.1" + "@oozcitak/util": "^10.0.0" } }, - "@peculiar/x509": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/@peculiar/x509/-/x509-1.14.3.tgz", - "integrity": "sha512-C2Xj8FZ0uHWeCXXqX5B4/gVFQmtSkiuOolzAgutjTfseNOHT3pUjljDZsTSxXFGgio54bCzVFqmEOUrIVk8RDA==", + "@oozcitak/url": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@oozcitak/url/-/url-3.0.0.tgz", + "integrity": "sha512-ZKfET8Ak1wsLAiLWNfFkZc/BraDccuTJKR6svTYc7sVjbR+Iu0vtXdiDMY4o6jaFl5TW2TlS7jbLl4VovtAJWQ==", "dev": true, - "peer": true, "requires": { - "@peculiar/asn1-cms": "^2.6.0", - "@peculiar/asn1-csr": "^2.6.0", - "@peculiar/asn1-ecc": "^2.6.0", - "@peculiar/asn1-pkcs9": "^2.6.0", - "@peculiar/asn1-rsa": "^2.6.0", - "@peculiar/asn1-schema": "^2.6.0", - "@peculiar/asn1-x509": "^2.6.0", - "pvtsutils": "^1.3.6", - "reflect-metadata": "^0.2.2", - "tslib": "^2.8.1", - "tsyringe": "^4.10.0" + "@oozcitak/infra": "^2.0.2", + "@oozcitak/util": "^10.0.0" } }, + "@oozcitak/util": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@oozcitak/util/-/util-10.0.0.tgz", + "integrity": "sha512-hAX0pT/73190NLqBPPWSdBVGtbY6VOhWYK3qqHqtXQ1gK7kS2yz4+ivsN07hpJ6I3aeMtKP6J6npsEKOAzuTLA==", + "dev": true + }, "@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -18623,71 +10334,11 @@ "dev": true, "optional": true }, - "@rtsao/scc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", - "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", - "dev": true, - "peer": true - }, "@tokenizer/token": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==" }, - "@tybys/wasm-util": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", - "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "tslib": "^2.4.0" - } - }, - "@types/body-parser": { - "version": "1.19.6", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", - "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", - "dev": true, - "peer": true, - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/bonjour": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", - "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", - "dev": true, - "peer": true, - "requires": { - "@types/node": "*" - } - }, - "@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "dev": true, - "peer": true, - "requires": { - "@types/node": "*" - } - }, - "@types/connect-history-api-fallback": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", - "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", - "dev": true, - "peer": true, - "requires": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, "@types/debug": { "version": "4.1.12", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", @@ -18727,32 +10378,6 @@ "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", "dev": true }, - "@types/express": { - "version": "4.17.25", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.25.tgz", - "integrity": "sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==", - "dev": true, - "peer": true, - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "^1" - } - }, - "@types/express-serve-static-core": { - "version": "4.19.8", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.8.tgz", - "integrity": "sha512-02S5fmqeoKzVZCHPZid4b8JH2eM5HzQLZWN2FohQEy/0eXTq8VXZfSN6Pcr3F6N9R/vNrj7cpgbhjie6m/1tCA==", - "dev": true, - "peer": true, - "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, "@types/hast": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", @@ -18761,23 +10386,6 @@ "@types/unist": "*" } }, - "@types/http-errors": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", - "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", - "dev": true, - "peer": true - }, - "@types/http-proxy": { - "version": "1.17.17", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.17.tgz", - "integrity": "sha512-ED6LB+Z1AVylNTu7hdzuBqOgMnvG/ld6wGCG8wFnAzKX5uyW2K3WD52v0gnLCTK/VLpXtKckgWuyScYK6cSPaw==", - "dev": true, - "peer": true, - "requires": { - "@types/node": "*" - } - }, "@types/jquery": { "version": "3.5.16", "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.16.tgz", @@ -18792,13 +10400,6 @@ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true, - "peer": true - }, "@types/mdast": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", @@ -18807,13 +10408,6 @@ "@types/unist": "*" } }, - "@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "dev": true, - "peer": true - }, "@types/minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", @@ -18840,101 +10434,16 @@ "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", "dev": true }, - "@types/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", - "dev": true, - "peer": true - }, - "@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "dev": true, - "peer": true - }, - "@types/react": { - "version": "19.2.14", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz", - "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", - "peer": true, - "requires": { - "csstype": "^3.2.2" - } - }, - "@types/retry": { - "version": "0.12.2", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", - "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", - "dev": true, - "peer": true - }, "@types/semver": { "version": "7.7.1", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz", "integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==" }, - "@types/send": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", - "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", - "dev": true, - "peer": true, - "requires": { - "@types/node": "*" - } - }, - "@types/serve-index": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", - "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", - "dev": true, - "peer": true, - "requires": { - "@types/express": "*" - } - }, - "@types/serve-static": { - "version": "1.15.10", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.10.tgz", - "integrity": "sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==", - "dev": true, - "peer": true, - "requires": { - "@types/http-errors": "*", - "@types/node": "*", - "@types/send": "<1" - }, - "dependencies": { - "@types/send": { - "version": "0.17.6", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.6.tgz", - "integrity": "sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==", - "dev": true, - "peer": true, - "requires": { - "@types/mime": "^1", - "@types/node": "*" - } - } - } - }, "@types/sizzle": { "version": "2.3.10", "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.10.tgz", "integrity": "sha512-TC0dmN0K8YcWEAEfiPi5gJP14eJe30TTGjkvek3iM/1NdHHsdCA/Td6GvNndMOo/iSnIsZ4HuuhrYPDAmbxzww==" }, - "@types/sockjs": { - "version": "0.3.36", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", - "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", - "dev": true, - "peer": true, - "requires": { - "@types/node": "*" - } - }, "@types/trusted-types": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", @@ -18943,305 +10452,18 @@ }, "@types/unist": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==" - }, - "@types/web-bluetooth": { - "version": "0.0.20", - "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", - "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==" - }, - "@types/ws": { - "version": "8.18.1", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", - "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", - "dev": true, - "peer": true, - "requires": { - "@types/node": "*" - } - }, - "@typescript-eslint/eslint-plugin": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", - "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", - "dev": true, - "peer": true, - "requires": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/type-utils": "7.18.0", - "@typescript-eslint/utils": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "graphemer": "^1.4.0", - "ignore": "^5.3.1", - "natural-compare": "^1.4.0", - "ts-api-utils": "^1.3.0" - } - }, - "@typescript-eslint/parser": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", - "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", - "dev": true, - "peer": true, - "requires": { - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "debug": "^4.3.4" - } - }, - "@typescript-eslint/scope-manager": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", - "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", - "dev": true, - "peer": true, - "requires": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0" - } - }, - "@typescript-eslint/type-utils": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", - "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", - "dev": true, - "peer": true, - "requires": { - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/utils": "7.18.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" - } - }, - "@typescript-eslint/types": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", - "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", - "dev": true, - "peer": true - }, - "@typescript-eslint/typescript-estree": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", - "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", - "dev": true, - "peer": true, - "requires": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" - }, - "dependencies": { - "semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "dev": true, - "peer": true - } - } - }, - "@typescript-eslint/utils": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", - "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", - "dev": true, - "peer": true, - "requires": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", - "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", - "dev": true, - "peer": true, - "requires": { - "@typescript-eslint/types": "7.18.0", - "eslint-visitor-keys": "^3.4.3" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "peer": true - } - } - }, - "@ungap/structured-clone": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", - "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==" - }, - "@unrs/resolver-binding-android-arm-eabi": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz", - "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==", - "dev": true, - "optional": true, - "peer": true - }, - "@unrs/resolver-binding-android-arm64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz", - "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==", - "dev": true, - "optional": true, - "peer": true - }, - "@unrs/resolver-binding-darwin-arm64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz", - "integrity": "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==", - "dev": true, - "optional": true, - "peer": true - }, - "@unrs/resolver-binding-darwin-x64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz", - "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==", - "dev": true, - "optional": true, - "peer": true - }, - "@unrs/resolver-binding-freebsd-x64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz", - "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==", - "dev": true, - "optional": true, - "peer": true - }, - "@unrs/resolver-binding-linux-arm-gnueabihf": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz", - "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==", - "dev": true, - "optional": true, - "peer": true - }, - "@unrs/resolver-binding-linux-arm-musleabihf": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz", - "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==", - "dev": true, - "optional": true, - "peer": true - }, - "@unrs/resolver-binding-linux-arm64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz", - "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==", - "dev": true, - "optional": true, - "peer": true - }, - "@unrs/resolver-binding-linux-arm64-musl": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz", - "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==", - "dev": true, - "optional": true, - "peer": true - }, - "@unrs/resolver-binding-linux-ppc64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz", - "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==", - "dev": true, - "optional": true, - "peer": true - }, - "@unrs/resolver-binding-linux-riscv64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz", - "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==", - "dev": true, - "optional": true, - "peer": true - }, - "@unrs/resolver-binding-linux-riscv64-musl": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz", - "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==", - "dev": true, - "optional": true, - "peer": true - }, - "@unrs/resolver-binding-linux-s390x-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz", - "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==", - "dev": true, - "optional": true, - "peer": true - }, - "@unrs/resolver-binding-linux-x64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz", - "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==", - "dev": true, - "optional": true, - "peer": true - }, - "@unrs/resolver-binding-linux-x64-musl": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz", - "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==", - "dev": true, - "optional": true, - "peer": true - }, - "@unrs/resolver-binding-wasm32-wasi": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz", - "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==", - "dev": true, - "optional": true, - "peer": true, - "requires": { - "@napi-rs/wasm-runtime": "^0.2.11" - } - }, - "@unrs/resolver-binding-win32-arm64-msvc": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz", - "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==", - "dev": true, - "optional": true, - "peer": true + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==" }, - "@unrs/resolver-binding-win32-ia32-msvc": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz", - "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==", - "dev": true, - "optional": true, - "peer": true + "@types/web-bluetooth": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", + "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==" }, - "@unrs/resolver-binding-win32-x64-msvc": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz", - "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==", - "dev": true, - "optional": true, - "peer": true + "@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==" }, "@vue/compiler-sfc": { "version": "2.7.16", @@ -19323,18 +10545,6 @@ "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==" }, - "@vue/eslint-config-typescript": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-13.0.0.tgz", - "integrity": "sha512-MHh9SncG/sfqjVqjcuFLOLD6Ed4dRAis4HNt0dXASeAuLqIAx4YMB1/m2o4pUKK1vCt8fUvYG8KKX2Ot3BVZTg==", - "dev": true, - "peer": true, - "requires": { - "@typescript-eslint/eslint-plugin": "^7.1.1", - "@typescript-eslint/parser": "^7.1.1", - "vue-eslint-parser": "^9.3.1" - } - }, "@vueuse/components": { "version": "11.3.0", "resolved": "https://registry.npmjs.org/@vueuse/components/-/components-11.3.0.tgz", @@ -19348,8 +10558,7 @@ "vue-demi": { "version": "0.14.10", "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", - "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", - "requires": {} + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==" } } }, @@ -19367,8 +10576,7 @@ "vue-demi": { "version": "0.14.10", "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", - "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", - "requires": {} + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==" } } }, @@ -19388,8 +10596,7 @@ "vue-demi": { "version": "0.14.10", "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", - "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", - "requires": {} + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==" } } }, @@ -19543,22 +10750,19 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-3.0.1.tgz", "integrity": "sha512-u8d0pJ5YFgneF/GuvEiDA61Tf1VDomHHYMjv/wc9XzYj7nopltpG96nXN5dJRstxZhcNpV1g+nT6CydO7pHbjA==", - "dev": true, - "requires": {} + "dev": true }, "@webpack-cli/info": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-3.0.1.tgz", "integrity": "sha512-coEmDzc2u/ffMvuW9aCjoRzNSPDl/XLuhPdlFRpT9tZHmJ/039az33CE7uH+8s0uL1j5ZNtfdv0HkfaKRBGJsQ==", - "dev": true, - "requires": {} + "dev": true }, "@webpack-cli/serve": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-3.0.1.tgz", "integrity": "sha512-sbgw03xQaCLiT6gcY/6u3qBDn01CWw/nbaXl3gTdTFuJJ75Gffv3E3DBpgvY2fkkrdS1fpjaXNOmJlnbtKauKg==", - "dev": true, - "requires": {} + "dev": true }, "@xtuc/ieee754": { "version": "1.2.0", @@ -19572,6 +10776,11 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, + "@yr/monotone-cubic-spline": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@yr/monotone-cubic-spline/-/monotone-cubic-spline-1.0.3.tgz", + "integrity": "sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA==" + }, "abbrev": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", @@ -19579,36 +10788,6 @@ "dev": true, "optional": true }, - "abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dev": true, - "peer": true, - "requires": { - "event-target-shim": "^5.0.0" - } - }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "peer": true, - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "dependencies": { - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true, - "peer": true - } - } - }, "acorn": { "version": "8.15.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", @@ -19619,15 +10798,13 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", - "dev": true, - "requires": {} + "dev": true }, "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} + "dev": true }, "agent-base": { "version": "7.1.4", @@ -19690,13 +10867,6 @@ "uri-js": "^4.4.1" } }, - "ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "dev": true, - "peer": true - }, "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -19712,210 +10882,49 @@ "color-convert": "^2.0.1" } }, - "anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "peer": true, + "apexcharts": { + "version": "3.54.1", + "resolved": "https://registry.npmjs.org/apexcharts/-/apexcharts-3.54.1.tgz", + "integrity": "sha512-E4et0h/J1U3r3EwS/WlqJCQIbepKbp6wGUmaAwJOMjHUP4Ci0gxanLa7FR3okx6p9coi4st6J853/Cb1NP0vpA==", "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "@yr/monotone-cubic-spline": "^1.0.3", + "svg.draggable.js": "^2.2.2", + "svg.easing.js": "^2.0.0", + "svg.filter.js": "^2.0.2", + "svg.pathmorphing.js": "^0.1.3", + "svg.resize.js": "^1.4.3", + "svg.select.js": "^3.0.1" } }, - "are-docs-informative": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", - "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==", - "dev": true, - "peer": true - }, "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "array-buffer-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", - "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", - "dev": true, - "peer": true, - "requires": { - "call-bound": "^1.0.3", - "is-array-buffer": "^3.0.5" - } - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true, - "peer": true - }, - "array-includes": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", - "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.24.0", - "es-object-atoms": "^1.1.1", - "get-intrinsic": "^1.3.0", - "is-string": "^1.1.1", - "math-intrinsics": "^1.1.0" - } - }, "array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, - "array.prototype.findlastindex": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", - "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.9", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "es-shim-unscopables": "^1.1.0" - } - }, - "array.prototype.flat": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", - "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" - } - }, - "array.prototype.flatmap": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", - "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" - } - }, - "arraybuffer.prototype.slice": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", - "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", - "dev": true, - "peer": true, - "requires": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "is-array-buffer": "^3.0.4" - } - }, "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", "dev": true }, - "asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", - "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", - "dev": true, - "peer": true - } - } - }, - "asn1js": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.7.tgz", - "integrity": "sha512-uLvq6KJu04qoQM6gvBfKFjlh6Gl0vOKQuR5cJMDHQkmwfMOQeN3F3SHCv9SNYSL+CRoHvOGFfllDlVz03GQjvQ==", - "dev": true, - "peer": true, - "requires": { - "pvtsutils": "^1.3.6", - "pvutils": "^1.1.3", - "tslib": "^2.8.1" - } - }, - "assert": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", - "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.2", - "is-nan": "^1.3.2", - "object-is": "^1.1.5", - "object.assign": "^4.1.4", - "util": "^0.12.5" - } - }, "astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true }, - "async-function": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", - "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", - "dev": true, - "peer": true - }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, - "available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dev": true, - "peer": true, - "requires": { - "possible-typed-array-names": "^1.0.0" - } - }, "axios": { "version": "1.13.5", "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.5.tgz", @@ -19926,16 +10935,6 @@ "proxy-from-env": "^1.1.0" } }, - "babel-loader": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-10.0.0.tgz", - "integrity": "sha512-z8jt+EdS61AMw22nSfoNJAZ0vrtmhPRVi6ghL3rCeRZI8cdNYFiV5xeV3HbE7rlZZNmGH8BVccwWt8/ED0QOHA==", - "dev": true, - "peer": true, - "requires": { - "find-up": "^5.0.0" - } - }, "bail": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", @@ -19957,7 +10956,8 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true + "dev": true, + "optional": true }, "baseline-browser-mapping": { "version": "2.9.19", @@ -19965,315 +10965,86 @@ "integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==", "dev": true }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true, - "peer": true - }, "big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, - "peer": true - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "optional": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - }, - "dependencies": { - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "optional": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "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, - "optional": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "blurhash": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/blurhash/-/blurhash-2.0.5.tgz", - "integrity": "sha512-cRygWd7kGBQO3VEhPiTgq4Wc43ctsM+o46urrmPOiuAe+07fzlSB9OJVdpgDL0jPqXUVQ9ht7aq7kxOeJHRK+w==" - }, - "bn.js": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.3.tgz", - "integrity": "sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w==", - "dev": true, - "peer": true - }, - "body-parser": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", - "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", - "dev": true, - "peer": true, - "requires": { - "bytes": "~3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "~1.2.0", - "http-errors": "~2.0.1", - "iconv-lite": "~0.4.24", - "on-finished": "~2.4.1", - "qs": "~6.14.0", - "raw-body": "~2.5.3", - "type-is": "~1.6.18", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "peer": true - }, - "qs": { - "version": "6.14.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz", - "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==", - "dev": true, - "peer": true, - "requires": { - "side-channel": "^1.1.0" - } - } - } - }, - "bonjour-service": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", - "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", - "dev": true, - "peer": true, - "requires": { - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true, - "peer": true - }, - "brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "devOptional": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "requires": { - "fill-range": "^7.1.1" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "dev": true, - "peer": true - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "peer": true, - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "peer": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "peer": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true }, - "browserify-rsa": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.1.tgz", - "integrity": "sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==", + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", "dev": true, - "peer": true, + "optional": true, "requires": { - "bn.js": "^5.2.1", - "randombytes": "^2.1.0", - "safe-buffer": "^5.2.1" + "file-uri-to-path": "1.0.0" } }, - "browserify-sign": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.5.tgz", - "integrity": "sha512-C2AUdAJg6rlM2W5QMp2Q4KGQMVBwR1lIimTsUnutJ8bMpW5B52pGpR2gEnNBNwijumDo5FojQ0L9JrXA8m4YEw==", + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, - "peer": true, + "optional": true, "requires": { - "bn.js": "^5.2.2", - "browserify-rsa": "^4.1.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.6.1", + "buffer": "^5.5.0", "inherits": "^2.0.4", - "parse-asn1": "^5.1.9", - "readable-stream": "^2.3.8", - "safe-buffer": "^5.2.1" + "readable-stream": "^3.4.0" }, "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "peer": true - }, - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, - "peer": true, + "optional": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "peer": true - } + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "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, - "peer": true, + "optional": true, "requires": { - "safe-buffer": "~5.1.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "peer": true - } + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } } } }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "blurhash": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/blurhash/-/blurhash-2.0.5.tgz", + "integrity": "sha512-cRygWd7kGBQO3VEhPiTgq4Wc43ctsM+o46urrmPOiuAe+07fzlSB9OJVdpgDL0jPqXUVQ9ht7aq7kxOeJHRK+w==" + }, + "brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "optional": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, - "peer": true, "requires": { - "pako": "~1.0.5" + "fill-range": "^7.1.1" } }, "browserslist": { @@ -20289,93 +11060,18 @@ "update-browserslist-db": "^1.2.0" } }, - "buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "peer": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "dev": true, - "peer": true - }, - "builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "dev": true, - "peer": true - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", - "dev": true, - "peer": true - }, - "builtins": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.1.0.tgz", - "integrity": "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==", - "dev": true, - "peer": true, - "requires": { - "semver": "^7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "dev": true, - "peer": true - } - } - }, - "bundle-name": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", - "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", - "dev": true, - "peer": true, - "requires": { - "run-applescript": "^7.0.0" - } - }, "byte-length": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/byte-length/-/byte-length-1.0.2.tgz", "integrity": "sha512-ovBpjmsgd/teRmgcPh23d4gJvxDoXtAzEL9xTfMU8Yc2kqCDb7L9jAG0XHl1nzuGl+h3ebCIF1i62UFyA9V/2Q==", "optional": true }, - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "peer": true - }, - "bytestreamjs": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bytestreamjs/-/bytestreamjs-2.0.1.tgz", - "integrity": "sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ==", - "dev": true, - "peer": true - }, "cacache": { "version": "19.0.1", "resolved": "https://registry.npmjs.org/cacache/-/cacache-19.0.1.tgz", @@ -20421,19 +11117,6 @@ } } }, - "call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", - "dev": true, - "peer": true, - "requires": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.2" - } - }, "call-bind-apply-helpers": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", @@ -20443,17 +11126,6 @@ "function-bind": "^1.1.2" } }, - "call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "dev": true, - "peer": true, - "requires": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - } - }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -20523,16 +11195,6 @@ "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==" }, - "chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "dev": true, - "peer": true, - "requires": { - "readdirp": "^4.0.1" - } - }, "chownr": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", @@ -20546,18 +11208,6 @@ "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", "dev": true }, - "cipher-base": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.7.tgz", - "integrity": "sha512-Mz9QMT5fJe7bKI7MH31UilT5cEK5EHHRCccw/YRFsRY47AuNgaV6HY3rscp0/I4Q+tTW/5zoqpSeRRI54TkDWA==", - "dev": true, - "peer": true, - "requires": { - "inherits": "^2.0.4", - "safe-buffer": "^5.2.1", - "to-buffer": "^1.2.2" - } - }, "clamp": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/clamp/-/clamp-1.0.1.tgz", @@ -20625,78 +11275,12 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, - "comment-parser": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz", - "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==", - "dev": true, - "peer": true - }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "peer": true, - "requires": { - "mime-db": ">= 1.43.0 < 2" - } - }, - "compression": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", - "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", - "dev": true, - "peer": true, - "requires": { - "bytes": "3.1.2", - "compressible": "~2.0.18", - "debug": "2.6.9", - "negotiator": "~0.6.4", - "on-headers": "~1.1.0", - "safe-buffer": "5.2.1", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "peer": true - } - } - }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, - "connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "dev": true, - "peer": true - }, - "console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "dev": true, - "peer": true - }, "consolidate": { "version": "0.15.1", "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz", @@ -20706,63 +11290,11 @@ "bluebird": "^3.1.1" } }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", - "dev": true, - "peer": true - }, - "content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "peer": true, - "requires": { - "safe-buffer": "5.2.1" - } - }, - "content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "dev": true, - "peer": true - }, - "convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "peer": true - }, - "cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", - "dev": true, - "peer": true - }, - "cookie-signature": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", - "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", - "dev": true, - "peer": true - }, "core-js": { "version": "3.48.0", "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.48.0.tgz", "integrity": "sha512-zpEHTy1fjTMZCKLHUZoVeylt9XrzaIN2rbPXEt0k+q7JE5CkCZdo6bNq55bn24a69CH7ErAVLKijxJja4fw+UQ==" }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true, - "peer": true - }, "cosmiconfig": { "version": "8.3.6", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", @@ -20775,55 +11307,6 @@ "path-type": "^4.0.0" } }, - "create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - }, - "dependencies": { - "bn.js": { - "version": "4.12.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", - "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", - "dev": true, - "peer": true - } - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "peer": true, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "peer": true, - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, "cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -20840,27 +11323,6 @@ "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==" }, - "crypto-browserify": { - "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, - "peer": true, - "requires": { - "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" - } - }, "css-functions-list": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.3.3.tgz", @@ -20918,42 +11380,6 @@ "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", "optional": true }, - "data-view-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", - "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", - "dev": true, - "peer": true, - "requires": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - } - }, - "data-view-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", - "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", - "dev": true, - "peer": true, - "requires": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - } - }, - "data-view-byte-offset": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", - "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", - "dev": true, - "peer": true, - "requires": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - } - }, "date-format-parse": { "version": "0.2.7", "resolved": "https://registry.npmjs.org/date-format-parse/-/date-format-parse-0.2.7.tgz", @@ -21039,90 +11465,16 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, - "default-browser": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", - "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==", - "dev": true, - "peer": true, - "requires": { - "bundle-name": "^4.1.0", - "default-browser-id": "^5.0.0" - } - }, - "default-browser-id": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", - "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", - "dev": true, - "peer": true - }, - "define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, - "peer": true, - "requires": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - } - }, - "define-lazy-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", - "dev": true, - "peer": true - }, - "define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, - "peer": true, - "requires": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "peer": true - }, "dequal": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==" }, - "des.js": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", - "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", - "dev": true, - "peer": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true, - "peer": true - }, "detect-libc": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", @@ -21130,40 +11482,12 @@ "dev": true, "optional": true }, - "detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true, - "peer": true - }, "devlop": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", - "requires": { - "dequal": "^2.0.0" - } - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", - "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", - "dev": true, - "peer": true - } + "requires": { + "dequal": "^2.0.0" } }, "dir-glob": { @@ -21182,16 +11506,6 @@ "dev": true, "optional": true }, - "dns-packet": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", - "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", - "dev": true, - "peer": true, - "requires": { - "@leichtgewicht/ip-codec": "^2.0.1" - } - }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -21201,51 +11515,6 @@ "esutils": "^2.0.2" } }, - "dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dev": true, - "peer": true, - "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "dependencies": { - "entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, - "peer": true - } - } - }, - "domain-browser": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-5.7.0.tgz", - "integrity": "sha512-edTFu0M/7wO1pXY6GDxVNVW086uqwWYIHP98txhcPyV995X21JIH2DtYp33sQJOupYoXKe9RwTw2Ya2vWaquTQ==", - "dev": true, - "peer": true - }, - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "peer": true - }, - "domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dev": true, - "peer": true, - "requires": { - "domelementtype": "^2.3.0" - } - }, "dompurify": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.3.3.tgz", @@ -21254,18 +11523,6 @@ "@types/trusted-types": "^2.0.7" } }, - "domutils": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", - "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", - "dev": true, - "peer": true, - "requires": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - } - }, "dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -21283,44 +11540,12 @@ "dev": true, "optional": true }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true, - "peer": true - }, "electron-to-chromium": { "version": "1.5.286", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz", "integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==", "dev": true }, - "elliptic": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", - "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", - "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", - "dev": true, - "peer": true - } - } - }, "emoji-mart-vue-fast": { "version": "15.0.5", "resolved": "https://registry.npmjs.org/emoji-mart-vue-fast/-/emoji-mart-vue-fast-15.0.5.tgz", @@ -21342,13 +11567,6 @@ "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "dev": true }, - "encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "dev": true, - "peer": true - }, "encoding": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", @@ -21426,69 +11644,6 @@ "is-arrayish": "^0.2.1" } }, - "es-abstract": { - "version": "1.24.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.1.tgz", - "integrity": "sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==", - "dev": true, - "peer": true, - "requires": { - "array-buffer-byte-length": "^1.0.2", - "arraybuffer.prototype.slice": "^1.0.4", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "data-view-buffer": "^1.0.2", - "data-view-byte-length": "^1.0.2", - "data-view-byte-offset": "^1.0.1", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "es-set-tostringtag": "^2.1.0", - "es-to-primitive": "^1.3.0", - "function.prototype.name": "^1.1.8", - "get-intrinsic": "^1.3.0", - "get-proto": "^1.0.1", - "get-symbol-description": "^1.1.0", - "globalthis": "^1.0.4", - "gopd": "^1.2.0", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "internal-slot": "^1.1.0", - "is-array-buffer": "^3.0.5", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.2", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.2.1", - "is-set": "^2.0.3", - "is-shared-array-buffer": "^1.0.4", - "is-string": "^1.1.1", - "is-typed-array": "^1.1.15", - "is-weakref": "^1.1.1", - "math-intrinsics": "^1.1.0", - "object-inspect": "^1.13.4", - "object-keys": "^1.1.1", - "object.assign": "^4.1.7", - "own-keys": "^1.0.1", - "regexp.prototype.flags": "^1.5.4", - "safe-array-concat": "^1.1.3", - "safe-push-apply": "^1.0.0", - "safe-regex-test": "^1.1.0", - "set-proto": "^1.0.0", - "stop-iteration-iterator": "^1.1.0", - "string.prototype.trim": "^1.2.10", - "string.prototype.trimend": "^1.0.9", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.3", - "typed-array-byte-length": "^1.0.3", - "typed-array-byte-offset": "^1.0.4", - "typed-array-length": "^1.0.7", - "unbox-primitive": "^1.1.0", - "which-typed-array": "^1.1.19" - } - }, "es-define-property": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", @@ -21524,28 +11679,6 @@ "hasown": "^2.0.2" } }, - "es-shim-unscopables": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", - "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", - "dev": true, - "peer": true, - "requires": { - "hasown": "^2.0.2" - } - }, - "es-to-primitive": { - "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, - "peer": true, - "requires": { - "is-callable": "^1.2.7", - "is-date-object": "^1.0.5", - "is-symbol": "^1.0.4" - } - }, "escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", @@ -21675,305 +11808,11 @@ } } }, - "eslint-compat-utils": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz", - "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==", - "dev": true, - "peer": true, - "requires": { - "semver": "^7.5.4" - }, - "dependencies": { - "semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "dev": true, - "peer": true - } - } - }, - "eslint-config-standard": { - "version": "17.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz", - "integrity": "sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==", - "dev": true, - "peer": true, - "requires": {} - }, "eslint-import-resolver-alias": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/eslint-import-resolver-alias/-/eslint-import-resolver-alias-1.1.2.tgz", "integrity": "sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w==", - "dev": true, - "requires": {} - }, - "eslint-import-resolver-exports": { - "version": "1.0.0-beta.5", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-exports/-/eslint-import-resolver-exports-1.0.0-beta.5.tgz", - "integrity": "sha512-o6t0w7muUpXr7MkUVzD5igQoDfAQvTmcPp8HEAJdNF8eOuAO+yn6I/TTyMxz9ecCwzX7e02vzlkHURoScUuidg==", - "dev": true, - "peer": true, - "requires": { - "resolve.exports": "^2.0.0" - } - }, - "eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", - "dev": true, - "peer": true, - "requires": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "peer": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-import-resolver-typescript": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.1.tgz", - "integrity": "sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==", - "dev": true, - "peer": true, - "requires": { - "@nolyfill/is-core-module": "1.0.39", - "debug": "^4.4.0", - "get-tsconfig": "^4.10.0", - "is-bun-module": "^2.0.0", - "stable-hash": "^0.0.5", - "tinyglobby": "^0.2.13", - "unrs-resolver": "^1.6.2" - } - }, - "eslint-module-utils": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", - "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", - "dev": true, - "peer": true, - "requires": { - "debug": "^3.2.7" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "peer": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-plugin-es-x": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz", - "integrity": "sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==", - "dev": true, - "peer": true, - "requires": { - "@eslint-community/eslint-utils": "^4.1.2", - "@eslint-community/regexpp": "^4.11.0", - "eslint-compat-utils": "^0.5.1" - } - }, - "eslint-plugin-import": { - "version": "2.32.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", - "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", - "dev": true, - "peer": true, - "requires": { - "@rtsao/scc": "^1.1.0", - "array-includes": "^3.1.9", - "array.prototype.findlastindex": "^1.2.6", - "array.prototype.flat": "^1.3.3", - "array.prototype.flatmap": "^1.3.3", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.12.1", - "hasown": "^2.0.2", - "is-core-module": "^2.16.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.8", - "object.groupby": "^1.0.3", - "object.values": "^1.2.1", - "semver": "^6.3.1", - "string.prototype.trimend": "^1.0.9", - "tsconfig-paths": "^3.15.0" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "peer": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "peer": true, - "requires": { - "ms": "^2.1.1" - } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "peer": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "peer": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "eslint-plugin-jsdoc": { - "version": "46.10.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-46.10.1.tgz", - "integrity": "sha512-x8wxIpv00Y50NyweDUpa+58ffgSAI5sqe+zcZh33xphD0AVh+1kqr1ombaTRb7Fhpove1zfUuujlX9DWWBP5ag==", - "dev": true, - "peer": true, - "requires": { - "@es-joy/jsdoccomment": "~0.41.0", - "are-docs-informative": "^0.0.2", - "comment-parser": "1.4.1", - "debug": "^4.3.4", - "escape-string-regexp": "^4.0.0", - "esquery": "^1.5.0", - "is-builtin-module": "^3.2.1", - "semver": "^7.5.4", - "spdx-expression-parse": "^4.0.0" - }, - "dependencies": { - "semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "dev": true, - "peer": true - } - } - }, - "eslint-plugin-n": { - "version": "16.6.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.6.2.tgz", - "integrity": "sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==", - "dev": true, - "peer": true, - "requires": { - "@eslint-community/eslint-utils": "^4.4.0", - "builtins": "^5.0.1", - "eslint-plugin-es-x": "^7.5.0", - "get-tsconfig": "^4.7.0", - "globals": "^13.24.0", - "ignore": "^5.2.4", - "is-builtin-module": "^3.2.1", - "is-core-module": "^2.12.1", - "minimatch": "^3.1.2", - "resolve": "^1.22.2", - "semver": "^7.5.3" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "peer": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "peer": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "dev": true, - "peer": true - } - } - }, - "eslint-plugin-promise": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.6.0.tgz", - "integrity": "sha512-57Zzfw8G6+Gq7axm2Pdo3gW/Rx3h9Yywgn61uE/3elTCOePEHVrn2i5CdfBwA1BLK0Q0WqctICIUSqXZW/VprQ==", - "dev": true, - "peer": true, - "requires": {} - }, - "eslint-plugin-vue": { - "version": "9.33.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.33.0.tgz", - "integrity": "sha512-174lJKuNsuDIlLpjeXc5E2Tss8P44uIimAfGD0b90k0NoirJqpG7stLuU9Vp/9ioTOrQdWVREc4mRd1BD+CvGw==", - "dev": true, - "peer": true, - "requires": { - "@eslint-community/eslint-utils": "^4.4.0", - "globals": "^13.24.0", - "natural-compare": "^1.4.0", - "nth-check": "^2.1.1", - "postcss-selector-parser": "^6.0.15", - "semver": "^7.6.3", - "vue-eslint-parser": "^9.4.3", - "xml-name-validator": "^4.0.0" - }, - "dependencies": { - "semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "dev": true, - "peer": true - } - } + "dev": true }, "eslint-scope": { "version": "5.1.1", @@ -21985,13 +11824,6 @@ "estraverse": "^4.1.1" } }, - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "peer": true - }, "espree": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", @@ -22057,20 +11889,6 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true, - "peer": true - }, - "event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "dev": true, - "peer": true - }, "eventemitter3": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", @@ -22082,99 +11900,19 @@ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "peer": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, "expand-template": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "dev": true, - "optional": true - }, - "exponential-backoff": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.3.tgz", - "integrity": "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==", - "dev": true, - "optional": true - }, - "express": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", - "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", - "dev": true, - "peer": true, - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "~1.20.3", - "content-disposition": "~0.5.4", - "content-type": "~1.0.4", - "cookie": "~0.7.1", - "cookie-signature": "~1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.3.1", - "fresh": "~0.5.2", - "http-errors": "~2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "~2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "~0.1.12", - "proxy-addr": "~2.0.7", - "qs": "~6.14.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "~0.19.0", - "serve-static": "~1.16.2", - "setprototypeof": "1.2.0", - "statuses": "~2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "peer": true - }, - "qs": { - "version": "6.14.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz", - "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==", - "dev": true, - "peer": true, - "requires": { - "side-channel": "^1.1.0" - } - } - } + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "dev": true, + "optional": true + }, + "exponential-backoff": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.3.tgz", + "integrity": "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==", + "dev": true, + "optional": true }, "extend": { "version": "3.0.2", @@ -22238,16 +11976,6 @@ "path-expression-matcher": "^1.1.3" } }, - "fast-xml-parser": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.4.tgz", - "integrity": "sha512-jE8ugADnYOBsu1uaoayVl1tVKAMNOXyjwvv2U6udEA2ORBhDooJDWoGxTkhd4Qn4yh59JVVt/pKXtjPwx9OguQ==", - "dev": true, - "peer": true, - "requires": { - "strnum": "^1.0.5" - } - }, "fastest-levenshtein": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", @@ -22263,16 +11991,6 @@ "reusify": "^1.0.4" } }, - "faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, - "peer": true, - "requires": { - "websocket-driver": ">=0.5.1" - } - }, "fetch-blob": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", @@ -22308,41 +12026,6 @@ "to-regex-range": "^5.0.1" } }, - "finalhandler": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", - "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", - "dev": true, - "peer": 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.2", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "peer": true - } - } - }, "find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -22413,16 +12096,6 @@ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==" }, - "for-each": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", - "dev": true, - "peer": true, - "requires": { - "is-callable": "^1.2.7" - } - }, "foreground-child": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", @@ -22455,20 +12128,6 @@ "fetch-blob": "^3.1.2" } }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true, - "peer": true - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true, - "peer": true - }, "fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", @@ -22492,55 +12151,11 @@ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, - "fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "optional": true, - "peer": true - }, "function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" }, - "function.prototype.name": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", - "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "functions-have-names": "^1.2.3", - "hasown": "^2.0.2", - "is-callable": "^1.2.7" - } - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "peer": true - }, - "generator-function": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", - "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", - "dev": true, - "peer": true - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "peer": true - }, "get-intrinsic": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", @@ -22567,28 +12182,6 @@ "es-object-atoms": "^1.0.0" } }, - "get-symbol-description": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", - "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", - "dev": true, - "peer": true, - "requires": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6" - } - }, - "get-tsconfig": { - "version": "4.13.6", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.6.tgz", - "integrity": "sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==", - "dev": true, - "peer": true, - "requires": { - "resolve-pkg-maps": "^1.0.0" - } - }, "github-from-package": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", @@ -22640,14 +12233,6 @@ "is-glob": "^4.0.3" } }, - "glob-to-regex.js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/glob-to-regex.js/-/glob-to-regex.js-1.2.0.tgz", - "integrity": "sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ==", - "dev": true, - "peer": true, - "requires": {} - }, "glob-to-regexp": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", @@ -22694,17 +12279,6 @@ "type-fest": "^0.20.2" } }, - "globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", - "dev": true, - "peer": true, - "requires": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - } - }, "globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -22747,52 +12321,18 @@ "resolved": "https://registry.npmjs.org/gridstack/-/gridstack-10.3.1.tgz", "integrity": "sha512-Ra82k/88gdeiu3ZP40COS4bI4sGhNQlZAaAQ6szfPfr68zVpsXxiyLKr5zYcTpKX4jjcwyNsNNdcV1tDJc71fA==" }, - "handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true, - "peer": true - }, "hard-rejection": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true }, - "has-bigints": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", - "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", - "dev": true, - "peer": true - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, - "peer": true, - "requires": { - "es-define-property": "^1.0.0" - } - }, - "has-proto": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", - "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", - "dev": true, - "peer": true, - "requires": { - "dunder-proto": "^1.0.0" - } - }, "has-symbols": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", @@ -22806,34 +12346,12 @@ "has-symbols": "^1.0.3" } }, - "hash-base": { - "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, - "peer": true, - "requires": { - "inherits": "^2.0.4", - "safe-buffer": "^5.2.1" - } - }, "hash-sum": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", "dev": true }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "peer": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, "hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -22897,18 +12415,6 @@ "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.11.1.tgz", "integrity": "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==" }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "dev": true, - "peer": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, "hosted-git-info": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", @@ -22941,89 +12447,12 @@ "integrity": "sha512-ECg1JFG0YzehicQaogenlcs2qg6WsXQsxtnbr1i696u5tLUjtJdQAh0u2g0Q5YV45f263Ta1GnUJsc8WIfJf4Q==", "optional": true }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dev": true, - "peer": true, - "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "peer": true - }, - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "peer": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "peer": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "peer": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, "html-tags": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", "dev": true }, - "htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "dev": true, - "peer": true, - "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - }, - "dependencies": { - "entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, - "peer": true - } - } - }, "http-cache-semantics": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", @@ -23031,55 +12460,6 @@ "dev": true, "optional": true }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "dev": true, - "peer": true - }, - "http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", - "dev": true, - "peer": true, - "requires": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" - } - }, - "http-parser-js": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", - "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", - "dev": true, - "peer": true - }, - "http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "peer": true, - "requires": { - "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, - "peer": true - } - } - }, "http-proxy-agent": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", @@ -23091,36 +12471,6 @@ "debug": "^4.3.4" } }, - "http-proxy-middleware": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", - "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", - "dev": true, - "peer": true, - "requires": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "dependencies": { - "is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "dev": true, - "peer": true - } - } - }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", - "dev": true, - "peer": true - }, "https-proxy-agent": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", @@ -23132,35 +12482,18 @@ "debug": "4" } }, - "hyperdyperid": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", - "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", - "dev": true, - "peer": true - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "peer": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, "icss-utils": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "requires": {} + "dev": true }, "ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true + "dev": true, + "optional": true }, "ignore": { "version": "5.3.2", @@ -23168,13 +12501,6 @@ "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true }, - "immutable": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.5.tgz", - "integrity": "sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==", - "dev": true, - "peer": true - }, "import-fresh": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", @@ -23240,18 +12566,6 @@ "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" }, - "internal-slot": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", - "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", - "dev": true, - "peer": true, - "requires": { - "es-errors": "^1.3.0", - "hasown": "^2.0.2", - "side-channel": "^1.1.0" - } - }, "interpret": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", @@ -23265,132 +12579,21 @@ "dev": true, "optional": true }, - "ipaddr.js": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.3.0.tgz", - "integrity": "sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==", - "dev": true, - "peer": true - }, - "is-absolute-url": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-4.0.1.tgz", - "integrity": "sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A==" - }, - "is-arguments": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", - "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", - "dev": true, - "peer": true, - "requires": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - } - }, - "is-array-buffer": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", - "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "is-async-function": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", - "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", - "dev": true, - "peer": true, - "requires": { - "async-function": "^1.0.0", - "call-bound": "^1.0.3", - "get-proto": "^1.0.1", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - } - }, - "is-bigint": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", - "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", - "dev": true, - "peer": true, - "requires": { - "has-bigints": "^1.0.2" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "peer": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-boolean-object": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", - "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", - "dev": true, - "peer": true, - "requires": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-builtin-module": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", - "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", - "dev": true, - "peer": true, - "requires": { - "builtin-modules": "^3.3.0" - } - }, - "is-bun-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz", - "integrity": "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==", - "dev": true, - "peer": true, - "requires": { - "semver": "^7.7.1" - }, - "dependencies": { - "semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "dev": true, - "peer": true - } - } + "is-absolute-url": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-4.0.1.tgz", + "integrity": "sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A==" }, - "is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "peer": true + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "is-core-module": { "version": "2.16.1", @@ -23401,72 +12604,18 @@ "hasown": "^2.0.2" } }, - "is-data-view": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", - "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", - "dev": true, - "peer": true, - "requires": { - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "is-typed-array": "^1.1.13" - } - }, - "is-date-object": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", - "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", - "dev": true, - "peer": true, - "requires": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - } - }, - "is-docker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", - "dev": true, - "peer": true - }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true }, - "is-finalizationregistry": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", - "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", - "dev": true, - "peer": true, - "requires": { - "call-bound": "^1.0.3" - } - }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, - "is-generator-function": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", - "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", - "dev": true, - "peer": true, - "requires": { - "call-bound": "^1.0.4", - "generator-function": "^2.0.0", - "get-proto": "^1.0.1", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - } - }, "is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -23476,65 +12625,12 @@ "is-extglob": "^2.1.1" } }, - "is-inside-container": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", - "dev": true, - "peer": true, - "requires": { - "is-docker": "^3.0.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, - "peer": true - }, - "is-nan": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", - "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - } - }, - "is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", - "dev": true, - "peer": true - }, - "is-network-error": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.3.0.tgz", - "integrity": "sha512-6oIwpsgRfnDiyEDLMay/GqCl3HoAtH5+RUKW29gYkL0QA+ipzpDLA16yQs7/RHCSu+BwgbJaOUqa4A99qNVQVw==", - "dev": true, - "peer": true - }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, - "is-number-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", - "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", - "dev": true, - "peer": true, - "requires": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - } - }, "is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", @@ -23555,47 +12651,6 @@ "isobject": "^3.0.1" } }, - "is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, - "peer": true, - "requires": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - } - }, - "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, - "peer": true - }, - "is-shared-array-buffer": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", - "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", - "dev": true, - "peer": true, - "requires": { - "call-bound": "^1.0.3" - } - }, - "is-string": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", - "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", - "dev": true, - "peer": true, - "requires": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - } - }, "is-svg": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-6.1.0.tgz", @@ -23604,73 +12659,6 @@ "@file-type/xml": "^0.4.3" } }, - "is-symbol": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", - "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", - "dev": true, - "peer": true, - "requires": { - "call-bound": "^1.0.2", - "has-symbols": "^1.1.0", - "safe-regex-test": "^1.1.0" - } - }, - "is-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", - "dev": true, - "peer": true, - "requires": { - "which-typed-array": "^1.1.16" - } - }, - "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, - "peer": true - }, - "is-weakref": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", - "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", - "dev": true, - "peer": true, - "requires": { - "call-bound": "^1.0.3" - } - }, - "is-weakset": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", - "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", - "dev": true, - "peer": true, - "requires": { - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - } - }, - "is-wsl": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", - "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", - "dev": true, - "peer": true, - "requires": { - "is-inside-container": "^1.0.0" - } - }, - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true, - "peer": true - }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -23731,20 +12719,6 @@ "argparse": "^2.0.1" } }, - "jsdoc-type-pratt-parser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz", - "integrity": "sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==", - "dev": true, - "peer": true - }, - "jsesc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", - "dev": true, - "peer": true - }, "json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", @@ -23769,13 +12743,6 @@ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "peer": true - }, "keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -23797,17 +12764,6 @@ "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==", "dev": true }, - "launch-editor": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.13.0.tgz", - "integrity": "sha512-u+9asUHMJ99lA15VRMXw5XKfySFR9dGXwgsgS14YTbUq3GITP58mIM32At90P5fZ+MUId5Yw+IwI/yKub7jnCQ==", - "dev": true, - "peer": true, - "requires": { - "picocolors": "^1.1.1", - "shell-quote": "^1.8.3" - } - }, "layerr": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/layerr/-/layerr-3.0.0.tgz", @@ -23827,8 +12783,7 @@ "leaflet.markercluster": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/leaflet.markercluster/-/leaflet.markercluster-1.5.3.tgz", - "integrity": "sha512-vPTw/Bndq7eQHjLBVlWpnGeLa3t+3zGiuM7fJwCkiMFq+nmRuG3RI3f7f4N4TDX7T4NpbAXpR2+NTRSEGfCSeA==", - "requires": {} + "integrity": "sha512-vPTw/Bndq7eQHjLBVlWpnGeLa3t+3zGiuM7fJwCkiMFq+nmRuG3RI3f7f4N4TDX7T4NpbAXpR2+NTRSEGfCSeA==" }, "levn": { "version": "0.4.1", @@ -23862,14 +12817,7 @@ "linkify-string": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/linkify-string/-/linkify-string-4.3.2.tgz", - "integrity": "sha512-JqBuQpSa+CSj2tskIII70SKOjPfjXwDFyjRRNFTrlg76gp2nap36xeRj/cWaXxukqBNrxM+L07XyKRsUtH/DpQ==", - "requires": {} - }, - "linkifyjs": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/linkifyjs/-/linkifyjs-4.3.2.tgz", - "integrity": "sha512-NT1CJtq3hHIreOianA8aSXn6Cw0JzYOuDQbOrSPe7gqFnCpKP++MQe3ODgO3oh2GJFORkAAdqredOa60z63GbA==", - "peer": true + "integrity": "sha512-JqBuQpSa+CSj2tskIII70SKOjPfjXwDFyjRRNFTrlg76gp2nap36xeRj/cWaXxukqBNrxM+L07XyKRsUtH/DpQ==" }, "loader-runner": { "version": "4.3.1", @@ -23908,13 +12856,6 @@ "p-locate": "^5.0.0" } }, - "lodash": { - "version": "4.17.23", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", - "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", - "dev": true, - "peer": true - }, "lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", @@ -23947,16 +12888,6 @@ "highlight.js": "~11.11.0" } }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "peer": true, - "requires": { - "yallist": "^3.0.2" - } - }, "make-fetch-happen": { "version": "14.0.3", "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-14.0.3.tgz", @@ -24018,18 +12949,6 @@ "is-buffer": "~1.1.6" } }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "peer": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, "mdast-squeeze-paragraphs": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-6.0.0.tgz", @@ -24115,36 +13034,6 @@ "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", "dev": true }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "dev": true, - "peer": true - }, - "memfs": { - "version": "4.56.10", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.56.10.tgz", - "integrity": "sha512-eLvzyrwqLHnLYalJP7YZ3wBe79MXktMdfQbvMrVD80K+NhrIukCVBvgP30zTJYEEDh9hZ/ep9z0KOdD7FSHo7w==", - "dev": true, - "peer": true, - "requires": { - "@jsonjoy.com/fs-core": "4.56.10", - "@jsonjoy.com/fs-fsa": "4.56.10", - "@jsonjoy.com/fs-node": "4.56.10", - "@jsonjoy.com/fs-node-builtins": "4.56.10", - "@jsonjoy.com/fs-node-to-fsa": "4.56.10", - "@jsonjoy.com/fs-node-utils": "4.56.10", - "@jsonjoy.com/fs-print": "4.56.10", - "@jsonjoy.com/fs-snapshot": "4.56.10", - "@jsonjoy.com/json-pack": "^1.11.0", - "@jsonjoy.com/util": "^1.9.0", - "glob-to-regex.js": "^1.0.1", - "thingies": "^2.5.0", - "tree-dump": "^1.0.3", - "tslib": "^2.0.0" - } - }, "meow": { "version": "10.1.5", "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz", @@ -24173,13 +13062,6 @@ } } }, - "merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", - "dev": true, - "peer": true - }, "merge-source-map": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", @@ -24209,13 +13091,6 @@ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true, - "peer": true - }, "mgrs": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/mgrs/-/mgrs-1.0.0.tgz", @@ -24442,33 +13317,6 @@ "picomatch": "^2.3.1" } }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", - "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", - "dev": true, - "peer": true - } - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "peer": true - }, "mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -24489,25 +13337,11 @@ "dev": true, "optional": true }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true, - "peer": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "dev": true, - "peer": true - }, "minimatch": { "version": "9.0.9", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", - "devOptional": true, + "optional": true, "requires": { "brace-expansion": "^2.0.2" } @@ -24683,17 +13517,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, - "multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "dev": true, - "peer": true, - "requires": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - } - }, "nan": { "version": "2.22.2", "resolved": "https://registry.npmjs.org/nan/-/nan-2.22.2.tgz", @@ -24713,13 +13536,6 @@ "dev": true, "optional": true }, - "napi-postinstall": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz", - "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==", - "dev": true, - "peer": true - }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -24739,13 +13555,6 @@ "randexp": "0.4.6" } }, - "negotiator": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", - "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", - "dev": true, - "peer": true - }, "neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", @@ -24777,14 +13586,6 @@ } } }, - "node-addon-api": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", - "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", - "dev": true, - "optional": true, - "peer": true - }, "node-domexception": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", @@ -24855,48 +13656,6 @@ } } }, - "node-polyfill-webpack-plugin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/node-polyfill-webpack-plugin/-/node-polyfill-webpack-plugin-4.0.0.tgz", - "integrity": "sha512-WLk77vLpbcpmTekRj6s6vYxk30XoyaY5MDZ4+9g8OaKoG3Ij+TjOqhpQjVUlfDZBPBgpNATDltaQkzuXSnnkwg==", - "dev": true, - "peer": true, - "requires": { - "assert": "^2.1.0", - "browserify-zlib": "^0.2.0", - "buffer": "^6.0.3", - "console-browserify": "^1.2.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.12.0", - "domain-browser": "^5.7.0", - "events": "^3.3.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "^1.0.1", - "process": "^0.11.10", - "punycode": "^2.3.1", - "querystring-es3": "^0.2.1", - "readable-stream": "^4.5.2", - "stream-browserify": "^3.0.0", - "stream-http": "^3.2.0", - "string_decoder": "^1.3.0", - "timers-browserify": "^2.0.12", - "tty-browserify": "^0.0.1", - "type-fest": "^4.18.2", - "url": "^0.11.3", - "util": "^0.12.5", - "vm-browserify": "^1.1.2" - }, - "dependencies": { - "type-fest": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", - "dev": true, - "peer": true - } - } - }, "node-releases": { "version": "2.0.27", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", @@ -24939,118 +13698,6 @@ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, - "nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "peer": true, - "requires": { - "boolbase": "^1.0.0" - } - }, - "object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "dev": true, - "peer": true - }, - "object-is": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", - "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "peer": true - }, - "object.assign": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", - "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0", - "has-symbols": "^1.1.0", - "object-keys": "^1.1.1" - } - }, - "object.fromentries": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - } - }, - "object.groupby": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", - "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2" - } - }, - "object.values": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", - "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - } - }, - "obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true, - "peer": true - }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "peer": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", - "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", - "dev": true, - "peer": true - }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -25060,19 +13707,6 @@ "wrappy": "1" } }, - "open": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", - "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", - "dev": true, - "peer": true, - "requires": { - "default-browser": "^5.2.1", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", - "wsl-utils": "^0.1.0" - } - }, "optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -25087,25 +13721,6 @@ "word-wrap": "^1.2.5" } }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", - "dev": true, - "peer": true - }, - "own-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", - "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", - "dev": true, - "peer": true, - "requires": { - "get-intrinsic": "^1.2.6", - "object-keys": "^1.1.1", - "safe-push-apply": "^1.0.0" - } - }, "p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -25140,18 +13755,6 @@ "p-timeout": "^6.1.2" } }, - "p-retry": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.1.tgz", - "integrity": "sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==", - "dev": true, - "peer": true, - "requires": { - "@types/retry": "0.12.2", - "is-network-error": "^1.0.0", - "retry": "^0.13.1" - } - }, "p-timeout": { "version": "6.1.4", "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz", @@ -25176,13 +13779,6 @@ "integrity": "sha512-N5ixXjzTy4QDQH0Q9YFjqIWd6zH6936Djpl2m9QNFmDv5Fum8q8BjkpAcHNMzOFE0IwQrFhJWex3AN6kS0OSwg==", "dev": true }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true, - "peer": true - }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -25192,20 +13788,6 @@ "callsites": "^3.0.0" } }, - "parse-asn1": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.9.tgz", - "integrity": "sha512-fIYNuZ/HastSb80baGOuPRo1O9cf4baWw5WsAp7dBuUzeTD/BoaG8sVTdlPFksBE2lF21dN+A1AnrpIjSWqHHg==", - "dev": true, - "peer": true, - "requires": { - "asn1.js": "^4.10.1", - "browserify-aes": "^1.2.0", - "evp_bytestokey": "^1.0.3", - "pbkdf2": "^3.1.5", - "safe-buffer": "^5.2.1" - } - }, "parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -25218,20 +13800,6 @@ "lines-and-columns": "^1.1.6" } }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, - "peer": true - }, - "path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true, - "peer": true - }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -25288,34 +13856,12 @@ } } }, - "path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", - "dev": true, - "peer": true - }, "path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true }, - "pbkdf2": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.5.tgz", - "integrity": "sha512-Q3CG/cYvCO1ye4QKkuH7EXxs3VC/rI1/trd+qX2+PolbaKG0H+bgcZzrTt96mMyRtejk+JMCiLUn3y29W8qmFQ==", - "dev": true, - "peer": true, - "requires": { - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "ripemd160": "^2.0.3", - "safe-buffer": "^5.2.1", - "sha.js": "^2.4.12", - "to-buffer": "^1.2.1" - } - }, "picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -25339,8 +13885,7 @@ "vue-demi": { "version": "0.14.10", "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", - "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", - "requires": {} + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==" } } }, @@ -25392,28 +13937,6 @@ } } }, - "pkijs": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/pkijs/-/pkijs-3.3.3.tgz", - "integrity": "sha512-+KD8hJtqQMYoTuL1bbGOqxb4z+nZkTAwVdNtWwe8Tc2xNbEmdJYIYoc6Qt0uF55e6YW6KuTHw1DjQ18gMhzepw==", - "dev": true, - "peer": true, - "requires": { - "@noble/hashes": "1.4.0", - "asn1js": "^3.0.6", - "bytestreamjs": "^2.0.1", - "pvtsutils": "^1.3.6", - "pvutils": "^1.1.3", - "tslib": "^2.8.1" - } - }, - "possible-typed-array-names": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", - "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", - "dev": true, - "peer": true - }, "postcss": { "version": "8.5.6", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", @@ -25424,41 +13947,11 @@ "source-map-js": "^1.2.1" } }, - "postcss-html": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-1.8.1.tgz", - "integrity": "sha512-OLF6P7qctfAWayOhLpcVnTGqVeJzu2W3WpIYelfz2+JV5oGxfkcEvweN9U4XpeqE0P98dcD9ssusGwlF0TK0uQ==", - "dev": true, - "peer": true, - "requires": { - "htmlparser2": "^8.0.0", - "js-tokens": "^9.0.0", - "postcss": "^8.5.0", - "postcss-safe-parser": "^6.0.0" - }, - "dependencies": { - "js-tokens": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", - "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", - "dev": true, - "peer": true - } - } - }, - "postcss-media-query-parser": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", - "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", - "dev": true, - "peer": true - }, "postcss-modules-extract-imports": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", - "dev": true, - "requires": {} + "dev": true }, "postcss-modules-local-by-default": { "version": "4.2.0", @@ -25523,16 +14016,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", - "dev": true, - "requires": {} - }, - "postcss-scss": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz", - "integrity": "sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==", - "dev": true, - "peer": true, - "requires": {} + "dev": true }, "postcss-selector-parser": { "version": "6.1.2", @@ -25590,20 +14074,6 @@ "dev": true, "optional": true }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true, - "peer": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true, - "peer": true - }, "proj4": { "version": "2.20.4", "resolved": "https://registry.npmjs.org/proj4/-/proj4-2.20.4.tgz", @@ -25638,26 +14108,6 @@ "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==" }, - "proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "peer": true, - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "dependencies": { - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true, - "peer": true - } - } - }, "proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -25669,30 +14119,6 @@ "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", "dev": true }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "peer": true, - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.12.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", - "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", - "dev": true, - "peer": true - } - } - }, "pump": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", @@ -25710,40 +14136,6 @@ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true }, - "pvtsutils": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.6.tgz", - "integrity": "sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==", - "dev": true, - "peer": true, - "requires": { - "tslib": "^2.8.1" - } - }, - "pvutils": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.5.tgz", - "integrity": "sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA==", - "dev": true, - "peer": true - }, - "qs": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz", - "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==", - "dev": true, - "peer": true, - "requires": { - "side-channel": "^1.1.0" - } - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", - "dev": true, - "peer": true - }, "querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", @@ -25780,47 +14172,6 @@ "ret": "~0.1.10" } }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "peer": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "peer": true, - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true, - "peer": true - }, - "raw-body": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", - "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", - "dev": true, - "peer": true, - "requires": { - "bytes": "~3.1.2", - "http-errors": "~2.0.1", - "iconv-lite": "~0.4.24", - "unpipe": "~1.0.0" - } - }, "rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -25882,27 +14233,6 @@ } } }, - "readable-stream": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", - "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", - "dev": true, - "peer": true, - "requires": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - } - }, - "readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", - "dev": true, - "peer": true - }, "rechoir": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", @@ -25922,45 +14252,6 @@ "strip-indent": "^4.0.0" } }, - "reflect-metadata": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", - "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", - "dev": true, - "peer": true - }, - "reflect.getprototypeof": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", - "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.9", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.7", - "get-proto": "^1.0.1", - "which-builtin-type": "^1.2.1" - } - }, - "regexp.prototype.flags": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", - "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "set-function-name": "^2.0.2" - } - }, "rehype-external-links": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/rehype-external-links/-/rehype-external-links-3.0.0.tgz", @@ -26109,18 +14400,11 @@ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true }, - "requireindex": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", - "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", - "dev": true, - "peer": true - }, "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "devOptional": true + "optional": true }, "resolve": { "version": "1.22.11", @@ -26156,20 +14440,6 @@ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, - "resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "dev": true, - "peer": true - }, - "resolve.exports": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", - "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", - "dev": true, - "peer": true - }, "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", @@ -26177,13 +14447,6 @@ "dev": true, "optional": true }, - "retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "dev": true, - "peer": true - }, "reusify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", @@ -26199,90 +14462,6 @@ "glob": "^7.1.3" } }, - "ripemd160": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.3.tgz", - "integrity": "sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA==", - "dev": true, - "peer": true, - "requires": { - "hash-base": "^3.1.2", - "inherits": "^2.0.4" - }, - "dependencies": { - "hash-base": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.2.tgz", - "integrity": "sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg==", - "dev": true, - "peer": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^2.3.8", - "safe-buffer": "^5.2.1", - "to-buffer": "^1.2.1" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "peer": true - }, - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "peer": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "peer": true - } - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "peer": true, - "requires": { - "safe-buffer": "~5.1.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "peer": true - } - } - } - } - }, - "run-applescript": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", - "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", - "dev": true, - "peer": true - }, "run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -26292,342 +14471,83 @@ "queue-microtask": "^1.2.2" } }, - "safe-array-concat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", - "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "has-symbols": "^1.1.0", - "isarray": "^2.0.5" - } - }, "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 - }, - "safe-push-apply": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", - "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", - "dev": true, - "peer": true, - "requires": { - "es-errors": "^1.3.0", - "isarray": "^2.0.5" - } - }, - "safe-regex-test": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", - "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", "dev": true, - "peer": true, - "requires": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-regex": "^1.2.1" - } + "optional": true }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sass": { - "version": "1.97.3", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.97.3.tgz", - "integrity": "sha512-fDz1zJpd5GycprAbu4Q2PV/RprsRtKC/0z82z0JLgdytmcq0+ujJbJ/09bPGDxCLkKY3Np5cRAOcWiVkLXJURg==", "dev": true, - "peer": true, - "requires": { - "@parcel/watcher": "^2.4.1", - "chokidar": "^4.0.0", - "immutable": "^5.0.2", - "source-map-js": ">=0.6.2 <2.0.0" - } + "optional": true }, "sass-loader": { "version": "16.0.7", "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.7.tgz", "integrity": "sha512-w6q+fRHourZ+e+xA1kcsF27iGM6jdB8teexYCfdUw0sYgcDNeZESnDNT9sUmmPm3ooziwUJXGwZJSTF3kOdBfA==", "dev": true, - "peer": true, "requires": { "neo-async": "^2.6.2" } }, "sax": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.4.tgz", - "integrity": "sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==" - }, - "schema-utils": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", - "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "dependencies": { - "ajv": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", - "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - } - } - }, - "schemes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/schemes/-/schemes-1.4.0.tgz", - "integrity": "sha512-ImFy9FbCsQlVgnE3TCWmLPCFnVzx0lHL/l+umHplDqAKd0dzFpnS6lFZIpagBlYhKwzVmlV36ec0Y1XTu8JBAQ==", - "dev": true, - "optional": true, - "requires": { - "extend": "^3.0.0" - } - }, - "select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "dev": true, - "peer": true - }, - "selfsigned": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-5.5.0.tgz", - "integrity": "sha512-ftnu3TW4+3eBfLRFnDEkzGxSF/10BJBkaLJuBHZX0kiPS7bRdlpZGu6YGt4KngMkdTwJE6MbjavFpqHvqVt+Ew==", - "dev": true, - "peer": true, - "requires": { - "@peculiar/x509": "^1.14.2", - "pkijs": "^3.3.3" - } - }, - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "peer": true - }, - "send": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", - "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", - "dev": true, - "peer": true, - "requires": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "~0.5.2", - "http-errors": "~2.0.1", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "~2.4.1", - "range-parser": "~1.2.1", - "statuses": "~2.0.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "peer": true, - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "peer": true - } - } - } - } + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.4.tgz", + "integrity": "sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==" }, - "serve-index": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.2.tgz", - "integrity": "sha512-KDj11HScOaLmrPxl70KYNW1PksP4Nb/CLL2yvC+Qd2kHMPEEpfc4Re2e4FOay+bC/+XQl/7zAcWON3JVo5v3KQ==", + "schema-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", "dev": true, - "peer": true, "requires": { - "accepts": "~1.3.8", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.8.0", - "mime-types": "~2.1.35", - "parseurl": "~1.3.3" + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "ajv": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "dev": true, - "peer": true, "requires": { - "ms": "2.0.0" + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" } }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true, - "peer": true - }, - "http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, - "peer": true, "requires": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.1" + "fast-deep-equal": "^3.1.3" } }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "peer": true - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true, - "peer": true + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true } } }, - "serve-static": { - "version": "1.16.3", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", - "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", - "dev": true, - "peer": true, - "requires": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "~0.19.1" - } - }, - "set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dev": true, - "peer": true, - "requires": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - } - }, - "set-function-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", - "dev": true, - "peer": true, - "requires": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" - } - }, - "set-proto": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", - "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", - "dev": true, - "peer": true, - "requires": { - "dunder-proto": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0" - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true, - "peer": true - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true, - "peer": true - }, - "sha.js": { - "version": "2.4.12", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz", - "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", + "schemes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/schemes/-/schemes-1.4.0.tgz", + "integrity": "sha512-ImFy9FbCsQlVgnE3TCWmLPCFnVzx0lHL/l+umHplDqAKd0dzFpnS6lFZIpagBlYhKwzVmlV36ec0Y1XTu8JBAQ==", "dev": true, - "peer": true, + "optional": true, "requires": { - "inherits": "^2.0.4", - "safe-buffer": "^5.2.1", - "to-buffer": "^1.2.0" + "extend": "^3.0.0" } }, "shallow-clone": { @@ -26654,65 +14574,6 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, - "shell-quote": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", - "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", - "dev": true, - "peer": true - }, - "side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "dev": true, - "peer": true, - "requires": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - } - }, - "side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "dev": true, - "peer": true, - "requires": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - } - }, - "side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "dev": true, - "peer": true, - "requires": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - } - }, - "side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "dev": true, - "peer": true, - "requires": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - } - }, "signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", @@ -26772,18 +14633,6 @@ "nearley": "^2.20.1" } }, - "sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "dev": true, - "peer": true, - "requires": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, "socks": { "version": "2.8.7", "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", @@ -26807,13 +14656,6 @@ "socks": "^2.8.3" } }, - "source-map": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", - "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", - "dev": true, - "peer": true - }, "source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -26886,49 +14728,6 @@ "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==", "dev": true }, - "spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dev": true, - "peer": true, - "requires": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - } - }, - "spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dev": true, - "peer": true, - "requires": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - }, - "dependencies": { - "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, - "peer": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, "splitpanes": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/splitpanes/-/splitpanes-2.4.1.tgz", @@ -26944,88 +14743,12 @@ "minipass": "^7.0.3" } }, - "stable-hash": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz", - "integrity": "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==", - "dev": true, - "peer": true - }, - "statuses": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", - "dev": true, - "peer": true - }, - "stop-iteration-iterator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", - "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", - "dev": true, - "peer": true, - "requires": { - "es-errors": "^1.3.0", - "internal-slot": "^1.1.0" - } - }, - "stream-browserify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", - "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", - "dev": true, - "peer": true, - "requires": { - "inherits": "~2.0.4", - "readable-stream": "^3.5.0" - }, - "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, - "peer": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "stream-http": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", - "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", - "dev": true, - "peer": true, - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "xtend": "^4.0.2" - }, - "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, - "peer": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, + "optional": true, "requires": { "safe-buffer": "~5.2.0" } @@ -27077,47 +14800,6 @@ "strip-ansi": "^6.0.1" } }, - "string.prototype.trim": { - "version": "1.2.10", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", - "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "define-data-property": "^1.1.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-object-atoms": "^1.0.0", - "has-property-descriptors": "^1.0.2" - } - }, - "string.prototype.trimend": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", - "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - } - }, - "string.prototype.trimstart": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - } - }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -27137,13 +14819,6 @@ "ansi-regex": "^5.0.1" } }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "peer": true - }, "strip-indent": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.1.1.tgz", @@ -27161,13 +14836,6 @@ "resolved": "https://registry.npmjs.org/striptags/-/striptags-3.2.0.tgz", "integrity": "sha512-g45ZOGzHDMe2bdYMdIvdAfCQkCTDMGBazSw1ypMowwGIee7ZQ5dU0rBJ8Jqgl+jAKIv4dbeE1jscZq9wid1Tkw==" }, - "strnum": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.1.2.tgz", - "integrity": "sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==", - "dev": true, - "peer": true - }, "strtok3": { "version": "10.3.4", "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-10.3.4.tgz", @@ -27180,8 +14848,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-4.0.0.tgz", "integrity": "sha512-1V4WqhhZZgjVAVJyt7TdDPZoPBPNHbekX4fWnCJL1yQukhCeZhJySUL+gL9y6sNdN95uEOS83Y55SqHcP7MzLA==", - "dev": true, - "requires": {} + "dev": true }, "style-search": { "version": "0.1.0", @@ -27274,69 +14941,6 @@ } } }, - "stylelint-config-html": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stylelint-config-html/-/stylelint-config-html-1.1.0.tgz", - "integrity": "sha512-IZv4IVESjKLumUGi+HWeb7skgO6/g4VMuAYrJdlqQFndgbj6WJAXPhaysvBiXefX79upBdQVumgYcdd17gCpjQ==", - "dev": true, - "peer": true, - "requires": {} - }, - "stylelint-config-recommended": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-13.0.0.tgz", - "integrity": "sha512-EH+yRj6h3GAe/fRiyaoO2F9l9Tgg50AOFhaszyfov9v6ayXJ1IkSHwTxd7lB48FmOeSGDPLjatjO11fJpmarkQ==", - "dev": true, - "peer": true, - "requires": {} - }, - "stylelint-config-recommended-scss": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-13.1.0.tgz", - "integrity": "sha512-8L5nDfd+YH6AOoBGKmhH8pLWF1dpfY816JtGMePcBqqSsLU+Ysawx44fQSlMOJ2xTfI9yTGpup5JU77c17w1Ww==", - "dev": true, - "peer": true, - "requires": { - "postcss-scss": "^4.0.9", - "stylelint-config-recommended": "^13.0.0", - "stylelint-scss": "^5.3.0" - } - }, - "stylelint-config-recommended-vue": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended-vue/-/stylelint-config-recommended-vue-1.6.1.tgz", - "integrity": "sha512-lLW7hTIMBiTfjenGuDq2kyHA6fBWd/+Df7MO4/AWOxiFeXP9clbpKgg27kHfwA3H7UNMGC7aeP3mNlZB5LMmEQ==", - "dev": true, - "peer": true, - "requires": { - "semver": "^7.3.5", - "stylelint-config-html": ">=1.0.0", - "stylelint-config-recommended": ">=6.0.0" - }, - "dependencies": { - "semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "dev": true, - "peer": true - } - } - }, - "stylelint-scss": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-5.3.2.tgz", - "integrity": "sha512-4LzLaayFhFyneJwLo0IUa8knuIvj+zF0vBFueQs4e3tEaAMIQX8q5th8ziKkgOavr6y/y9yoBe+RXN/edwLzsQ==", - "dev": true, - "peer": true, - "requires": { - "known-css-properties": "^0.29.0", - "postcss-media-query-parser": "^0.2.3", - "postcss-resolve-nested-selector": "^0.1.1", - "postcss-selector-parser": "^6.0.13", - "postcss-value-parser": "^4.2.0" - } - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -27368,6 +14972,70 @@ "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", "dev": true }, + "svg.draggable.js": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/svg.draggable.js/-/svg.draggable.js-2.2.2.tgz", + "integrity": "sha512-JzNHBc2fLQMzYCZ90KZHN2ohXL0BQJGQimK1kGk6AvSeibuKcIdDX9Kr0dT9+UJ5O8nYA0RB839Lhvk4CY4MZw==", + "requires": { + "svg.js": "^2.0.1" + } + }, + "svg.easing.js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/svg.easing.js/-/svg.easing.js-2.0.0.tgz", + "integrity": "sha512-//ctPdJMGy22YoYGV+3HEfHbm6/69LJUTAqI2/5qBvaNHZ9uUFVC82B0Pl299HzgH13rKrBgi4+XyXXyVWWthA==", + "requires": { + "svg.js": ">=2.3.x" + } + }, + "svg.filter.js": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/svg.filter.js/-/svg.filter.js-2.0.2.tgz", + "integrity": "sha512-xkGBwU+dKBzqg5PtilaTb0EYPqPfJ9Q6saVldX+5vCRy31P6TlRCP3U9NxH3HEufkKkpNgdTLBJnmhDHeTqAkw==", + "requires": { + "svg.js": "^2.2.5" + } + }, + "svg.js": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/svg.js/-/svg.js-2.7.1.tgz", + "integrity": "sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA==" + }, + "svg.pathmorphing.js": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/svg.pathmorphing.js/-/svg.pathmorphing.js-0.1.3.tgz", + "integrity": "sha512-49HWI9X4XQR/JG1qXkSDV8xViuTLIWm/B/7YuQELV5KMOPtXjiwH4XPJvr/ghEDibmLQ9Oc22dpWpG0vUDDNww==", + "requires": { + "svg.js": "^2.4.0" + } + }, + "svg.resize.js": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/svg.resize.js/-/svg.resize.js-1.4.3.tgz", + "integrity": "sha512-9k5sXJuPKp+mVzXNvxz7U0uC9oVMQrrf7cFsETznzUDDm0x8+77dtZkWdMfRlmbkEEYvUn9btKuZ3n41oNA+uw==", + "requires": { + "svg.js": "^2.6.5", + "svg.select.js": "^2.1.2" + }, + "dependencies": { + "svg.select.js": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/svg.select.js/-/svg.select.js-2.1.2.tgz", + "integrity": "sha512-tH6ABEyJsAOVAhwcCjF8mw4crjXSI1aa7j2VQR8ZuJ37H2MBUbyeqYr5nEO7sSN3cy9AR9DUwNg0t/962HlDbQ==", + "requires": { + "svg.js": "^2.2.5" + } + } + } + }, + "svg.select.js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/svg.select.js/-/svg.select.js-3.0.1.tgz", + "integrity": "sha512-h5IS/hKkuVCbKSieR9uQCj9w+zLHoPh+ce19bBYyqF53g6mnPB8sAtIbe1s9dh2S2fCmYX2xel1Ln3PJBbK4kw==", + "requires": { + "svg.js": "^2.6.5" + } + }, "tabbable": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.4.0.tgz", @@ -27515,31 +15183,6 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, - "thingies": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/thingies/-/thingies-2.5.0.tgz", - "integrity": "sha512-s+2Bwztg6PhWUD7XMfeYm5qliDdSiZm7M7n8KjTkIsm3l/2lgVRc2/Gx/v+ZX8lT4FMA+i8aQvhcWylldc+ZNw==", - "dev": true, - "peer": true, - "requires": {} - }, - "thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true, - "peer": true - }, - "timers-browserify": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", - "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", - "dev": true, - "peer": true, - "requires": { - "setimmediate": "^1.0.4" - } - }, "tinycolor2": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", @@ -27550,6 +15193,7 @@ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", "dev": true, + "optional": true, "requires": { "fdir": "^6.5.0", "picomatch": "^4.0.3" @@ -27560,28 +15204,17 @@ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, - "requires": {} + "optional": true }, "picomatch": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true + "dev": true, + "optional": true } } }, - "to-buffer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.2.tgz", - "integrity": "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==", - "dev": true, - "peer": true, - "requires": { - "isarray": "^2.0.5", - "safe-buffer": "^5.2.1", - "typed-array-buffer": "^1.0.3" - } - }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -27596,21 +15229,6 @@ "resolved": "https://registry.npmjs.org/toastify-js/-/toastify-js-1.12.0.tgz", "integrity": "sha512-HeMHCO9yLPvP9k0apGSdPUWrUbLnxUKNFzgUoZp1PHCLploIX/4DSQ7V8H25ef+h4iO9n0he7ImfcndnN6nDrQ==" }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, - "peer": true - }, - "tree-dump": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.1.0.tgz", - "integrity": "sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA==", - "dev": true, - "peer": true, - "requires": {} - }, "tributejs": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/tributejs/-/tributejs-5.1.3.tgz", @@ -27632,95 +15250,6 @@ "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==" }, - "ts-api-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", - "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", - "dev": true, - "peer": true, - "requires": {} - }, - "ts-loader": { - "version": "9.5.4", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.4.tgz", - "integrity": "sha512-nCz0rEwunlTZiy6rXFByQU1kVVpCIgUpc/psFiKVrUwrizdnIbRFu8w7bxhUF0X613DYwT4XzrZHpVyMe758hQ==", - "dev": true, - "peer": true, - "requires": { - "chalk": "^4.1.0", - "enhanced-resolve": "^5.0.0", - "micromatch": "^4.0.0", - "semver": "^7.3.4", - "source-map": "^0.7.4" - }, - "dependencies": { - "semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "dev": true, - "peer": true - } - } - }, - "tsconfig-paths": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", - "dev": true, - "peer": true, - "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "peer": true, - "requires": { - "minimist": "^1.2.0" - } - } - } - }, - "tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "peer": true - }, - "tsyringe": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/tsyringe/-/tsyringe-4.10.0.tgz", - "integrity": "sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw==", - "dev": true, - "peer": true, - "requires": { - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true, - "peer": true - } - } - }, - "tty-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", - "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", - "dev": true, - "peer": true - }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -27746,100 +15275,12 @@ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "peer": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typed-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", - "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", - "dev": true, - "peer": true, - "requires": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.14" - } - }, - "typed-array-byte-length": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", - "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", - "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.14" - } - }, - "typed-array-byte-offset": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", - "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", - "dev": true, - "peer": true, - "requires": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.15", - "reflect.getprototypeof": "^1.0.9" - } - }, - "typed-array-length": { - "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, - "peer": true, - "requires": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0", - "reflect.getprototypeof": "^1.0.6" - } - }, - "typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "devOptional": true, - "peer": true - }, "typescript-event-target": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/typescript-event-target/-/typescript-event-target-1.1.2.tgz", "integrity": "sha512-TvkrTUpv7gCPlcnSoEwUVUBwsdheKm+HF5u2tPAKubkIGMfovdSizCTaZRY/NhR8+Ijy8iZZUapbVQAsNrkFrw==", "optional": true }, - "unbox-primitive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", - "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", - "dev": true, - "peer": true, - "requires": { - "call-bound": "^1.0.3", - "has-bigints": "^1.0.2", - "has-symbols": "^1.1.0", - "which-boxed-primitive": "^1.1.1" - } - }, "undici-types": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", @@ -27940,42 +15381,6 @@ "unist-util-is": "^6.0.0" } }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true, - "peer": true - }, - "unrs-resolver": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz", - "integrity": "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==", - "dev": true, - "peer": true, - "requires": { - "@unrs/resolver-binding-android-arm-eabi": "1.11.1", - "@unrs/resolver-binding-android-arm64": "1.11.1", - "@unrs/resolver-binding-darwin-arm64": "1.11.1", - "@unrs/resolver-binding-darwin-x64": "1.11.1", - "@unrs/resolver-binding-freebsd-x64": "1.11.1", - "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", - "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", - "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", - "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", - "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", - "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", - "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", - "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", - "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", - "@unrs/resolver-binding-linux-x64-musl": "1.11.1", - "@unrs/resolver-binding-wasm32-wasi": "1.11.1", - "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", - "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", - "@unrs/resolver-binding-win32-x64-msvc": "1.11.1", - "napi-postinstall": "^0.3.0" - } - }, "update-browserslist-db": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", @@ -27995,26 +15400,6 @@ "punycode": "^2.1.0" } }, - "url": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.4.tgz", - "integrity": "sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==", - "dev": true, - "peer": true, - "requires": { - "punycode": "^1.4.1", - "qs": "^6.12.3" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true, - "peer": true - } - } - }, "url-join": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz", @@ -28031,40 +15416,12 @@ "requires-port": "^1.0.0" } }, - "util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "dev": true, - "peer": true, - "requires": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true, - "peer": true - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "peer": true - }, "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -28087,13 +15444,6 @@ } } }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true, - "peer": true - }, "vfile": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", @@ -28112,13 +15462,6 @@ "unist-util-stringify-position": "^4.0.0" } }, - "vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "dev": true, - "peer": true - }, "vue": { "version": "2.7.16", "resolved": "https://registry.npmjs.org/vue/-/vue-2.7.16.tgz", @@ -28128,6 +15471,11 @@ "csstype": "^3.1.0" } }, + "vue-apexcharts": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/vue-apexcharts/-/vue-apexcharts-1.7.0.tgz", + "integrity": "sha512-QMpvBllJ1XvFsK4dwcbyxKalVpHfJnoqsNWszY55HJk/Sn7WP1f5YUv4JIzugqu4GTQB6gLcCVwwPDQFtwr0oQ==" + }, "vue-color": { "version": "2.8.2", "resolved": "https://registry.npmjs.org/vue-color/-/vue-color-2.8.2.tgz", @@ -28139,61 +15487,10 @@ "tinycolor2": "^1.1.2" } }, - "vue-eslint-parser": { - "version": "9.4.3", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz", - "integrity": "sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==", - "dev": true, - "peer": true, - "requires": { - "debug": "^4.3.4", - "eslint-scope": "^7.1.1", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.1", - "esquery": "^1.4.0", - "lodash": "^4.17.21", - "semver": "^7.3.6" - }, - "dependencies": { - "eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "peer": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "peer": true - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "peer": true - }, - "semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "dev": true, - "peer": true - } - } - }, "vue-frag": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/vue-frag/-/vue-frag-1.4.3.tgz", - "integrity": "sha512-pQZj03f/j9LRhzz9vKaXTCXUHVYHuAXicshFv76VFqwz4MG3bcb+sPZMAbd0wmw7THjkrTPuoM0EG9TbG8CgMQ==", - "requires": {} + "integrity": "sha512-pQZj03f/j9LRhzz9vKaXTCXUHVYHuAXicshFv76VFqwz4MG3bcb+sPZMAbd0wmw7THjkrTPuoM0EG9TbG8CgMQ==" }, "vue-hot-reload-api": { "version": "2.3.4", @@ -28276,16 +15573,6 @@ "graceful-fs": "^4.1.2" } }, - "wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dev": true, - "peer": true, - "requires": { - "minimalistic-assert": "^1.0.0" - } - }, "web-namespaces": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", @@ -28400,116 +15687,6 @@ } } }, - "webpack-dev-middleware": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.5.tgz", - "integrity": "sha512-uxQ6YqGdE4hgDKNf7hUiPXOdtkXvBJXrfEGYSx7P7LC8hnUYGK70X6xQXUvXeNyBDDcsiQXpG2m3G9vxowaEuA==", - "dev": true, - "peer": true, - "requires": { - "colorette": "^2.0.10", - "memfs": "^4.43.1", - "mime-types": "^3.0.1", - "on-finished": "^2.4.1", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "dependencies": { - "mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "dev": true, - "peer": true - }, - "mime-types": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", - "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", - "dev": true, - "peer": true, - "requires": { - "mime-db": "^1.54.0" - } - } - } - }, - "webpack-dev-server": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.3.tgz", - "integrity": "sha512-9Gyu2F7+bg4Vv+pjbovuYDhHX+mqdqITykfzdM9UyKqKHlsE5aAjRhR+oOEfXW5vBeu8tarzlJFIZva4ZjAdrQ==", - "dev": true, - "peer": true, - "requires": { - "@types/bonjour": "^3.5.13", - "@types/connect-history-api-fallback": "^1.5.4", - "@types/express": "^4.17.25", - "@types/express-serve-static-core": "^4.17.21", - "@types/serve-index": "^1.9.4", - "@types/serve-static": "^1.15.5", - "@types/sockjs": "^0.3.36", - "@types/ws": "^8.5.10", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.2.1", - "chokidar": "^3.6.0", - "colorette": "^2.0.10", - "compression": "^1.8.1", - "connect-history-api-fallback": "^2.0.0", - "express": "^4.22.1", - "graceful-fs": "^4.2.6", - "http-proxy-middleware": "^2.0.9", - "ipaddr.js": "^2.1.0", - "launch-editor": "^2.6.1", - "open": "^10.0.3", - "p-retry": "^6.2.0", - "schema-utils": "^4.2.0", - "selfsigned": "^5.5.0", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^7.4.2", - "ws": "^8.18.0" - }, - "dependencies": { - "chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "peer": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "peer": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "peer": true, - "requires": { - "picomatch": "^2.2.1" - } - } - } - }, "webpack-merge": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", @@ -28527,25 +15704,6 @@ "integrity": "sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q==", "dev": true }, - "websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dev": true, - "peer": true, - "requires": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - } - }, - "websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "dev": true, - "peer": true - }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -28555,71 +15713,6 @@ "isexe": "^2.0.0" } }, - "which-boxed-primitive": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", - "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", - "dev": true, - "peer": true, - "requires": { - "is-bigint": "^1.1.0", - "is-boolean-object": "^1.2.1", - "is-number-object": "^1.1.1", - "is-string": "^1.1.1", - "is-symbol": "^1.1.1" - } - }, - "which-builtin-type": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", - "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", - "dev": true, - "peer": true, - "requires": { - "call-bound": "^1.0.2", - "function.prototype.name": "^1.1.6", - "has-tostringtag": "^1.0.2", - "is-async-function": "^2.0.0", - "is-date-object": "^1.1.0", - "is-finalizationregistry": "^1.1.0", - "is-generator-function": "^1.0.10", - "is-regex": "^1.2.1", - "is-weakref": "^1.0.2", - "isarray": "^2.0.5", - "which-boxed-primitive": "^1.1.0", - "which-collection": "^1.0.2", - "which-typed-array": "^1.1.16" - } - }, - "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, - "peer": true, - "requires": { - "is-map": "^2.0.3", - "is-set": "^2.0.3", - "is-weakmap": "^2.0.2", - "is-weakset": "^2.0.3" - } - }, - "which-typed-array": { - "version": "1.1.20", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz", - "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==", - "dev": true, - "peer": true, - "requires": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "for-each": "^0.3.5", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2" - } - }, "wildcard": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", @@ -28722,31 +15815,6 @@ "signal-exit": "^4.0.1" } }, - "ws": { - "version": "8.19.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", - "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==", - "dev": true, - "peer": true, - "requires": {} - }, - "wsl-utils": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", - "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", - "dev": true, - "peer": true, - "requires": { - "is-wsl": "^3.1.0" - } - }, - "xml-name-validator": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", - "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", - "dev": true, - "peer": true - }, "xmlbuilder2": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/xmlbuilder2/-/xmlbuilder2-4.0.3.tgz", @@ -28759,20 +15827,6 @@ "js-yaml": "^4.1.1" } }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "peer": true - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true, - "peer": true - }, "yargs-parser": { "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", diff --git a/package.json b/package.json index cd00c024..d74c0701 100644 --- a/package.json +++ b/package.json @@ -23,14 +23,13 @@ ], "dependencies": { "@conduction/nextcloud-vue": "^0.1.0-beta.3", - "apexcharts": "^3.45.0", - "vue-apexcharts": "^1.6.2", "@nextcloud/axios": "^2.5.0", "@nextcloud/dialogs": "^3.2.0", "@nextcloud/initial-state": "^2.2.0", "@nextcloud/l10n": "^2.0.1", "@nextcloud/router": "^2.0.1", "@nextcloud/vue": "^8.16.0", + "apexcharts": "^3.45.0", "gridstack": "^10.3.1", "leaflet": "^1.9.4", "leaflet-draw": "^1.0.4", @@ -38,6 +37,7 @@ "pinia": "^2.1.7", "proj4": "^2.20.4", "vue": "^2.7.14", + "vue-apexcharts": "^1.6.2", "vue-material-design-icons": "^5.3.0", "vue-router": "^3.6.5" }, @@ -53,6 +53,7 @@ "css-loader": "~7.1.1", "eslint": "^8.56.0", "eslint-import-resolver-alias": "^1.1.2", + "sass-loader": "^16.0.7", "style-loader": "~4.0.0", "stylelint": "^15.11.0", "vue-loader": "^15.11.1 <16.0.0", diff --git a/src/navigation/MainMenu.vue b/src/navigation/MainMenu.vue index eea28216..1c21ce6b 100644 --- a/src/navigation/MainMenu.vue +++ b/src/navigation/MainMenu.vue @@ -42,6 +42,9 @@ :to="{ name: 'CaseMap' }"> + +