Skip to content

feat: enhance import logging - #3510

Open
TheTisiboth wants to merge 9 commits into
masterfrom
feat/enhance-import-logging
Open

TheTisiboth wants to merge 9 commits into
masterfrom
feat/enhance-import-logging

Conversation

@TheTisiboth

@TheTisiboth TheTisiboth commented Oct 26, 2026 •

Copy link
Copy Markdown
Collaborator

Addresses #3279

Followed by #3538 (stacked).

Topic and Scope

Adds logging throughout the recipe import pipeline so admins can see in nextcloud.log why an import failed. No change to API responses.

  • Log at each step: download (HTTP status, content-type, size), extraction (per-parser failure reasons)
  • ImportException carries the failing step (download, parse_html, extract_recipe), logged on failure
  • Logged URLs are stripped of credentials, query and fragment (UrlRedactionHelper)

Concerns/issues

  • ImportException new last param string $step = '' is backward-compatible
  • The debug dump feature (saving downloaded HTML to a temp folder for inspection) is out of scope and needs design discussion — see Enhance import logging #3279

Formal requirements

  • I did check that the app can still be opened and does not throw any browser logs
  • I created tests for newly added PHP code (check this if no PHP changes were made)
  • I updated the OpenAPI specs and added an entry to the API changelog (check if API was not modified)
  • I notified the matrix channel if I introduced an API change

Note

This PR was created with the assistance of AI tools.
Assisted-by: Claude Code (claude-opus-4-6, claude-opus-5-5)

🤖 Generated with Claude Code

@nextcloud-command nextcloud-command added the AI assisted This PR contains AI-assisted commits label Oct 26, 2026
@github-actions

github-actions Bot commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

Test Results

   12 files    604 suites   3m 29s ⏱️
  612 tests   604 ✅  8 💤 0 ❌
2 448 runs  2 415 ✅ 33 💤 0 ❌

Results for commit a17895b.

♻️ This comment has been updated with latest results.

Add structured logging throughout the recipe import pipeline:
- Tag ImportExceptions with a step property (download/parse_html/extract_recipe)
- Log per-parser failures with reasons in RecipeExtractionService
- Add debug logs in HTML parsers (JSON-LD element count, decode errors, microdata itemscope count)
- Log HTTP status, content-type, and response size after download
- Return structured {msg, step} error responses from the import API
- Remove file/line leak from all error responses (import, update, create)
- Catch generic exceptions as HTTP 500 with safe translated message

Assisted-by: Claude Code (claude-opus-4-6)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: Léo Jan <leo.jan@doctolib.com>
@TheTisiboth
TheTisiboth force-pushed the feat/enhance-import-logging branch from 8efea9f to e3dc968 Compare October 26, 2026 21:55
TheTisiboth and others added 2 commits October 29, 2026 19:57
…-logging

Assisted-by: Claude Code:claude-opus-5-5
Signed-off-by: Léo Jan <leo.jan@doctolib.com>
Assisted-by: Claude Code:claude-opus-5-5
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Léo Jan <leo.jan@doctolib.com>
@TheTisiboth
TheTisiboth marked this pull request as ready for review October 29, 2026 18:59
@coderabbitai

coderabbitai Bot commented Oct 29, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
Walkthrough

The import pipeline now attaches step labels to download, HTML parsing, and recipe extraction exceptions. Services and parsers log outcomes and failures with redacted URLs. The controller logs import exceptions separately from other exceptions and returns status 400 for both.

Merge Risk: Low · previous review b6bef

This change adds structured import logging with redacted URLs and step labels, and it does not change the HTTP status or response bodies for import failures. One small follow-up remains: an error message that includes a recipe-supplied URL can still be written to the server log unredacted. That is a narrow, conditional privacy concern that the owner can accept or fix after merge.

Pre-merge checks: Passed 4 · Failed 1

Failed Failed checks: 1 warning

Check name Status Explanation Resolution
Docstring Coverage Warning Docstring coverage is 76.92% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff with cyclomatic complexity of at least 2. Documenta… Write docstrings for the functions missing them to satisfy the coverage threshold.
Passed Passed checks: 4 passed

Check name Status Explanation
Title check Passed The title "feat: enhance import logging" matches the main change. The changeset adds logging across the recipe import pipeline (download, HTML parsing, extraction), adds an ImportException step field,…
Description check Passed The description follows the template's main sections. It has a Topic and Scope section that explains the logging additions, the step field on ImportException, and URL redaction. It has a Concerns/issu…
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Full details: Title check

Explanation

The title "feat: enhance import logging" matches the main change. The changeset adds logging across the recipe import pipeline (download, HTML parsing, extraction), adds an ImportException step field, and adds a URL redaction helper for logged URLs. The title is short and specific, and it uses the conventional commit style.

Full details: Description check

Explanation

The description follows the template's main sections. It has a Topic and Scope section that explains the logging additions, the step field on ImportException, and URL redaction. It has a Concerns/issues section that notes the backward-compatible constructor parameter and the out-of-scope debug dump feature. All four formal requirement boxes are checked. The description is mostly complete. However, the formal requirement checkboxes claim OpenAPI spec updates and a Matrix notification, while the stated scope says no API response change. The commit messages also say the structured error response changes moved to a separate PR, which conflicts with the description's list of those changes. These conflicts do not make the description fail, but the author should reconcile them.

Full details: Docstring Coverage

Explanation

Docstring coverage is 76.92% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff with cyclomatic complexity of at least 2. Documentation-only edits and deletions within surviving functions are included; unchanged diff context and fully deleted functions are excluded. Analyzed 13 functions across 14 files.

Resolution

Write docstrings for the functions missing them to satisfy the coverage threshold.

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to GitHub limitations.

⚠️ Outside diff range comments (1)

Major · Apply the generic import handler to cache insertion. · RecipeImplementation.php:326-328

lib/Controller/Implementation/RecipeImplementation.php:326-328
🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Apply the generic import handler to cache insertion.

DbCacheService::addRecipe() remains outside the new generic handler. Its database and cache-update operations can raise exceptions that escape RecipeImplementation::import() and bypass the documented generic {msg} response.

This block existed before the PR, but the PR adds a broad contract that unexpected import errors return HTTP 500 with a generic message. Extend that handling to cache insertion while preserving the existing InvalidJSONFileException cleanup.


Review info
Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 4df5fdd1-4015-410b-899d-507f8b67f401
Commits

Reviewing files that changed from the base of the PR and between 56213cf and 30880c0.

Files selected for processing: 18
  • docs/dev/api/changelog/0.md
  • docs/dev/api/trunk/internal-cookbook.yaml
  • docs/dev/api/trunk/objects.yaml
  • docs/dev/api/trunk/openapi-cookbook.yaml
  • lib/Controller/Implementation/RecipeImplementation.php
  • lib/Exception/ImportException.php
  • lib/Helper/HTMLParser/AbstractHtmlParser.php
  • lib/Helper/HTMLParser/HttpJsonLdParser.php
  • lib/Helper/HTMLParser/HttpMicrodataParser.php
  • lib/Helper/HtmlToDomParser.php
  • lib/Service/HtmlDownloadService.php
  • lib/Service/RecipeExtractionService.php
  • lib/Service/RecipeService.php
  • src/components/AppNavi.vue
  • tests/Unit/Controller/Implementation/RecipeImplementationTest.php
  • tests/Unit/Helper/HTMLParser/HttpJsonLdParserTest.php
  • tests/Unit/Helper/HTMLParser/HttpMicrodataParserTest.php
  • tests/Unit/Service/RecipeExtractionServiceTest.php

Included review availability: This review used your included allowance. Your plan provides up to 4 included reviews per hour; 1 remain after this review.

Comment thread lib/Service/HtmlDownloadService.php Resolved
Also document that invalid recipe JSON still returns a plain-string 400.

Assisted-by: Claude Code:claude-opus-5-5
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Léo Jan <leo.jan@doctolib.com>
@TheTisiboth
TheTisiboth enabled stacked auto-merge (squash) October 29, 2026 19:43

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1


Review info
Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: a8fbf4f0-0f2a-4b91-b528-de93acd6c9b0
Commits

Reviewing files that changed from the base of the PR and between 30880c0 and ab1434e.

Files selected for processing: 5
  • docs/dev/api/changelog/0.md
  • docs/dev/api/trunk/internal-cookbook.yaml
  • docs/dev/api/trunk/openapi-cookbook.yaml
  • lib/Controller/Implementation/RecipeImplementation.php
  • tests/Unit/Controller/Implementation/RecipeImplementationTest.php
Files skipped from review as they are similar to previous changes: 3
  • docs/dev/api/changelog/0.md
  • docs/dev/api/trunk/openapi-cookbook.yaml
  • docs/dev/api/trunk/internal-cookbook.yaml

Included review availability: This review used your included allowance. Your plan provides up to 4 included reviews per hour; 2 remain after this review.

Assisted-by: Claude Code:claude-opus-5-5
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Léo Jan <leo.jan@doctolib.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🔇 Additional comments: 2
lib/Service/RecipeService.php-358-358: 1

358-358: Minor · Security & Privacy · Quick win

⚠️ Unverified finding
Verification ran but could not confirm this finding. It is shown for review, not as a verified issue.

Do not log the recipe name.

The parsed name is user content. This new info log retains it on every successful extraction, including when the name contains private details. Log extraction success without the name. (raw.githubusercontent.com)

lib/Helper/UrlRedactionHelper.php-23-23: 1

23-23: Major · Security & Privacy · Quick win

⚠️ Unverified finding
Verification ran but could not confirm this finding. It is shown for review, not as a verified issue.

Remove the path from logged URLs.

If an import URL contains a token in its path, redact() retains that token. Download and parser logs then persist it. Return the scheme and host, with the port if needed, but not the path. (raw.githubusercontent.com)

Based on learnings, full URLs can embed API keys or tokens in the path.

Source: Learnings


Review info
Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: c3b03ef5-3e0e-49b9-a772-3add014cab91
Commits

Reviewing files that changed from the base of the PR and between ab1434e and 873bfb7.

Files selected for processing: 8
  • lib/Controller/Implementation/RecipeImplementation.php
  • lib/Helper/HTMLParser/HttpJsonLdParser.php
  • lib/Helper/HTMLParser/HttpMicrodataParser.php
  • lib/Helper/UrlRedactionHelper.php
  • lib/Service/HtmlDownloadService.php
  • lib/Service/RecipeExtractionService.php
  • lib/Service/RecipeService.php
  • tests/Unit/Helper/UrlRedactionHelperTest.php
Files skipped from review as they are similar to previous changes: 1
  • lib/Service/HtmlDownloadService.php

Included review availability: This review used your included allowance. Your plan provides up to 4 included reviews per hour; 1 remain after this review.

Validation errors of the extracted recipe returned a generic 500 instead of a 400 with the extract_recipe step.

Assisted-by: Claude Code:claude-opus-5-5
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Léo Jan <leo.jan@doctolib.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1


Review info
Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 2a7d43ac-5502-4fcc-9fa4-02886edc6737
Commits

Reviewing files that changed from the base of the PR and between 873bfb7 and 9389b3a.

Files selected for processing: 2
  • lib/Service/RecipeService.php
  • tests/Unit/Controller/Implementation/RecipeImplementationTest.php

Included review availability: This review used your included allowance. Your plan provides up to 4 included reviews per hour; 0 remain after this review.

Comment thread lib/Service/RecipeService.php Resolved
Keep this change focused on import logging. Response format, API docs and frontend handling follow in a stacked PR.

Assisted-by: Claude Code:claude-opus-5-5
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Léo Jan <leo.jan@doctolib.com>
@TheTisiboth TheTisiboth changed the title feat: enhance import logging and error reporting feat: enhance import logging Oct 29, 2026
@christianlupus
christianlupus disabled stacked auto-merge November 3, 2026 22:28
christianlupus
christianlupus previously approved these changes Nov 3, 2026

@christianlupus christianlupus left a comment •

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I do have 2 minimal comments but I would be fine with merging as it is. If you want to address them, fine. If not, we could directly merge.

return new JSONResponse($json, Http::STATUS_CONFLICT);
} catch (ImportException $e) {
$this->logger->warning('Import failed at step "{step}": {reason}', [
'url' => UrlRedactionHelper::redact($data['url']), 'step' => $e->getStep(), 'reason' => $e->getMessage(), 'exception' => $e,

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do you put more entries into the array of snippet (second argument)?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

exception is a special key for the NC logger: it logs the stack trace.
the second argument is the context array: the keys are kept as extra field in the logs, and will look like this:

{
  "reqId": "aB3x...",
  "level": 2,
  "time": "2026-11-09T10:00:00+00:00",
  "user": "alice",
  "app": "cookbook",
  "method": "POST",
  "url": "/index.php/apps/cookbook/api/v1/import",
  "message": "Import failed at step \"download\": Could not fetch site https://example.com/recipe",
  "exception": {
    "Exception": "OCA\\Cookbook\\Exception\\ImportException",
    "Message": "Could not fetch site https://example.com/recipe",
    "Code": 0,
    "Trace": [ ... ],
    "File": ".../HtmlDownloadService.php",
    "Line": 123,
    "Previous": { ... },
    "message": "Import failed at step \"download\": {reason}",
    "url": "https://example.com/recipe",
    "CustomMessage": "Import failed at step \"download\": Could not fetch ..."
  }
}

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i'm adding the url to the message to make the message more explicit

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

and even if exception is not used in the log message, it will be logged as a metada kind of (adding the stracktrace, file and so on

return new JSONResponse($e->getMessage(), 400);
} catch (\Exception $e) {
$this->logger->error('Unexpected error during import: {reason}', [
'url' => UrlRedactionHelper::redact($data['url']), 'reason' => $e->getMessage(), 'exception' => $e,

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Url and exception seem not used, isn't it?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

NC logs the stack trace (from exception)
url was only logged as an extra field, but we could also add it to the message for clarity

@codecov

codecov Bot commented Nov 3, 2026 •

Copy link
Copy Markdown

Bundle Report

Changes will decrease total bundle size by 7.62kB (-0.27%) ⬇️. This is within the configured threshold ✅

Detailed changes
Bundle name Size Change
cookbook-esm 2.83MB -7.62kB (-0.27%) ⬇️

Affected Assets, Files, and Routes:

view changes for bundle: cookbook-esm

Assets Changed:

Asset Name Size Change Total Size Change (%)
js/_plugin-vue_export-helper-D4PAj3jj.chunk.mjs (New) 831.48kB 831.48kB 100.0% 🚀
js/index-DAmHSrem.chunk.mjs (New) 239.77kB 239.77kB 100.0% 🚀
js/FilePicker-CUCYkc6m-B3LptvCm.chunk.mjs (New) 229.52kB 229.52kB 100.0% 🚀
css/main-o6Fq6YNK.chunk.css (New) 54.53kB 54.53kB 100.0% 🚀
js/be-tarask-tcWGV2tk.chunk.mjs (New) 52.5kB 52.5kB 100.0% 🚀
js/index-C0TwvsTL.chunk.mjs (New) 38.48kB 38.48kB 100.0% 🚀
css/_plugin-vue_export-helper-DVIrmgKd.chunk.css (New) 32.1kB 32.1kB 100.0% 🚀
css/FilePicker-CUCYkc6m-CjlGqrIZ.chunk.css (New) 23.15kB 23.15kB 100.0% 🚀
js/ta-G9el0FSR.chunk.mjs (New) 13.22kB 13.22kB 100.0% 🚀
js/be-BTk0tJLa.chunk.mjs (New) 13.02kB 13.02kB 100.0% 🚀
js/ru-BGphMns0.chunk.mjs (New) 12.77kB 12.77kB 100.0% 🚀
js/uk-VsH1CzYx.chunk.mjs (New) 12.71kB 12.71kB 100.0% 🚀
js/kk-Pi1sky_g.chunk.mjs (New) 12.35kB 12.35kB 100.0% 🚀
js/kn-1fyV5m_M.chunk.mjs (New) 12.19kB 12.19kB 100.0% 🚀
js/te-ByBgOq3x.chunk.mjs (New) 11.38kB 11.38kB 100.0% 🚀
js/sl-BVKGUfRB.chunk.mjs (New) 10.85kB 10.85kB 100.0% 🚀
js/cs-BWD49G-W.chunk.mjs (New) 10.79kB 10.79kB 100.0% 🚀
js/bn-CReH1Ddq.chunk.mjs (New) 10.16kB 10.16kB 100.0% 🚀
js/sr-DXuOT-Di.chunk.mjs (New) 9.83kB 9.83kB 100.0% 🚀
js/ka-D9_1GMFd.chunk.mjs (New) 9.26kB 9.26kB 100.0% 🚀
js/th-B2aXvBto.chunk.mjs (New) 9.12kB 9.12kB 100.0% 🚀
js/mn-DhAQiKki.chunk.mjs (New) 8.9kB 8.9kB 100.0% 🚀
js/lv-BmRH7rFV.chunk.mjs (New) 8.83kB 8.83kB 100.0% 🚀
js/hi-DRAq2Ep2.chunk.mjs (New) 8.71kB 8.71kB 100.0% 🚀
js/pl-BtK-Qsg8.chunk.mjs (New) 8.51kB 8.51kB 100.0% 🚀
js/hr-BCx1oudN.chunk.mjs (New) 8.45kB 8.45kB 100.0% 🚀
js/ar-MCRidPLX.chunk.mjs (New) 8.45kB 8.45kB 100.0% 🚀
js/km-C7IW8Wah.chunk.mjs (New) 8.43kB 8.43kB 100.0% 🚀
js/sk-BUEIML3V.chunk.mjs (New) 8.26kB 8.26kB 100.0% 🚀
js/bs-XDSu0pa7.chunk.mjs (New) 8.24kB 8.24kB 100.0% 🚀
js/sr-Latn-BCJqnLQ_.chunk.mjs (New) 8.18kB 8.18kB 100.0% 🚀
js/ar-EG-q9xK1zQX.chunk.mjs (New) 8.13kB 8.13kB 100.0% 🚀
js/ar-TN-D7zEEuSy.chunk.mjs (New) 8.06kB 8.06kB 100.0% 🚀
js/ar-DZ-BRmHrIey.chunk.mjs (New) 8.06kB 8.06kB 100.0% 🚀
js/ar-MA-D6qgWRJU.chunk.mjs (New) 7.94kB 7.94kB 100.0% 🚀
js/lt-DbLNNdX7.chunk.mjs (New) 7.94kB 7.94kB 100.0% 🚀
js/ar-SA-DOoG6YDj.chunk.mjs (New) 7.93kB 7.93kB 100.0% 🚀
js/ckb-DTMXs8kd.chunk.mjs (New) 7.83kB 7.83kB 100.0% 🚀
js/gu-9_Dv2cAR.chunk.mjs (New) 7.81kB 7.81kB 100.0% 🚀
js/he-z13TN15P.chunk.mjs (New) 7.77kB 7.77kB 100.0% 🚀
js/lb-BR983gaZ.chunk.mjs (New) 7.7kB 7.7kB 100.0% 🚀
js/el-DdOLQ2K4.chunk.mjs (New) 7.69kB 7.69kB 100.0% 🚀
js/vi-CeWFPFDt.chunk.mjs (New) 7.61kB 7.61kB 100.0% 🚀
js/fa-IR-C1OhQi7A.chunk.mjs (New) 7.25kB 7.25kB 100.0% 🚀
js/hy-Bu5BsMLJ.chunk.mjs (New) 7.2kB 7.2kB 100.0% 🚀
js/et-BT0GX2aO.chunk.mjs (New) 7.2kB 7.2kB 100.0% 🚀
js/bg-CAkHhN17.chunk.mjs (New) 7.07kB 7.07kB 100.0% 🚀
js/ug-D10PzZRl.chunk.mjs (New) 6.99kB 6.99kB 100.0% 🚀
js/ca-BwlIgdLc.chunk.mjs (New) 6.86kB 6.86kB 100.0% 🚀
js/az-FTkBe6cP.chunk.mjs (New) 6.81kB 6.81kB 100.0% 🚀
js/ja-Hira-CSvVcpF5.chunk.mjs (New) 6.75kB 6.75kB 100.0% 🚀
js/mk-roIRRCaj.chunk.mjs (New) 6.64kB 6.64kB 100.0% 🚀
js/fi-D8uB9vj7.chunk.mjs (New) 6.53kB 6.53kB 100.0% 🚀
js/cy-BcHKfOq8.chunk.mjs (New) 6.47kB 6.47kB 100.0% 🚀
js/gd-aDMYuQRe.chunk.mjs (New) 6.4kB 6.4kB 100.0% 🚀
js/eu-C0Zlk_Zl.chunk.mjs (New) 6.35kB 6.35kB 100.0% 🚀
js/oc-CYD7SP3K.chunk.mjs (New) 6.28kB 6.28kB 100.0% 🚀
js/pt-dNB6CD29.chunk.mjs (New) 6.15kB 6.15kB 100.0% 🚀
js/zh-CN-C3byl8Rx.chunk.mjs (New) 6.15kB 6.15kB 100.0% 🚀
js/es-BpLUfAaI.chunk.mjs (New) 6.13kB 6.13kB 100.0% 🚀
js/is-DHgBmemV.chunk.mjs (New) 6.03kB 6.03kB 100.0% 🚀
js/pt-BR-Du3kfv43.chunk.mjs (New) 6.03kB 6.03kB 100.0% 🚀
js/tr-Bs9d1JoQ.chunk.mjs (New) 6.02kB 6.02kB 100.0% 🚀
js/mt-CivvpbGv.chunk.mjs (New) 6.01kB 6.01kB 100.0% 🚀
js/gl-CFSyJWC2.chunk.mjs (New) 5.99kB 5.99kB 100.0% 🚀
js/sv-CDgZwE5L.chunk.mjs (New) 5.92kB 5.92kB 100.0% 🚀
js/zh-TW-Dv26Vesi.chunk.mjs (New) 5.91kB 5.91kB 100.0% 🚀
js/zh-HK-C_VqMfL3.chunk.mjs (New) 5.91kB 5.91kB 100.0% 🚀
js/uz-Cyrl-Cl6rk9Po.chunk.mjs (New) 5.9kB 5.9kB 100.0% 🚀
js/ro-z5jYlhUV.chunk.mjs (New) 5.89kB 5.89kB 100.0% 🚀
js/ja-n5mD0eh4.chunk.mjs (New) 5.87kB 5.87kB 100.0% 🚀
js/da-CpprfDk4.chunk.mjs (New) 5.8kB 5.8kB 100.0% 🚀
js/af-uxub_M4_.chunk.mjs (New) 5.75kB 5.75kB 100.0% 🚀
js/hu-BAD9KBbr.chunk.mjs (New) 5.74kB 5.74kB 100.0% 🚀
js/sq-CXTWqaXO.chunk.mjs (New) 5.73kB 5.73kB 100.0% 🚀
js/match-CyQYv5sa.chunk.mjs (New) 5.7kB 5.7kB 100.0% 🚀
js/id-e8PCcPIU.chunk.mjs (New) 5.68kB 5.68kB 100.0% 🚀
js/ms-rqX8nius.chunk.mjs (New) 5.67kB 5.67kB 100.0% 🚀
js/se-P2CSkZ77.chunk.mjs (New) 5.63kB 5.63kB 100.0% 🚀
js/uz-sVXHN2tZ.chunk.mjs (New) 5.51kB 5.51kB 100.0% 🚀
js/eo-DOaIfbA-.chunk.mjs (New) 5.43kB 5.43kB 100.0% 🚀
js/nn-Mv-26HR0.chunk.mjs (New) 5.4kB 5.4kB 100.0% 🚀
js/ko-tutYHj0-.chunk.mjs (New) 5.38kB 5.38kB 100.0% 🚀
js/nb-DAHThbSu.chunk.mjs (New) 5.3kB 5.3kB 100.0% 🚀
js/ht-DM8HHkq0.chunk.mjs (New) 5.23kB 5.23kB 100.0% 🚀
js/nl-BE-DjTXTJcl.chunk.mjs (New) 5.21kB 5.21kB 100.0% 🚀
js/nl-CgoSFfyF.chunk.mjs (New) 5.21kB 5.21kB 100.0% 🚀
js/fy-mnp2Faix.chunk.mjs (New) 5.1kB 5.1kB 100.0% 🚀
js/match-B6EU68lN.chunk.mjs (New) 5.01kB 5.01kB 100.0% 🚀
js/match-BnOVykxq.chunk.mjs (New) 4.88kB 4.88kB 100.0% 🚀
js/_plugin-vue_export-helper-D4PAj3jj.chunk.mjs.license (New) 3.15kB 3.15kB 100.0% 🚀
js/de-AT-CvghKtoF.chunk.mjs (New) 2.45kB 2.45kB 100.0% 🚀
js/de-BtpGgI4O.chunk.mjs (New) 2.44kB 2.44kB 100.0% 🚀
js/en-CA-BbzOXI9h.chunk.mjs (New) 1.88kB 1.88kB 100.0% 🚀
js/fr-CH-BgWjhge0.chunk.mjs (New) 999 bytes 999 bytes 100.0% 🚀
js/fr-CA-Bkgf1Cik.chunk.mjs (New) 857 bytes 857 bytes 100.0% 🚀
js/fr-BJJt9TI1.chunk.mjs (New) 848 bytes 848 bytes 100.0% 🚀
js/it-CH-ulGjjW9_.chunk.mjs (New) 835 bytes 835 bytes 100.0% 🚀
js/it-DoHQyFHn.chunk.mjs (New) 827 bytes 827 bytes 100.0% 🚀
js/en-IN-C2Ntu8-O.chunk.mjs (New) 791 bytes 791 bytes 100.0% 🚀
js/en-AU-B0QIr5_u.chunk.mjs (New) 789 bytes 789 bytes 100.0% 🚀
js/en-NZ-YaNnlJKz.chunk.mjs (New) 789 bytes 789 bytes 100.0% 🚀
js/en-ZA-C5DGm6TP.chunk.mjs (New) 783 bytes 783 bytes 100.0% 🚀
js/FilePicker-CUCYkc6m-B3LptvCm.chunk.mjs.license (New) 767 bytes 767 bytes 100.0% 🚀
js/be-tarask-tcWGV2tk.chunk.mjs.license (New) 614 bytes 614 bytes 100.0% 🚀
js/formatLong-Bw6dnMU9.chunk.mjs (New) 533 bytes 533 bytes 100.0% 🚀
js/index-C0TwvsTL.chunk.mjs.license (New) 466 bytes 466 bytes 100.0% 🚀
js/index-DAmHSrem.chunk.mjs.license (New) 450 bytes 450 bytes 100.0% 🚀
js/en-GB-DYfVO0MR.chunk.mjs (New) 421 bytes 421 bytes 100.0% 🚀
js/en-IE-BgAMQnXU.chunk.mjs (New) 421 bytes 421 bytes 100.0% 🚀
js/isSameWeek-jvm8SaNR.chunk.mjs (New) 190 bytes 190 bytes 100.0% 🚀
js/en-GB-DYfVO0MR.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/en-IE-BgAMQnXU.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/formatLong-Bw6dnMU9.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/isSameWeek-jvm8SaNR.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/de-AT-CvghKtoF.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/de-BtpGgI4O.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/en-AU-B0QIr5_u.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/en-IN-C2Ntu8-O.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/en-NZ-YaNnlJKz.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/en-ZA-C5DGm6TP.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/fr-CA-Bkgf1Cik.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/fr-BJJt9TI1.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/it-CH-ulGjjW9_.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/it-DoHQyFHn.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/en-CA-BbzOXI9h.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/match-BnOVykxq.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/fr-CH-BgWjhge0.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/match-B6EU68lN.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/match-CyQYv5sa.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/af-uxub_M4_.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/ar-DZ-BRmHrIey.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/ar-EG-q9xK1zQX.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/ar-MA-D6qgWRJU.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/ar-SA-DOoG6YDj.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/ar-TN-D7zEEuSy.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/ar-MCRidPLX.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/az-FTkBe6cP.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/be-BTk0tJLa.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/bg-CAkHhN17.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/bn-CReH1Ddq.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/bs-XDSu0pa7.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/ca-BwlIgdLc.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/ckb-DTMXs8kd.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/cs-BWD49G-W.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/cy-BcHKfOq8.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/da-CpprfDk4.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/el-DdOLQ2K4.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/eo-DOaIfbA-.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/es-BpLUfAaI.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/et-BT0GX2aO.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/eu-C0Zlk_Zl.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/fa-IR-C1OhQi7A.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/fi-D8uB9vj7.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/fy-mnp2Faix.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/gd-aDMYuQRe.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/gl-CFSyJWC2.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/gu-9_Dv2cAR.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/he-z13TN15P.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/hi-DRAq2Ep2.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/hr-BCx1oudN.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/ht-DM8HHkq0.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/hu-BAD9KBbr.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/hy-Bu5BsMLJ.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/id-e8PCcPIU.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/is-DHgBmemV.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/ja-Hira-CSvVcpF5.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/ja-n5mD0eh4.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/ka-D9_1GMFd.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/kk-Pi1sky_g.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/km-C7IW8Wah.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/kn-1fyV5m_M.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/ko-tutYHj0-.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/lb-BR983gaZ.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/lt-DbLNNdX7.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/lv-BmRH7rFV.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/mk-roIRRCaj.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/mn-DhAQiKki.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/ms-rqX8nius.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/mt-CivvpbGv.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/nb-DAHThbSu.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/nl-BE-DjTXTJcl.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/nl-CgoSFfyF.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/nn-Mv-26HR0.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/oc-CYD7SP3K.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/pl-BtK-Qsg8.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/pt-BR-Du3kfv43.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/pt-dNB6CD29.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/ro-z5jYlhUV.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/ru-BGphMns0.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/se-P2CSkZ77.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/sk-BUEIML3V.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/sl-BVKGUfRB.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/sq-CXTWqaXO.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/sr-Latn-BCJqnLQ_.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/sr-DXuOT-Di.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/sv-CDgZwE5L.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/ta-G9el0FSR.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/te-ByBgOq3x.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/th-B2aXvBto.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/tr-Bs9d1JoQ.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/ug-D10PzZRl.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/uk-VsH1CzYx.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/uz-Cyrl-Cl6rk9Po.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/uz-sVXHN2tZ.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/vi-CeWFPFDt.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/zh-CN-C3byl8Rx.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/zh-HK-C_VqMfL3.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/zh-TW-Dv26Vesi.chunk.mjs.license (New) 184 bytes 184 bytes 100.0% 🚀
js/_plugin-vue_export-helper-DHRTeHvG.chunk.mjs (Deleted) -829.81kB 0 bytes -100.0% 🗑️
js/index-8SwLPfur.chunk.mjs (Deleted) -239.77kB 0 bytes -100.0% 🗑️
js/FilePicker-qWi4RBGN-BYLxzQJz.chunk.mjs (Deleted) -234.11kB 0 bytes -100.0% 🗑️
css/main-CIMoQM8k.chunk.css (Deleted) -68.33kB 0 bytes -100.0% 🗑️
js/be-tarask-DgyCasE9.chunk.mjs (Deleted) -52.5kB 0 bytes -100.0% 🗑️
js/index-D3kKBZ26.chunk.mjs (Deleted) -38.48kB 0 bytes -100.0% 🗑️
css/_plugin-vue_export-helper-DgwDW6Ba.chunk.css (Deleted) -30.24kB 0 bytes -100.0% 🗑️
css/FilePicker-qWi4RBGN-DGMH2mTF.chunk.css (Deleted) -15.66kB 0 bytes -100.0% 🗑️
js/ta-BusexmME.chunk.mjs (Deleted) -13.22kB 0 bytes -100.0% 🗑️
js/be-BVYaMre9.chunk.mjs (Deleted) -13.02kB 0 bytes -100.0% 🗑️
js/ru-CzzuX-LQ.chunk.mjs (Deleted) -12.77kB 0 bytes -100.0% 🗑️
js/uk-D6ZRRsvo.chunk.mjs (Deleted) -12.71kB 0 bytes -100.0% 🗑️
js/kk-B6FnBJLA.chunk.mjs (Deleted) -12.35kB 0 bytes -100.0% 🗑️
js/kn-DdaYghEL.chunk.mjs (Deleted) -12.19kB 0 bytes -100.0% 🗑️
js/te-pFIHkFG-.chunk.mjs (Deleted) -11.38kB 0 bytes -100.0% 🗑️
js/sl-CtVvrDPr.chunk.mjs (Deleted) -10.85kB 0 bytes -100.0% 🗑️
js/cs-DszVkYrQ.chunk.mjs (Deleted) -10.79kB 0 bytes -100.0% 🗑️
js/bn-QwIRm2RY.chunk.mjs (Deleted) -10.16kB 0 bytes -100.0% 🗑️
js/sr-BAbF2g8k.chunk.mjs (Deleted) -9.83kB 0 bytes -100.0% 🗑️
js/ka-DmsjoDLK.chunk.mjs (Deleted) -9.26kB 0 bytes -100.0% 🗑️
js/th-DIGIMg9T.chunk.mjs (Deleted) -9.12kB 0 bytes -100.0% 🗑️
js/mn-MlrOl0Mk.chunk.mjs (Deleted) -8.9kB 0 bytes -100.0% 🗑️
js/lv-CvgfjGbZ.chunk.mjs (Deleted) -8.83kB 0 bytes -100.0% 🗑️
js/hi-Deyp1b-n.chunk.mjs (Deleted) -8.71kB 0 bytes -100.0% 🗑️
js/pl-C8mdYi6t.chunk.mjs (Deleted) -8.51kB 0 bytes -100.0% 🗑️
js/hr-CsMvpaQD.chunk.mjs (Deleted) -8.45kB 0 bytes -100.0% 🗑️
js/ar-lSCQ548a.chunk.mjs (Deleted) -8.45kB 0 bytes -100.0% 🗑️
js/km-2cDb3lW2.chunk.mjs (Deleted) -8.43kB 0 bytes -100.0% 🗑️
js/sk-CjagmBaH.chunk.mjs (Deleted) -8.26kB 0 bytes -100.0% 🗑️
js/bs-B8k7IkaK.chunk.mjs (Deleted) -8.24kB 0 bytes -100.0% 🗑️
js/sr-Latn-B_md4nE-.chunk.mjs (Deleted) -8.18kB 0 bytes -100.0% 🗑️
js/ar-EG-a4ahMypg.chunk.mjs (Deleted) -8.13kB 0 bytes -100.0% 🗑️
js/ar-TN-ByNaSquv.chunk.mjs (Deleted) -8.06kB 0 bytes -100.0% 🗑️
js/ar-DZ-C1-cMv-R.chunk.mjs (Deleted) -8.06kB 0 bytes -100.0% 🗑️
js/ar-MA-B6Gd0WB1.chunk.mjs (Deleted) -7.94kB 0 bytes -100.0% 🗑️
js/lt-BwCfb3k2.chunk.mjs (Deleted) -7.94kB 0 bytes -100.0% 🗑️
js/ar-SA-CsMgICZk.chunk.mjs (Deleted) -7.93kB 0 bytes -100.0% 🗑️
js/ckb-D7jO7BDi.chunk.mjs (Deleted) -7.83kB 0 bytes -100.0% 🗑️
js/gu-BqFsqd0w.chunk.mjs (Deleted) -7.81kB 0 bytes -100.0% 🗑️
js/he-CaZtPIUv.chunk.mjs (Deleted) -7.77kB 0 bytes -100.0% 🗑️
js/lb-W-pjFJ6E.chunk.mjs (Deleted) -7.7kB 0 bytes -100.0% 🗑️
js/el-CrqmslUl.chunk.mjs (Deleted) -7.69kB 0 bytes -100.0% 🗑️
js/vi-BozkU39o.chunk.mjs (Deleted) -7.61kB 0 bytes -100.0% 🗑️
js/fa-IR-Cvxc2nie.chunk.mjs (Deleted) -7.25kB 0 bytes -100.0% 🗑️
js/hy-DnKi0NFJ.chunk.mjs (Deleted) -7.2kB 0 bytes -100.0% 🗑️
js/et-Ck-9s9Ed.chunk.mjs (Deleted) -7.2kB 0 bytes -100.0% 🗑️
js/bg-Drqt_kOz.chunk.mjs (Deleted) -7.07kB 0 bytes -100.0% 🗑️
js/ug--b1_2-ml.chunk.mjs (Deleted) -6.99kB 0 bytes -100.0% 🗑️
js/ca-D65Z2zAC.chunk.mjs (Deleted) -6.86kB 0 bytes -100.0% 🗑️
js/az-BVcYGkKh.chunk.mjs (Deleted) -6.81kB 0 bytes -100.0% 🗑️
js/ja-Hira-DnhKdEFx.chunk.mjs (Deleted) -6.75kB 0 bytes -100.0% 🗑️
js/mk-yAszETC2.chunk.mjs (Deleted) -6.64kB 0 bytes -100.0% 🗑️
js/fi-DjjXNutF.chunk.mjs (Deleted) -6.53kB 0 bytes -100.0% 🗑️
js/cy-DOvGB9VE.chunk.mjs (Deleted) -6.47kB 0 bytes -100.0% 🗑️
js/gd-DgqpQjrr.chunk.mjs (Deleted) -6.4kB 0 bytes -100.0% 🗑️
js/eu-CRWG3iSG.chunk.mjs (Deleted) -6.35kB 0 bytes -100.0% 🗑️
js/oc-MhqmvQQS.chunk.mjs (Deleted) -6.28kB 0 bytes -100.0% 🗑️
js/pt-D9DmLixY.chunk.mjs (Deleted) -6.15kB 0 bytes -100.0% 🗑️
js/zh-CN-D3Ab2IDv.chunk.mjs (Deleted) -6.15kB 0 bytes -100.0% 🗑️
js/es-Dc7RtFZL.chunk.mjs (Deleted) -6.13kB 0 bytes -100.0% 🗑️
js/is-Cg0G6k3E.chunk.mjs (Deleted) -6.03kB 0 bytes -100.0% 🗑️
js/pt-BR-Bmi3cTwP.chunk.mjs (Deleted) -6.03kB 0 bytes -100.0% 🗑️
js/tr-Bzo1lfVN.chunk.mjs (Deleted) -6.02kB 0 bytes -100.0% 🗑️
js/mt-CtLDjFNr.chunk.mjs (Deleted) -6.01kB 0 bytes -100.0% 🗑️
js/gl-HaTOfJbj.chunk.mjs (Deleted) -5.99kB 0 bytes -100.0% 🗑️
js/sv-OKxFngFh.chunk.mjs (Deleted) -5.92kB 0 bytes -100.0% 🗑️
js/zh-TW-UfH3QJPN.chunk.mjs (Deleted) -5.91kB 0 bytes -100.0% 🗑️
js/zh-HK-DOmCSKu-.chunk.mjs (Deleted) -5.91kB 0 bytes -100.0% 🗑️
js/uz-Cyrl-B-svZQWv.chunk.mjs (Deleted) -5.9kB 0 bytes -100.0% 🗑️
js/ro-BOTFQGfr.chunk.mjs (Deleted) -5.89kB 0 bytes -100.0% 🗑️
js/ja-p7iaEDjK.chunk.mjs (Deleted) -5.87kB 0 bytes -100.0% 🗑️
js/da-DbbNZVPW.chunk.mjs (Deleted) -5.8kB 0 bytes -100.0% 🗑️
js/af-C9nb_5aP.chunk.mjs (Deleted) -5.75kB 0 bytes -100.0% 🗑️
js/hu-BqhwCuig.chunk.mjs (Deleted) -5.74kB 0 bytes -100.0% 🗑️
js/sq-DyK2KjzY.chunk.mjs (Deleted) -5.73kB 0 bytes -100.0% 🗑️
js/match-Mrr0RIws.chunk.mjs (Deleted) -5.7kB 0 bytes -100.0% 🗑️
js/id-CmepdB5Z.chunk.mjs (Deleted) -5.68kB 0 bytes -100.0% 🗑️
js/ms-Dc5qYcAi.chunk.mjs (Deleted) -5.67kB 0 bytes -100.0% 🗑️
js/se-DXLyDFdN.chunk.mjs (Deleted) -5.63kB 0 bytes -100.0% 🗑️
js/uz-Bzm9Brvl.chunk.mjs (Deleted) -5.51kB 0 bytes -100.0% 🗑️
js/eo-DrxeeWtY.chunk.mjs (Deleted) -5.43kB 0 bytes -100.0% 🗑️
js/nn-CTZH0rCa.chunk.mjs (Deleted) -5.4kB 0 bytes -100.0% 🗑️
js/ko-BArCNZEj.chunk.mjs (Deleted) -5.38kB 0 bytes -100.0% 🗑️
js/nb-yM02iQjv.chunk.mjs (Deleted) -5.3kB 0 bytes -100.0% 🗑️
js/ht-BjQPqvl5.chunk.mjs (Deleted) -5.23kB 0 bytes -100.0% 🗑️
js/nl-BE-BwFeu74b.chunk.mjs (Deleted) -5.21kB 0 bytes -100.0% 🗑️
js/nl-Cn7Vlfvu.chunk.mjs (Deleted) -5.21kB 0 bytes -100.0% 🗑️
js/fy-BUwiJ_Kn.chunk.mjs (Deleted) -5.1kB 0 bytes -100.0% 🗑️
js/match-Sthf1soC.chunk.mjs (Deleted) -5.01kB 0 bytes -100.0% 🗑️
js/match-Bgru202T.chunk.mjs (Deleted) -4.88kB 0 bytes -100.0% 🗑️
js/_plugin-vue_export-helper-DHRTeHvG.chunk.mjs.license (Deleted) -3.11kB 0 bytes -100.0% 🗑️
js/de-AT-C7CZqJna.chunk.mjs (Deleted) -2.45kB 0 bytes -100.0% 🗑️
js/de-DegzsKFp.chunk.mjs (Deleted) -2.44kB 0 bytes -100.0% 🗑️
js/en-CA-BawTl0sj.chunk.mjs (Deleted) -1.88kB 0 bytes -100.0% 🗑️
js/FilePicker-qWi4RBGN-BYLxzQJz.chunk.mjs.license (Deleted) -1.07kB 0 bytes -100.0% 🗑️
js/fr-CH-Bto3leZg.chunk.mjs (Deleted) -999 bytes 0 bytes -100.0% 🗑️
js/fr-CA-CDfrtX_p.chunk.mjs (Deleted) -857 bytes 0 bytes -100.0% 🗑️
js/fr-DU8yPcT6.chunk.mjs (Deleted) -848 bytes 0 bytes -100.0% 🗑️
js/it-CH-CMakMIAS.chunk.mjs (Deleted) -835 bytes 0 bytes -100.0% 🗑️
js/it-DJWYJF30.chunk.mjs (Deleted) -827 bytes 0 bytes -100.0% 🗑️
js/en-IN-Dr4yZLAE.chunk.mjs (Deleted) -791 bytes 0 bytes -100.0% 🗑️
js/en-AU-L5e0q8UA.chunk.mjs (Deleted) -789 bytes 0 bytes -100.0% 🗑️
js/en-NZ-BBhEbMPa.chunk.mjs (Deleted) -789 bytes 0 bytes -100.0% 🗑️
js/en-ZA-CtA9SS9J.chunk.mjs (Deleted) -783 bytes 0 bytes -100.0% 🗑️
js/be-tarask-DgyCasE9.chunk.mjs.license (Deleted) -614 bytes 0 bytes -100.0% 🗑️
js/formatLong-KrbLaZrY.chunk.mjs (Deleted) -533 bytes 0 bytes -100.0% 🗑️
js/index-D3kKBZ26.chunk.mjs.license (Deleted) -466 bytes 0 bytes -100.0% 🗑️
js/index-8SwLPfur.chunk.mjs.license (Deleted) -450 bytes 0 bytes -100.0% 🗑️
js/en-GB-DBGIq_N1.chunk.mjs (Deleted) -421 bytes 0 bytes -100.0% 🗑️
js/en-IE-B7TqAY_Y.chunk.mjs (Deleted) -421 bytes 0 bytes -100.0% 🗑️
js/isSameWeek-DouT8tU3.chunk.mjs (Deleted) -190 bytes 0 bytes -100.0% 🗑️
js/en-GB-DBGIq_N1.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/en-IE-B7TqAY_Y.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/formatLong-KrbLaZrY.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/isSameWeek-DouT8tU3.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/de-AT-C7CZqJna.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/de-DegzsKFp.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/en-AU-L5e0q8UA.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/en-IN-Dr4yZLAE.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/en-NZ-BBhEbMPa.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/en-ZA-CtA9SS9J.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/fr-CA-CDfrtX_p.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/fr-DU8yPcT6.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/it-CH-CMakMIAS.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/it-DJWYJF30.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/en-CA-BawTl0sj.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/match-Bgru202T.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/fr-CH-Bto3leZg.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/match-Sthf1soC.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/match-Mrr0RIws.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/af-C9nb_5aP.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/ar-DZ-C1-cMv-R.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/ar-EG-a4ahMypg.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/ar-MA-B6Gd0WB1.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/ar-SA-CsMgICZk.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/ar-TN-ByNaSquv.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/ar-lSCQ548a.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/az-BVcYGkKh.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/be-BVYaMre9.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/bg-Drqt_kOz.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/bn-QwIRm2RY.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/bs-B8k7IkaK.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/ca-D65Z2zAC.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/ckb-D7jO7BDi.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/cs-DszVkYrQ.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/cy-DOvGB9VE.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/da-DbbNZVPW.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/el-CrqmslUl.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/eo-DrxeeWtY.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/es-Dc7RtFZL.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/et-Ck-9s9Ed.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/eu-CRWG3iSG.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/fa-IR-Cvxc2nie.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/fi-DjjXNutF.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/fy-BUwiJ_Kn.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/gd-DgqpQjrr.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/gl-HaTOfJbj.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/gu-BqFsqd0w.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/he-CaZtPIUv.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/hi-Deyp1b-n.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/hr-CsMvpaQD.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/ht-BjQPqvl5.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/hu-BqhwCuig.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/hy-DnKi0NFJ.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/id-CmepdB5Z.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/is-Cg0G6k3E.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/ja-Hira-DnhKdEFx.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/ja-p7iaEDjK.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/ka-DmsjoDLK.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/kk-B6FnBJLA.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/km-2cDb3lW2.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/kn-DdaYghEL.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/ko-BArCNZEj.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/lb-W-pjFJ6E.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/lt-BwCfb3k2.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/lv-CvgfjGbZ.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/mk-yAszETC2.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/mn-MlrOl0Mk.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/ms-Dc5qYcAi.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/mt-CtLDjFNr.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/nb-yM02iQjv.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/nl-BE-BwFeu74b.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/nl-Cn7Vlfvu.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/nn-CTZH0rCa.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/oc-MhqmvQQS.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/pl-C8mdYi6t.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/pt-BR-Bmi3cTwP.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/pt-D9DmLixY.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/ro-BOTFQGfr.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/ru-CzzuX-LQ.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/se-DXLyDFdN.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/sk-CjagmBaH.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/sl-CtVvrDPr.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/sq-DyK2KjzY.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/sr-Latn-B_md4nE-.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/sr-BAbF2g8k.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/sv-OKxFngFh.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/ta-BusexmME.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/te-pFIHkFG-.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/th-DIGIMg9T.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/tr-Bzo1lfVN.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/ug--b1_2-ml.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/uk-D6ZRRsvo.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/uz-Cyrl-B-svZQWv.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/uz-Bzm9Brvl.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/vi-BozkU39o.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/zh-CN-D3Ab2IDv.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/zh-HK-DOmCSKu-.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️
js/zh-TW-UfH3QJPN.chunk.mjs.license (Deleted) -184 bytes 0 bytes -100.0% 🗑️

Assisted-by: Claude Code:claude-opus-5-5
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Léo Jan <leo.jan@doctolib.com>
@codecov

codecov Bot commented Nov 9, 2026

Copy link
Copy Markdown

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

AI assisted This PR contains AI-assisted commits

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants