diff --git a/.github/workflows/code-analysis.yaml b/.github/workflows/code-analysis.yaml index b4c25114..678e0c1f 100644 --- a/.github/workflows/code-analysis.yaml +++ b/.github/workflows/code-analysis.yaml @@ -14,11 +14,9 @@ jobs: fail-fast: false matrix: actions: - - - name: 'PHPStan' + - name: 'PHPStan' run: composer phpstan - - - name: 'Coding Standards' + - name: 'Coding Standards' run: composer fix-cs name: ${{ matrix.actions.name }} runs-on: ubuntu-latest @@ -33,7 +31,7 @@ jobs: id: setup-php uses: shivammathur/setup-php@v2 with: - php-version: 8.2 + php-version: 8.1 extensions: 'ctype,curl,dom,iconv,imagick,intl,json,mbstring,openssl,pcre,pdo,reflection,spl,zip' ini-values: post_max_size=256M, max_execution_time=180, memory_limit=512M tools: composer:v2 diff --git a/CHANGELOG.md b/CHANGELOG.md index 188f54a8..748bfc9d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Retour Changelog +## 3.2.14 - 2024.03.25 +### Fixed +* Added the unused `static` to the Tailwind CSS `blocklist` to avoid a name collision with a Craft CSS class ([#1412](https://github.com/nystudio107/craft-seomatic/issues/1412)) +* Fixed an issue with impropertly text-encoded characters in URLs potentially causing a db exception ([#291](https://github.com/nystudio107/craft-retour/issues/291)) +* Fixed an issue where an empty redirect in the `excludePatterns` list could cause redirects to stop functioning, add logging when a redirect is excluded ([#297](https://github.com/nystudio107/craft-retour/issues/297)) + ## 3.2.13 - 2024.02.05 ### Added * Add `phpstan` and `ecs` code linting diff --git a/buildchain/tailwind.config.ts b/buildchain/tailwind.config.ts index 68ecac75..e213afb4 100644 --- a/buildchain/tailwind.config.ts +++ b/buildchain/tailwind.config.ts @@ -4,6 +4,9 @@ export default { '../src/templates/**/*.{twig,html}', './src/vue/**/*.{vue,html}', ], + blocklist: [ + 'static', + ], theme: {}, plugins: [], }; diff --git a/composer.json b/composer.json index 1e3e3fac..57926402 100644 --- a/composer.json +++ b/composer.json @@ -2,7 +2,7 @@ "name": "nystudio107/craft-retour", "description": "Retour allows you to intelligently redirect legacy URLs, so that you don't lose SEO value when rebuilding & restructuring a website", "type": "craft-plugin", - "version": "3.2.13", + "version": "3.2.14", "keywords": [ "craftcms", "craft-plugin", @@ -32,14 +32,20 @@ "craftcms/ecs": "dev-main", "craftcms/phpstan": "dev-main", "craftcms/rector": "dev-main", - "codeception/codeception": "^3.0", + "codeception/codeception": "^4.1.29", + "codeception/module-asserts": "^1.3.1", + "codeception/module-datafactory": "^1.1.0", + "codeception/module-phpbrowser": "^1.0.2", + "codeception/module-rest": "^1.4.2", + "codeception/module-yii2": "^1.1.5", "markhuot/craftql": "^1.0.0", "vlucas/phpdotenv": "^3.0" }, "scripts": { "phpstan": "phpstan --ansi --memory-limit=1G", "check-cs": "ecs check --ansi", - "fix-cs": "ecs check --fix --ansi" + "fix-cs": "ecs check --fix --ansi", + "test": "codecept run unit --coverage-xml" }, "config": { "allow-plugins": { diff --git a/docs/docs/.vitepress/config.ts b/docs/docs/.vitepress/config.ts index 969a3de2..8d8f2d00 100644 --- a/docs/docs/.vitepress/config.ts +++ b/docs/docs/.vitepress/config.ts @@ -23,8 +23,11 @@ export default defineConfig({ }, algolia: { appId: 'PBLZ7FT9Z3', - apiKey: 'ab56b755c575dc94a58f7d1cae6e4e0e', - indexName: 'retour' + apiKey: '953923b236f39535b8553f4143cab98d', + indexName: 'retour', + searchParameters: { + facetFilters: ["version:v3"], + }, }, lastUpdatedText: 'Last Updated', sidebar: [ diff --git a/phpstan.neon b/phpstan.neon index 44554e4f..9ad13081 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -1,5 +1,5 @@ includes: - - vendor/craftcms/phpstan/phpstan.neon + - %currentWorkingDirectory%/vendor/craftcms/phpstan/phpstan.neon parameters: level: 5 diff --git a/src/controllers/FileController.php b/src/controllers/FileController.php index 24bd7613..104ae486 100644 --- a/src/controllers/FileController.php +++ b/src/controllers/FileController.php @@ -106,6 +106,7 @@ public function actionImportCsvColumns() if (!ini_get('auto_detect_line_endings')) { ini_set('auto_detect_line_endings', '1'); } + $csv = null; $this->requirePostRequest(); $filename = Craft::$app->getRequest()->getRequiredBodyParam('filename'); $columns = Craft::$app->getRequest()->getRequiredBodyParam('columns'); @@ -137,7 +138,7 @@ public function actionImportCsvColumns() } $hasErrors = false; // If we have headers, then we have a file, so parse it - if ($headers !== null) { + if ($csv && $headers) { switch (VersionHelper::getLeagueCsvVersion()) { case 8: $hasErrors = $this->importCsvApi8($csv, $columns, $headers); diff --git a/src/migrations/Install.php b/src/migrations/Install.php index 7a57baae..af4fa48a 100644 --- a/src/migrations/Install.php +++ b/src/migrations/Install.php @@ -14,6 +14,7 @@ use Craft; use craft\db\Migration; use nystudio107\retour\widgets\RetourWidget; +use yii\base\NotSupportedException; /** * @author nystudio107 @@ -71,13 +72,14 @@ public function safeDown() /** * @return bool + * @throws NotSupportedException */ protected function createTables(): bool { $tablesCreated = false; - $tableSchema = Craft::$app->db->schema->getTableSchema('{{%retour_redirects}}'); - if ($tableSchema === null) { + $tableSchema = $this->getDb()->getSchema()->getTableSchema('{{%retour_redirects}}'); + if ($tableSchema) { $tablesCreated = true; $this->createTable( '{{%retour_redirects}}', @@ -103,8 +105,8 @@ protected function createTables(): bool ); } - $tableSchema = Craft::$app->db->schema->getTableSchema('{{%retour_static_redirects}}'); - if ($tableSchema === null) { + $tableSchema = $this->getDb()->schema->getTableSchema('{{%retour_static_redirects}}'); + if ($tableSchema) { $tablesCreated = true; $this->createTable( '{{%retour_static_redirects}}', @@ -130,8 +132,8 @@ protected function createTables(): bool ); } - $tableSchema = Craft::$app->db->schema->getTableSchema('{{%retour_stats}}'); - if ($tableSchema === null) { + $tableSchema = $this->getDb()->schema->getTableSchema('{{%retour_stats}}'); + if ($tableSchema) { $tablesCreated = true; $this->createTable( '{{%retour_stats}}', @@ -165,70 +167,70 @@ protected function createTables(): bool protected function createIndexes() { $this->createIndex( - $this->db->getIndexName(), + $this->getDb()->getIndexName(), '{{%retour_static_redirects}}', 'redirectSrcUrlParsed', false ); $this->createIndex( - $this->db->getIndexName(), + $this->getDb()->getIndexName(), '{{%retour_redirects}}', 'redirectSrcUrlParsed', false ); $this->createIndex( - $this->db->getIndexName(), + $this->getDb()->getIndexName(), '{{%retour_static_redirects}}', 'redirectSrcUrl', false ); $this->createIndex( - $this->db->getIndexName(), + $this->getDb()->getIndexName(), '{{%retour_redirects}}', 'redirectSrcUrl', false ); $this->createIndex( - $this->db->getIndexName(), + $this->getDb()->getIndexName(), '{{%retour_stats}}', 'redirectSrcUrl', false ); $this->createIndex( - $this->db->getIndexName(), + $this->getDb()->getIndexName(), '{{%retour_static_redirects}}', 'redirectMatchType', false ); $this->createIndex( - $this->db->getIndexName(), + $this->getDb()->getIndexName(), '{{%retour_redirects}}', 'redirectMatchType', false ); $this->createIndex( - $this->db->getIndexName(), + $this->getDb()->getIndexName(), '{{%retour_redirects}}', 'siteId', false ); $this->createIndex( - $this->db->getIndexName(), + $this->getDb()->getIndexName(), '{{%retour_static_redirects}}', 'siteId', false ); $this->createIndex( - $this->db->getIndexName(), + $this->getDb()->getIndexName(), '{{%retour_stats}}', 'siteId', false @@ -241,7 +243,7 @@ protected function createIndexes() protected function addForeignKeys() { $this->addForeignKey( - $this->db->getForeignKeyName(), + $this->getDb()->getForeignKeyName(), '{{%retour_redirects}}', 'associatedElementId', '{{%elements}}', @@ -251,7 +253,7 @@ protected function addForeignKeys() ); $this->addForeignKey( - $this->db->getForeignKeyName(), + $this->getDb()->getForeignKeyName(), '{{%retour_static_redirects}}', 'siteId', '{{%sites}}', @@ -261,7 +263,7 @@ protected function addForeignKeys() ); $this->addForeignKey( - $this->db->getForeignKeyName(), + $this->getDb()->getForeignKeyName(), '{{%retour_stats}}', 'siteId', '{{%sites}}', diff --git a/src/services/Redirects.php b/src/services/Redirects.php index 8cf36d93..4779d7c7 100644 --- a/src/services/Redirects.php +++ b/src/services/Redirects.php @@ -25,6 +25,7 @@ use nystudio107\retour\events\RedirectResolvedEvent; use nystudio107\retour\events\ResolveRedirectEvent; use nystudio107\retour\fields\ShortLink; +use nystudio107\retour\helpers\Text as TextHelper; use nystudio107\retour\helpers\UrlHelper; use nystudio107\retour\models\StaticRedirects as StaticRedirectsModel; use nystudio107\retour\Retour; @@ -706,11 +707,11 @@ public function getStaticRedirect(string $fullUrl, string $pathOnly, $siteId, bo 'or', ['and', ['redirectSrcMatch' => 'pathonly'], - ['redirectSrcUrlParsed' => $pathOnly], + ['redirectSrcUrlParsed' => TextHelper::cleanupText($pathOnly)], ], ['and', ['redirectSrcMatch' => 'fullurl'], - ['redirectSrcUrlParsed' => $fullUrl], + ['redirectSrcUrlParsed' => TextHelper::cleanupText($fullUrl)], ], ]; @@ -860,7 +861,7 @@ public function getRedirectByRedirectSrcUrl(string $redirectSrcUrl, int $siteId // Query the db table $query = (new Query()) ->from(['{{%retour_static_redirects}}']) - ->where(['redirectSrcUrl' => $redirectSrcUrl]); + ->where(['redirectSrcUrl' => TextHelper::cleanupText($redirectSrcUrl)]); if ($siteId) { $query ->andWhere(['or', [ @@ -1209,9 +1210,21 @@ public function excludeUri($uri): bool $uri = '/' . ltrim($uri, '/'); if (!empty(Retour::$settings->excludePatterns)) { foreach (Retour::$settings->excludePatterns as $excludePattern) { + if (empty($excludePattern['pattern'])) { + continue; + } $pattern = '`' . $excludePattern['pattern'] . '`i'; try { if (preg_match($pattern, $uri) === 1) { + Craft::info( + Craft::t( + 'retour', + 'Excluded URI: {uri} due to match of pattern: {pattern}', + ['uri' => $uri, 'pathOnly' => $pattern] + ), + __METHOD__ + ); + return true; } } catch (\Exception $e) { diff --git a/src/services/Statistics.php b/src/services/Statistics.php index 5899ef08..1e613b5b 100644 --- a/src/services/Statistics.php +++ b/src/services/Statistics.php @@ -16,6 +16,8 @@ use craft\db\Query; use craft\helpers\Db; use craft\helpers\UrlHelper; +use DateTime; +use nystudio107\retour\helpers\Text as TextHelper; use nystudio107\retour\models\Stats as StatsModel; use nystudio107\retour\Retour; use yii\db\Exception; @@ -193,7 +195,7 @@ public function incrementStatistics(string $url, $handled = false, $siteId = nul // Find any existing retour_stats record $statsConfig = (new Query()) ->from(['{{%retour_stats}}']) - ->where(['redirectSrcUrl' => $stats->redirectSrcUrl]) + ->where(['redirectSrcUrl' => TextHelper::cleanupText($stats->redirectSrcUrl)]) ->one(); // If no record is found, initialize some values if ($statsConfig === null) { @@ -211,7 +213,7 @@ public function incrementStatistics(string $url, $handled = false, $siteId = nul $stats->exceptionMessage = $exceptionMessage; $stats->exceptionFilePath = $exceptionFilePath; $stats->exceptionFileLine = (int)$exceptionFileLine; - $stats->hitLastTime = Db::prepareDateForDb(new \DateTime()); + $stats->hitLastTime = Db::prepareDateForDb(new DateTime()); $stats->handledByRetour = (int)$handled; $stats->hitCount++; $statsConfig = $stats->getAttributes(); diff --git a/src/translations/en/retour.php b/src/translations/en/retour.php index d623eb5d..36885d26 100644 --- a/src/translations/en/retour.php +++ b/src/translations/en/retour.php @@ -171,4 +171,5 @@ 'Some errors occured .' => 'Some errors occured .', 'Some errors occured importing the CSV file.' => 'Some errors occured importing the CSV file.', 'Select the priority that will determine the order of mathching the redirect.' => 'Select the priority that will determine the order of mathching the redirect.', + 'Excluded URI: {uri} due to match of pattern: {pattern}' => 'Excluded URI: {uri} due to match of pattern: {pattern}' ]; diff --git a/src/web/assets/dist/assets/retour-0lLzocvu.css b/src/web/assets/dist/assets/retour-0lLzocvu.css new file mode 100644 index 00000000..bf836949 --- /dev/null +++ b/src/web/assets/dist/assets/retour-0lLzocvu.css @@ -0,0 +1 @@ +div.retour-button-container{display:inline-block;margin-right:10px}table.vuetable{width:100%;table-layout:fixed;overflow:hidden}.retour-menubtn-asc:before{font-weight:700;content:"downangle"}.retour-menubtn-desc:before{font-weight:700;content:"upangle"}table.retour-dashboard th.vuetable-th-checkbox-id{width:3%!important}table.retour-dashboard th.vuetable-th-redirectSrcUrl{width:34%!important}th.vuetable-th-referrerUrl{width:20%!important}th.vuetable-th-remoteIp{width:14%!important}th.vuetable-th-hitCount{width:8%!important;text-align:right!important}th.vuetable-th-hitLastTime{width:16%!important}th.vuetable-th-handledByRetour{width:12%!important}th.vuetable-th-addLink,table.retour-redirects th.vuetable-th-checkbox-id{width:3%!important}table.retour-redirects th.vuetable-th-redirectSrcUrl{width:28%!important}th.vuetable-th-redirectDestUrl{width:22%!important}th.vuetable-th-redirectMatchType{width:10%!important}th.vuetable-th-priority{width:8%!important;text-align:right!important}th.vuetable-th-siteName{width:10%!important}th.vuetable-th-redirectHttpCode{width:7%!important}td.text-center,th.text-center{text-align:center!important}td.text-right,th.text-right{text-align:right!important}.absolute{position:absolute}.relative{position:relative}.float-right{float:right}.mx-2{margin-left:.5rem;margin-right:.5rem}.mb-4{margin-bottom:1rem}.ml-2{margin-left:.5rem}.mr-2{margin-right:.5rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.grid{display:grid}.hidden{display:none}.w-full{width:100%}.flex-shrink{flex-shrink:1}.flex-grow{flex-grow:1}.items-start{align-items:flex-start}.overflow-hidden{overflow:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.border-solid{border-style:solid}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.pl-3{padding-left:.75rem}.pt-3{padding-top:.75rem}.align-bottom{vertical-align:bottom}.leading-tight{line-height:1.25}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity))}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.retour-import-list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd;cursor:move}.retour-import-field-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd;cursor:arrow}.retour-import-arrow-item{position:relative;display:block;padding:11px 15px}.retour-import-drag-area{min-height:100px}.retour-empty-item{background:repeating-linear-gradient(-55deg,#ddd,#ddd 10px,#eee 10px,#eee 20px)}.retour-inputfile{width:.1px;height:.1px;opacity:0;overflow:hidden;position:absolute;z-index:-1}.retour-reset:before{padding-bottom:4px} diff --git a/src/web/assets/dist/assets/retour-0lLzocvu.css.gz b/src/web/assets/dist/assets/retour-0lLzocvu.css.gz new file mode 100644 index 00000000..7b0700f8 Binary files /dev/null and b/src/web/assets/dist/assets/retour-0lLzocvu.css.gz differ diff --git a/src/web/assets/dist/assets/retour-GsbkZ0RI.js b/src/web/assets/dist/assets/retour-GsbkZ0RI.js deleted file mode 100644 index 096dc2ef..00000000 --- a/src/web/assets/dist/assets/retour-GsbkZ0RI.js +++ /dev/null @@ -1,2 +0,0 @@ - -//# sourceMappingURL=retour-GsbkZ0RI.js.map diff --git a/src/web/assets/dist/assets/retour-GsbkZ0RI.js.map b/src/web/assets/dist/assets/retour-GsbkZ0RI.js.map deleted file mode 100644 index 9e8c1030..00000000 --- a/src/web/assets/dist/assets/retour-GsbkZ0RI.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"retour-GsbkZ0RI.js","sources":[],"sourcesContent":[],"names":[],"mappings":""} \ No newline at end of file diff --git a/src/web/assets/dist/assets/retour-axBeLE34.css b/src/web/assets/dist/assets/retour-axBeLE34.css deleted file mode 100644 index ae14c752..00000000 --- a/src/web/assets/dist/assets/retour-axBeLE34.css +++ /dev/null @@ -1 +0,0 @@ -div.retour-button-container{display:inline-block;margin-right:10px}table.vuetable{width:100%;table-layout:fixed;overflow:hidden}.retour-menubtn-asc:before{font-weight:700;content:"downangle"}.retour-menubtn-desc:before{font-weight:700;content:"upangle"}table.retour-dashboard th.vuetable-th-checkbox-id{width:3%!important}table.retour-dashboard th.vuetable-th-redirectSrcUrl{width:34%!important}th.vuetable-th-referrerUrl{width:20%!important}th.vuetable-th-remoteIp{width:14%!important}th.vuetable-th-hitCount{width:8%!important;text-align:right!important}th.vuetable-th-hitLastTime{width:16%!important}th.vuetable-th-handledByRetour{width:12%!important}th.vuetable-th-addLink,table.retour-redirects th.vuetable-th-checkbox-id{width:3%!important}table.retour-redirects th.vuetable-th-redirectSrcUrl{width:28%!important}th.vuetable-th-redirectDestUrl{width:22%!important}th.vuetable-th-redirectMatchType{width:10%!important}th.vuetable-th-priority{width:8%!important;text-align:right!important}th.vuetable-th-siteName{width:10%!important}th.vuetable-th-redirectHttpCode{width:7%!important}td.text-center,th.text-center{text-align:center!important}td.text-right,th.text-right{text-align:right!important}.static{position:static}.absolute{position:absolute}.relative{position:relative}.float-right{float:right}.mx-2{margin-left:.5rem;margin-right:.5rem}.mb-4{margin-bottom:1rem}.ml-2{margin-left:.5rem}.mr-2{margin-right:.5rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.grid{display:grid}.hidden{display:none}.w-full{width:100%}.flex-shrink{flex-shrink:1}.flex-grow{flex-grow:1}.items-start{align-items:flex-start}.overflow-hidden{overflow:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.border-solid{border-style:solid}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.pl-3{padding-left:.75rem}.pt-3{padding-top:.75rem}.align-bottom{vertical-align:bottom}.leading-tight{line-height:1.25}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity))}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.retour-import-list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd;cursor:move}.retour-import-field-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd;cursor:arrow}.retour-import-arrow-item{position:relative;display:block;padding:11px 15px}.retour-import-drag-area{min-height:100px}.retour-empty-item{background:repeating-linear-gradient(-55deg,#ddd,#ddd 10px,#eee 10px,#eee 20px)}.retour-inputfile{width:.1px;height:.1px;opacity:0;overflow:hidden;position:absolute;z-index:-1}.retour-reset:before{padding-bottom:4px} diff --git a/src/web/assets/dist/assets/retour-axBeLE34.css.gz b/src/web/assets/dist/assets/retour-axBeLE34.css.gz deleted file mode 100644 index 5fe2ebc5..00000000 Binary files a/src/web/assets/dist/assets/retour-axBeLE34.css.gz and /dev/null differ diff --git a/src/web/assets/dist/assets/retour-mao8V0mm.js b/src/web/assets/dist/assets/retour-mao8V0mm.js new file mode 100644 index 00000000..9133f301 --- /dev/null +++ b/src/web/assets/dist/assets/retour-mao8V0mm.js @@ -0,0 +1,2 @@ + +//# sourceMappingURL=retour-mao8V0mm.js.map diff --git a/src/web/assets/dist/assets/retour-mao8V0mm.js.map b/src/web/assets/dist/assets/retour-mao8V0mm.js.map new file mode 100644 index 00000000..5812f918 --- /dev/null +++ b/src/web/assets/dist/assets/retour-mao8V0mm.js.map @@ -0,0 +1 @@ +{"version":3,"file":"retour-mao8V0mm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""} \ No newline at end of file diff --git a/src/web/assets/dist/manifest.json b/src/web/assets/dist/manifest.json index f0f91d6c..256ceb45 100644 --- a/src/web/assets/dist/manifest.json +++ b/src/web/assets/dist/manifest.json @@ -57,9 +57,9 @@ }, "src/js/Retour.js": { "css": [ - "assets/retour-axBeLE34.css" + "assets/retour-0lLzocvu.css" ], - "file": "assets/retour-GsbkZ0RI.js", + "file": "assets/retour-mao8V0mm.js", "isEntry": true, "src": "src/js/Retour.js" }, diff --git a/src/web/assets/dist/manifest.json.gz b/src/web/assets/dist/manifest.json.gz index 326bcf10..28ee182f 100644 Binary files a/src/web/assets/dist/manifest.json.gz and b/src/web/assets/dist/manifest.json.gz differ diff --git a/src/web/assets/dist/stats.html b/src/web/assets/dist/stats.html index ca355bc1..cd9b572f 100644 --- a/src/web/assets/dist/stats.html +++ b/src/web/assets/dist/stats.html @@ -4822,7 +4822,7 @@