From bf3a9ad5b9cbc381c457f0af367bef2f319499de Mon Sep 17 00:00:00 2001
From: Toufic Batache <taffou2a@gmail.com>
Date: Wed, 22 May 2024 13:06:34 +0200
Subject: [PATCH] Use ESLint to order imports

---
 .eslintrc.cjs                                 |  22 +
 README.md                                     |  42 +-
 gitlab-ci/src/gitlab-ci.ts                    |   1 +
 package-lock.json                             | 789 ++++++++++++++++++
 package.json                                  |   3 +-
 plugin-yaml-patched.ts                        |   4 +-
 src/hooks.server.ts                           |   2 +-
 .../AllocationsFamilialesBudgetView.svelte    |   6 +-
 ...tionsFamilialesGagnantsPerdantsView.svelte |   1 -
 src/lib/components/CsgBudgetView.svelte       |   2 +-
 .../components/CsgGagnantsPerdantsView.svelte |   1 -
 .../components/IntroWarningBillModal.svelte   |   2 -
 src/lib/components/IrBudgetView.svelte        |   2 +-
 .../components/IrGagnantsPerdantsView.svelte  |   1 -
 src/lib/components/WaterfallView.svelte       |   9 +-
 .../components/test_cases/TestCaseEdit.svelte |   2 +-
 .../test_cases/TestCaseGraph.svelte           |  14 +-
 .../test_cases/TestCaseRelatedCarousel.svelte |   8 +-
 .../test_cases/TestCaseSelectModal.svelte     |   6 +-
 .../test_cases/TestCaseSummary.svelte         |   3 +-
 .../TestCasesStackRepresentation.svelte       |   2 +-
 .../variables/InflationLawDetails.svelte      |   2 +-
 .../variables/InflationLawInfoModal.svelte    |   2 +-
 .../NonVariableReferredParameter.svelte       |  10 +-
 .../variables/VariableHeader.svelte           |   2 +-
 .../variables/VariableReferredInputs.svelte   |   4 +-
 .../VariableReferredInputsPane.svelte         |   4 +-
 .../VariableReferredNodeParameter.svelte      |   6 +-
 .../VariableReferredParameters.svelte         |  11 +-
 .../VariableReferredScaleParameter.svelte     |   4 +-
 .../VariableReferredValueParameter.svelte     |   2 +-
 .../VariableReferredValueView.svelte          |   2 +-
 .../components/variables/VariableView.svelte  |   2 +-
 src/lib/decompositions.ts                     |   2 +-
 src/lib/search/search_worker_parameters.ts    |   2 +-
 src/lib/search/search_worker_variables_all.ts |   2 +-
 .../search_worker_variables_with_linked.ts    |   2 +-
 src/lib/server/config.ts                      |   2 +-
 src/routes/+layout.server.ts                  |   6 +-
 src/routes/+layout.svelte                     |   4 +-
 src/routes/+page.svelte                       |  14 +-
 src/routes/auth/login/+server.ts              |   4 +-
 src/routes/auth/logout/+server.ts             |   4 +-
 src/routes/auth/restore_state/+page.svelte    |   8 +-
 src/routes/budgets/+server.ts                 |   9 +-
 src/routes/budgets/demands/+server.ts         |   4 +-
 src/routes/budgets/simulations/+server.ts     |   9 +-
 .../simulations/[simulation]/+page.server.ts  |   9 +-
 .../simulations/[simulation]/+page.svelte     |   4 +-
 .../budgets/simulations/index/+server.ts      |   7 +-
 src/routes/entities/+page.svelte              |   4 +-
 src/routes/parameters/+page.svelte            |   4 +-
 .../parameters/[parameter]/+page.svelte       |   4 +-
 src/routes/parameters/[parameter]/+server.ts  |   7 +-
 .../parameters/[parameter]/edit/+page.svelte  |   4 +-
 .../parameters/[parameter]/edit/+page.ts      |   6 +-
 src/routes/test_cases/+server.ts              |   6 +-
 src/routes/test_cases/simulations/+server.ts  |   4 +-
 .../simulations/[simulation]/+page.server.ts  |   4 +-
 .../simulations/[simulation]/+page.svelte     |   4 +-
 src/routes/variables/+page.svelte             |   4 +-
 .../variables/[variable]/+page.server.ts      |   3 +-
 src/routes/variables/[variable]/+page.svelte  |   4 +-
 .../variables/[variable]/ast/+server.ts       |   3 +-
 .../[variable]/inputs/[date]/+page.svelte     |   4 +-
 .../[variable]/parameters/[date]/+page.svelte |   4 +-
 .../variables/[variable]/xlsx/+page.svelte    |   4 +-
 src/scripts/clear_simulations_cache.ts        |   3 +-
 vite.config.ts                                |   2 +-
 69 files changed, 977 insertions(+), 166 deletions(-)

diff --git a/.eslintrc.cjs b/.eslintrc.cjs
index 73e5db28d..51d3d015d 100644
--- a/.eslintrc.cjs
+++ b/.eslintrc.cjs
@@ -7,6 +7,9 @@ module.exports = {
   extends: [
     "eslint:recommended",
     "plugin:@typescript-eslint/recommended",
+    "plugin:import/errors",
+    "plugin:import/warnings",
+    "plugin:import/typescript",
     "plugin:svelte/recommended",
     "prettier",
   ],
@@ -27,9 +30,28 @@ module.exports = {
   },
   plugins: ["@typescript-eslint"],
   root: true,
+  rules: {
+    "import/order": [
+      "warn",
+      {
+        alphabetize: {
+          order: "asc",
+          caseInsensitive: true,
+        },
+        "newlines-between": "always",
+      },
+    ],
+    "import/no-unresolved": "off",
+  },
   settings: {
     svelte: {
       ignoreWarnings: ["no-irregular-whitespace", "svelte/no-at-html-tags"],
     },
+    "import/resolver": {
+      node: {
+        paths: ["src"],
+        extensions: [".js", ".jsx", ".ts", ".tsx", ".svelte"],
+      },
+    },
   },
 }
diff --git a/README.md b/README.md
index c4ae3ca30..476906a3c 100644
--- a/README.md
+++ b/README.md
@@ -43,16 +43,15 @@ L'application peut alors être consultée dans un navigateur à l'adresse indiqu
 
 Bravo ! Vous êtes prêts à utiliser et contribuer à `leximpact-socio-fiscal-ui` 🎉
 
+## Documentation
 
-## Documentation 
-
-### Ajouter une variable calculée dans le simulateur 
+### Ajouter une variable calculée dans le simulateur
 
 Dans l'application, seules les variables indiquées dans la feuille de paie sont calculées. Pour afficher les résultats d'une autre variable il faut donc demander à l'application de la récuéprer.
 
-#### Variable affichée dans l'étiquette du cas type : 
+#### Variable affichée dans l'étiquette du cas type :
 
-1. Dans le fichier variables.ts, ajouter le nom de la viariable OpenFisca : 
+1. Dans le fichier variables.ts, ajouter le nom de la viariable OpenFisca :
 
 ```js
 /// test case summaries.
@@ -78,17 +77,15 @@ populationId,
 ) ?? 0}
 ```
 
-3. Ensuite, appeler la variable dans le composant choisi : 
+3. Ensuite, appeler la variable dans le composant choisi :
 
 ```js
-<div>
-    {zone_apl}
-</div>
+<div>{zone_apl}</div>
 ```
 
 #### Variable affichée dans la décomposition :
 
-1. Dans le fichier variables.ts, ajouter le nom de la viariable OpenFisca : 
+1. Dans le fichier variables.ts, ajouter le nom de la viariable OpenFisca :
 
 ```js
 /// Autres variables à calculer
@@ -98,6 +95,7 @@ export const otherCalculatedVariablesName = [
   "taxes_tous_carburants",
 ]
 ```
+
 2. Dans le fichier souhaité, Appeler la variable dans la bonne catégorie (Ménage, foyer fiscal, individu, etc), comme fait dans cet exemple avec la variable `niveau_de_vie` dans le fichier `WaterfallView.svelte` :
 
 ```js
@@ -110,8 +108,7 @@ getCalculatedVariableNumberValue(
 ) ?? 0}
 ```
 
-3. Ensuite, appeler la variable dans le composant choisi : 
-
+3. Ensuite, appeler la variable dans le composant choisi :
 
 ```js
 {#if niveau_de_vie !== 0}
@@ -143,12 +140,11 @@ getCalculatedVariableNumberValue(
 
 Utiliser le composant `ValueChange` pour afficher le montant.
 
-
 ### Ajouter la valeur d'un paramètre dans l'UI
 
 Exemple ici avec l'ajout du paramètre smic mensuel `marche_travail.salaire_minimum.smic.smic_b_mensuel` dans le `TestCaseSummary.svelte`. L'objectif était d'afficher l'équivalent du revenu du cas type en nombre de smic. Il était donc nécessaire d'importer la dernière valeur du paramètre dans l'UI.
 
-1. Dans le fichier visé, ici `TestCaseSummary.svelte`, ajouter : 
+1. Dans le fichier visé, ici `TestCaseSummary.svelte`, ajouter :
 
 ```js
 $: parameterSmicMensuel = getParameter(
@@ -172,7 +168,7 @@ $: smicValue = smicLatestInstantValueCouple?.[1] as NumberValue
 ## Enfin ici, on lui dit de prendre la valeur, c'est à dire le deuxième élément du tableau. Attention il faut importer NumberValue (import type { NumberValue} from from "@openfisca/json-model")
 ```
 
-2- Il ne faut pas oublier de faire les imports et les déclarations pour que ces fonctions puissent s'effectuer : 
+2- Il ne faut pas oublier de faire les imports et les déclarations pour que ces fonctions puissent s'effectuer :
 
 ```js
   import type {
@@ -192,18 +188,18 @@ $: smicValue = smicLatestInstantValueCouple?.[1] as NumberValue
   let smicInstantValueCouplesArray: [string, ValueAtInstant][]
 
 ```
+
 3- Appeler le paramètre dans le fichier :
 
 ```js
-  <div>
-    {smicValue.value}
-## Ne pas oublier d'ajouter .value, pour cibler la value dans cet objet.
-  </div>  
+<div>
+  {smicValue.value}
+  ## Ne pas oublier d'ajouter .value, pour cibler la value dans cet objet.
+</div>
 ```
 
-
-Pour s'aider, on peut afficher la valeur dans la console : 
+Pour s'aider, on peut afficher la valeur dans la console :
 
 ```js
-  $: console.log(parameterSmicMensuel, smicValue)
-```
\ No newline at end of file
+$: console.log(parameterSmicMensuel, smicValue)
+```
diff --git a/gitlab-ci/src/gitlab-ci.ts b/gitlab-ci/src/gitlab-ci.ts
index 39a1cc9f9..5948c582d 100644
--- a/gitlab-ci/src/gitlab-ci.ts
+++ b/gitlab-ci/src/gitlab-ci.ts
@@ -1,4 +1,5 @@
 import assert from "assert"
+
 import { $, fetch, fs } from "zx"
 
 interface Package {
diff --git a/package-lock.json b/package-lock.json
index 74c70c9e0..dc4d1cc72 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -42,6 +42,7 @@
         "dotenv": "^16.0.0",
         "eslint": "^8.0.0",
         "eslint-config-prettier": "^9.0.0",
+        "eslint-plugin-import": "^2.29.1",
         "eslint-plugin-svelte": "^2.33.0",
         "fs-extra": "^11.1.0",
         "iconify-icon": "^2.1.0",
@@ -1377,6 +1378,12 @@
       "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
+    },
     "node_modules/@types/jsonfile": {
       "version": "6.1.4",
       "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.4.tgz",
@@ -1787,6 +1794,26 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/array-includes": {
+      "version": "3.1.8",
+      "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz",
+      "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.2",
+        "es-object-atoms": "^1.0.0",
+        "get-intrinsic": "^1.2.4",
+        "is-string": "^1.0.7"
+      },
+      "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",
@@ -1796,6 +1823,84 @@
         "node": ">=8"
       }
     },
+    "node_modules/array.prototype.findlastindex": {
+      "version": "1.2.5",
+      "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz",
+      "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.2",
+        "es-errors": "^1.3.0",
+        "es-object-atoms": "^1.0.0",
+        "es-shim-unscopables": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/array.prototype.flat": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz",
+      "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.2.0",
+        "es-abstract": "^1.22.1",
+        "es-shim-unscopables": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/array.prototype.flatmap": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz",
+      "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.2.0",
+        "es-abstract": "^1.22.1",
+        "es-shim-unscopables": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/arraybuffer.prototype.slice": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz",
+      "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==",
+      "dev": true,
+      "dependencies": {
+        "array-buffer-byte-length": "^1.0.1",
+        "call-bind": "^1.0.5",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.22.3",
+        "es-errors": "^1.2.1",
+        "get-intrinsic": "^1.2.3",
+        "is-array-buffer": "^3.0.4",
+        "is-shared-array-buffer": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/asynckit": {
       "version": "0.4.0",
       "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
@@ -2492,6 +2597,57 @@
         "node": ">=18"
       }
     },
+    "node_modules/data-view-buffer": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz",
+      "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.6",
+        "es-errors": "^1.3.0",
+        "is-data-view": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/data-view-byte-length": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz",
+      "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.7",
+        "es-errors": "^1.3.0",
+        "is-data-view": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/data-view-byte-offset": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz",
+      "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.6",
+        "es-errors": "^1.3.0",
+        "is-data-view": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/debug": {
       "version": "4.3.4",
       "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
@@ -2728,6 +2884,84 @@
         "url": "https://github.com/fb55/entities?sponsor=1"
       }
     },
+    "node_modules/es-abstract": {
+      "version": "1.23.3",
+      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz",
+      "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==",
+      "dev": true,
+      "dependencies": {
+        "array-buffer-byte-length": "^1.0.1",
+        "arraybuffer.prototype.slice": "^1.0.3",
+        "available-typed-arrays": "^1.0.7",
+        "call-bind": "^1.0.7",
+        "data-view-buffer": "^1.0.1",
+        "data-view-byte-length": "^1.0.1",
+        "data-view-byte-offset": "^1.0.0",
+        "es-define-property": "^1.0.0",
+        "es-errors": "^1.3.0",
+        "es-object-atoms": "^1.0.0",
+        "es-set-tostringtag": "^2.0.3",
+        "es-to-primitive": "^1.2.1",
+        "function.prototype.name": "^1.1.6",
+        "get-intrinsic": "^1.2.4",
+        "get-symbol-description": "^1.0.2",
+        "globalthis": "^1.0.3",
+        "gopd": "^1.0.1",
+        "has-property-descriptors": "^1.0.2",
+        "has-proto": "^1.0.3",
+        "has-symbols": "^1.0.3",
+        "hasown": "^2.0.2",
+        "internal-slot": "^1.0.7",
+        "is-array-buffer": "^3.0.4",
+        "is-callable": "^1.2.7",
+        "is-data-view": "^1.0.1",
+        "is-negative-zero": "^2.0.3",
+        "is-regex": "^1.1.4",
+        "is-shared-array-buffer": "^1.0.3",
+        "is-string": "^1.0.7",
+        "is-typed-array": "^1.1.13",
+        "is-weakref": "^1.0.2",
+        "object-inspect": "^1.13.1",
+        "object-keys": "^1.1.1",
+        "object.assign": "^4.1.5",
+        "regexp.prototype.flags": "^1.5.2",
+        "safe-array-concat": "^1.1.2",
+        "safe-regex-test": "^1.0.3",
+        "string.prototype.trim": "^1.2.9",
+        "string.prototype.trimend": "^1.0.8",
+        "string.prototype.trimstart": "^1.0.8",
+        "typed-array-buffer": "^1.0.2",
+        "typed-array-byte-length": "^1.0.1",
+        "typed-array-byte-offset": "^1.0.2",
+        "typed-array-length": "^1.0.6",
+        "unbox-primitive": "^1.0.2",
+        "which-typed-array": "^1.1.15"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/es-abstract/node_modules/regexp.prototype.flags": {
+      "version": "1.5.2",
+      "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz",
+      "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.6",
+        "define-properties": "^1.2.1",
+        "es-errors": "^1.3.0",
+        "set-function-name": "^2.0.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/es-define-property": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
@@ -2769,6 +3003,58 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/es-object-atoms": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz",
+      "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==",
+      "dev": true,
+      "dependencies": {
+        "es-errors": "^1.3.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/es-set-tostringtag": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz",
+      "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==",
+      "dev": true,
+      "dependencies": {
+        "get-intrinsic": "^1.2.4",
+        "has-tostringtag": "^1.0.2",
+        "hasown": "^2.0.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/es-shim-unscopables": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz",
+      "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==",
+      "dev": true,
+      "dependencies": {
+        "hasown": "^2.0.0"
+      }
+    },
+    "node_modules/es-to-primitive": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+      "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+      "dev": true,
+      "dependencies": {
+        "is-callable": "^1.1.4",
+        "is-date-object": "^1.0.1",
+        "is-symbol": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/es6-promise": {
       "version": "3.3.1",
       "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz",
@@ -2913,6 +3199,135 @@
         "eslint": ">=7.0.0"
       }
     },
+    "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,
+      "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,
+      "dependencies": {
+        "ms": "^2.1.1"
+      }
+    },
+    "node_modules/eslint-module-utils": {
+      "version": "2.8.1",
+      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz",
+      "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==",
+      "dev": 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,
+      "dependencies": {
+        "ms": "^2.1.1"
+      }
+    },
+    "node_modules/eslint-plugin-import": {
+      "version": "2.29.1",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz",
+      "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==",
+      "dev": true,
+      "dependencies": {
+        "array-includes": "^3.1.7",
+        "array.prototype.findlastindex": "^1.2.3",
+        "array.prototype.flat": "^1.3.2",
+        "array.prototype.flatmap": "^1.3.2",
+        "debug": "^3.2.7",
+        "doctrine": "^2.1.0",
+        "eslint-import-resolver-node": "^0.3.9",
+        "eslint-module-utils": "^2.8.0",
+        "hasown": "^2.0.0",
+        "is-core-module": "^2.13.1",
+        "is-glob": "^4.0.3",
+        "minimatch": "^3.1.2",
+        "object.fromentries": "^2.0.7",
+        "object.groupby": "^1.0.1",
+        "object.values": "^1.1.7",
+        "semver": "^6.3.1",
+        "tsconfig-paths": "^3.15.0"
+      },
+      "engines": {
+        "node": ">=4"
+      },
+      "peerDependencies": {
+        "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8"
+      }
+    },
+    "node_modules/eslint-plugin-import/node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "dev": 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,
+      "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,
+      "dependencies": {
+        "esutils": "^2.0.2"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/eslint-plugin-import/node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+      "dev": true,
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/eslint-plugin-import/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,
+      "bin": {
+        "semver": "bin/semver.js"
+      }
+    },
     "node_modules/eslint-plugin-svelte": {
       "version": "2.35.1",
       "resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-2.35.1.tgz",
@@ -3394,6 +3809,24 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/function.prototype.name": {
+      "version": "1.1.6",
+      "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz",
+      "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.2.0",
+        "es-abstract": "^1.22.1",
+        "functions-have-names": "^1.2.3"
+      },
+      "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",
@@ -3431,6 +3864,23 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/get-symbol-description": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz",
+      "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.5",
+        "es-errors": "^1.3.0",
+        "get-intrinsic": "^1.2.4"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/get-tsconfig": {
       "version": "4.7.3",
       "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.3.tgz",
@@ -3501,6 +3951,22 @@
         "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,
+      "dependencies": {
+        "define-properties": "^1.2.1",
+        "gopd": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/globalyzer": {
       "version": "0.1.0",
       "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz",
@@ -3929,6 +4395,21 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/is-data-view": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz",
+      "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==",
+      "dev": true,
+      "dependencies": {
+        "is-typed-array": "^1.1.13"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/is-date-object": {
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
@@ -3992,6 +4473,18 @@
       "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==",
       "dev": true
     },
+    "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,
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/is-number": {
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
@@ -4113,6 +4606,21 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/is-typed-array": {
+      "version": "1.1.13",
+      "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz",
+      "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==",
+      "dev": true,
+      "dependencies": {
+        "which-typed-array": "^1.1.14"
+      },
+      "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",
@@ -4125,6 +4633,18 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/is-weakref": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
+      "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/is-weakset": {
       "version": "2.0.3",
       "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz",
@@ -4259,6 +4779,18 @@
       "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
       "dev": true
     },
+    "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,
+      "dependencies": {
+        "minimist": "^1.2.0"
+      },
+      "bin": {
+        "json5": "lib/cli.js"
+      }
+    },
     "node_modules/jsonfile": {
       "version": "6.1.0",
       "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
@@ -4786,6 +5318,55 @@
         "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,
+      "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,
+      "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.0",
+      "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz",
+      "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==",
+      "dev": 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/oidc-token-hash": {
       "version": "5.0.3",
       "resolved": "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.0.3.tgz",
@@ -5671,6 +6252,24 @@
         "node": ">=6"
       }
     },
+    "node_modules/safe-array-concat": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz",
+      "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.7",
+        "get-intrinsic": "^1.2.4",
+        "has-symbols": "^1.0.3",
+        "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",
@@ -5691,6 +6290,23 @@
         }
       ]
     },
+    "node_modules/safe-regex-test": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz",
+      "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.6",
+        "es-errors": "^1.3.0",
+        "is-regex": "^1.1.4"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/safer-buffer": {
       "version": "2.1.2",
       "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
@@ -5831,6 +6447,21 @@
         "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,
+      "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/shebang-command": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
@@ -6048,6 +6679,55 @@
         "url": "https://github.com/chalk/strip-ansi?sponsor=1"
       }
     },
+    "node_modules/string.prototype.trim": {
+      "version": "1.2.9",
+      "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz",
+      "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.0",
+        "es-object-atoms": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/string.prototype.trimend": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz",
+      "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-object-atoms": "^1.0.0"
+      },
+      "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,
+      "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",
@@ -6073,6 +6753,15 @@
         "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,
+      "engines": {
+        "node": ">=4"
+      }
+    },
     "node_modules/strip-indent": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
@@ -6635,6 +7324,18 @@
       "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
       "dev": true
     },
+    "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,
+      "dependencies": {
+        "@types/json5": "^0.0.29",
+        "json5": "^1.0.2",
+        "minimist": "^1.2.6",
+        "strip-bom": "^3.0.0"
+      }
+    },
     "node_modules/tslib": {
       "version": "2.6.2",
       "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
@@ -6698,6 +7399,79 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/typed-array-buffer": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz",
+      "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.7",
+        "es-errors": "^1.3.0",
+        "is-typed-array": "^1.1.13"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/typed-array-byte-length": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz",
+      "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.7",
+        "for-each": "^0.3.3",
+        "gopd": "^1.0.1",
+        "has-proto": "^1.0.3",
+        "is-typed-array": "^1.1.13"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/typed-array-byte-offset": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz",
+      "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==",
+      "dev": true,
+      "dependencies": {
+        "available-typed-arrays": "^1.0.7",
+        "call-bind": "^1.0.7",
+        "for-each": "^0.3.3",
+        "gopd": "^1.0.1",
+        "has-proto": "^1.0.3",
+        "is-typed-array": "^1.1.13"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/typed-array-length": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz",
+      "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.7",
+        "for-each": "^0.3.3",
+        "gopd": "^1.0.1",
+        "has-proto": "^1.0.3",
+        "is-typed-array": "^1.1.13",
+        "possible-typed-array-names": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/typescript": {
       "version": "5.4.2",
       "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.2.tgz",
@@ -6711,6 +7485,21 @@
         "node": ">=14.17"
       }
     },
+    "node_modules/unbox-primitive": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
+      "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "has-bigints": "^1.0.2",
+        "has-symbols": "^1.0.3",
+        "which-boxed-primitive": "^1.0.2"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/undici-types": {
       "version": "5.26.5",
       "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
diff --git a/package.json b/package.json
index 0ca9c41b9..232c55ff7 100644
--- a/package.json
+++ b/package.json
@@ -8,7 +8,7 @@
     "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
     "dev": "vite dev",
     "format": "prettier --plugin prettier-plugin-svelte --write .",
-    "lint": "prettier --check --plugin prettier-plugin-svelte . && eslint --ignore-path .gitignore .",
+    "lint": "prettier --check --plugin prettier-plugin-svelte . && eslint --ignore-path .gitignore . --fix",
     "preview": "vite preview",
     "test": "playwright test"
   },
@@ -47,6 +47,7 @@
     "dotenv": "^16.0.0",
     "eslint": "^8.0.0",
     "eslint-config-prettier": "^9.0.0",
+    "eslint-plugin-import": "^2.29.1",
     "eslint-plugin-svelte": "^2.33.0",
     "fs-extra": "^11.1.0",
     "iconify-icon": "^2.1.0",
diff --git a/plugin-yaml-patched.ts b/plugin-yaml-patched.ts
index 97d13837b..159717732 100644
--- a/plugin-yaml-patched.ts
+++ b/plugin-yaml-patched.ts
@@ -1,12 +1,12 @@
 /// Code taken from https://github.com/rollup/plugins/blob/master/packages/yaml/src/index.js
 
-import YAML, { type LoadOptions } from "js-yaml"
-import toSource from "tosource"
 import {
   createFilter,
   makeLegalIdentifier,
   type FilterPattern,
 } from "@rollup/pluginutils"
+import YAML, { type LoadOptions } from "js-yaml"
+import toSource from "tosource"
 import type { PluginOption } from "vite"
 
 interface Options extends LoadOptions {
diff --git a/src/hooks.server.ts b/src/hooks.server.ts
index 40e1a1fe6..66bdc6391 100644
--- a/src/hooks.server.ts
+++ b/src/hooks.server.ts
@@ -1,8 +1,8 @@
 import type { Handle } from "@sveltejs/kit"
 import { sequence } from "@sveltejs/kit/hooks"
 
-import { openIdConnectHandler } from "$lib/server/openid_connect_handler"
 import { csrfHandler } from "$lib/server/csrf_handler"
+import { openIdConnectHandler } from "$lib/server/openid_connect_handler"
 import { userHandler } from "$lib/server/user_handler"
 
 export const handle: Handle = sequence(
diff --git a/src/lib/components/AllocationsFamilialesBudgetView.svelte b/src/lib/components/AllocationsFamilialesBudgetView.svelte
index 93a8f67bd..94793a957 100644
--- a/src/lib/components/AllocationsFamilialesBudgetView.svelte
+++ b/src/lib/components/AllocationsFamilialesBudgetView.svelte
@@ -9,13 +9,13 @@
   } from "$lib/budgets"
   import AxisY from "$lib/components/layercake/AxisY.svelte"
   import Column from "$lib/components/layercake/Column.svelte"
-  import type { DisplayMode } from "$lib/displays"
-  import { newSimulationUrl } from "$lib/urls"
-  import PictoBudgetEtatIr from "$lib/components/pictos/PictoBudgetEtatIr.svelte"
   import PictoBudgetDecileIr from "$lib/components/pictos/PictoBudgetDecileIr.svelte"
   import PictoBudgetDecileIrFoyer from "$lib/components/pictos/PictoBudgetDecileIrFoyer.svelte"
+  import PictoBudgetEtatIr from "$lib/components/pictos/PictoBudgetEtatIr.svelte"
   import Tooltip from "$lib/components/Tooltip.svelte"
   import ValueChange from "$lib/components/ValueChange.svelte"
+  import type { DisplayMode } from "$lib/displays"
+  import { newSimulationUrl } from "$lib/urls"
   import { removeNegativeZero } from "$lib/values"
 
   export let budgetSimulation: BudgetSimulation
diff --git a/src/lib/components/AllocationsFamilialesGagnantsPerdantsView.svelte b/src/lib/components/AllocationsFamilialesGagnantsPerdantsView.svelte
index e18c2b8ab..68b31ce5c 100644
--- a/src/lib/components/AllocationsFamilialesGagnantsPerdantsView.svelte
+++ b/src/lib/components/AllocationsFamilialesGagnantsPerdantsView.svelte
@@ -1,6 +1,5 @@
 <script lang="ts">
   import type { BudgetSimulation } from "$lib/budgets"
-
   import PictoBudgetGagnantsPerdants from "$lib/components/pictos/PictoBudgetGagnantsPerdants.svelte"
   import Tooltip from "$lib/components/Tooltip.svelte"
   import ValueChange from "$lib/components/ValueChange.svelte"
diff --git a/src/lib/components/CsgBudgetView.svelte b/src/lib/components/CsgBudgetView.svelte
index da8dde3fb..5bf18e795 100644
--- a/src/lib/components/CsgBudgetView.svelte
+++ b/src/lib/components/CsgBudgetView.svelte
@@ -9,9 +9,9 @@
   } from "$lib/budgets"
   import AxisY from "$lib/components/layercake/AxisY.svelte"
   import Column from "$lib/components/layercake/Column.svelte"
-  import PictoBudgetEtatIr from "$lib/components/pictos/PictoBudgetEtatIr.svelte"
   import PictoBudgetDecileIr from "$lib/components/pictos/PictoBudgetDecileIr.svelte"
   import PictoBudgetDecileIrFoyer from "$lib/components/pictos/PictoBudgetDecileIrFoyer.svelte"
+  import PictoBudgetEtatIr from "$lib/components/pictos/PictoBudgetEtatIr.svelte"
   import Tooltip from "$lib/components/Tooltip.svelte"
   import ValueChange from "$lib/components/ValueChange.svelte"
   import { removeNegativeZero } from "$lib/values"
diff --git a/src/lib/components/CsgGagnantsPerdantsView.svelte b/src/lib/components/CsgGagnantsPerdantsView.svelte
index 36e7879ac..906a8d421 100644
--- a/src/lib/components/CsgGagnantsPerdantsView.svelte
+++ b/src/lib/components/CsgGagnantsPerdantsView.svelte
@@ -1,6 +1,5 @@
 <script lang="ts">
   import type { BudgetSimulation } from "$lib/budgets"
-
   import PictoBudgetGagnantsPerdants from "$lib/components/pictos/PictoBudgetGagnantsPerdants.svelte"
   import Tooltip from "$lib/components/Tooltip.svelte"
   import ValueChange from "$lib/components/ValueChange.svelte"
diff --git a/src/lib/components/IntroWarningBillModal.svelte b/src/lib/components/IntroWarningBillModal.svelte
index ee52d3dde..8d1bf906a 100644
--- a/src/lib/components/IntroWarningBillModal.svelte
+++ b/src/lib/components/IntroWarningBillModal.svelte
@@ -7,8 +7,6 @@
     TransitionChild,
   } from "@rgossiaux/svelte-headlessui"
 
-  import { browser } from "$app/environment"
-
   export let isOpen = false
 
   function onClose() {
diff --git a/src/lib/components/IrBudgetView.svelte b/src/lib/components/IrBudgetView.svelte
index 97e90e084..feb7ef8e2 100644
--- a/src/lib/components/IrBudgetView.svelte
+++ b/src/lib/components/IrBudgetView.svelte
@@ -9,9 +9,9 @@
   } from "$lib/budgets"
   import AxisY from "$lib/components/layercake/AxisY.svelte"
   import Column from "$lib/components/layercake/Column.svelte"
-  import PictoBudgetEtatIr from "$lib/components/pictos/PictoBudgetEtatIr.svelte"
   import PictoBudgetDecileIr from "$lib/components/pictos/PictoBudgetDecileIr.svelte"
   import PictoBudgetDecileIrFoyer from "$lib/components/pictos/PictoBudgetDecileIrFoyer.svelte"
+  import PictoBudgetEtatIr from "$lib/components/pictos/PictoBudgetEtatIr.svelte"
   import Tooltip from "$lib/components/Tooltip.svelte"
   import ValueChange from "$lib/components/ValueChange.svelte"
   import { removeNegativeZero } from "$lib/values"
diff --git a/src/lib/components/IrGagnantsPerdantsView.svelte b/src/lib/components/IrGagnantsPerdantsView.svelte
index 707eb8ad7..e4e90fb3f 100644
--- a/src/lib/components/IrGagnantsPerdantsView.svelte
+++ b/src/lib/components/IrGagnantsPerdantsView.svelte
@@ -1,6 +1,5 @@
 <script lang="ts">
   import type { BudgetSimulation } from "$lib/budgets"
-
   import PictoBudgetGagnantsPerdants from "$lib/components/pictos/PictoBudgetGagnantsPerdants.svelte"
   import Tooltip from "$lib/components/Tooltip.svelte"
   import ValueChange from "$lib/components/ValueChange.svelte"
diff --git a/src/lib/components/WaterfallView.svelte b/src/lib/components/WaterfallView.svelte
index 2d5afe991..a5afbb9f0 100644
--- a/src/lib/components/WaterfallView.svelte
+++ b/src/lib/components/WaterfallView.svelte
@@ -5,6 +5,7 @@
 
   import { goto } from "$app/navigation"
   import { page } from "$app/stores"
+  import TestCaseGraph from "$lib/components/test_cases/TestCaseGraph.svelte"
   import Tooltip from "$lib/components/Tooltip.svelte"
   import ValueChange from "$lib/components/ValueChange.svelte"
   import type {
@@ -25,10 +26,10 @@
   } from "$lib/situations"
   import { newSimulationUrl } from "$lib/urls"
   import { removeNegativeZero } from "$lib/values"
-
-  import type { ValuesByCalculationNameByVariableName } from "$lib/variables"
-  import type { VariableValue } from "$lib/variables"
-  import TestCaseGraph from "$lib/components/test_cases/TestCaseGraph.svelte"
+  import type {
+    ValuesByCalculationNameByVariableName,
+    VariableValue,
+  } from "$lib/variables"
 
   export let decompositionByName: DecompositionByName
   export let displayMode: DisplayMode
diff --git a/src/lib/components/test_cases/TestCaseEdit.svelte b/src/lib/components/test_cases/TestCaseEdit.svelte
index 815077561..8945bf1d9 100644
--- a/src/lib/components/test_cases/TestCaseEdit.svelte
+++ b/src/lib/components/test_cases/TestCaseEdit.svelte
@@ -16,8 +16,8 @@
   import { page } from "$app/stores"
   import type { RequestedCalculations } from "$lib/calculations"
   import { requestAllTestCasesCalculations } from "$lib/calculations"
-  import PictoBigParent from "$lib/components/pictos/PictoBigParent.svelte"
   import PictoBigEnfant from "$lib/components/pictos/PictoBigEnfant.svelte"
+  import PictoBigParent from "$lib/components/pictos/PictoBigParent.svelte"
   import RolePersonsEdit from "$lib/components/test_cases/RolePersonsEdit.svelte"
   import VariableInput from "$lib/components/variables/VariableInput.svelte"
   import { decompositionCoreByName } from "$lib/decompositions"
diff --git a/src/lib/components/test_cases/TestCaseGraph.svelte b/src/lib/components/test_cases/TestCaseGraph.svelte
index 8a7c11253..26c549183 100644
--- a/src/lib/components/test_cases/TestCaseGraph.svelte
+++ b/src/lib/components/test_cases/TestCaseGraph.svelte
@@ -15,13 +15,6 @@
 
   import { page } from "$app/stores"
   import type { CalculationName } from "$lib/calculations"
-  import Area from "$lib/components/piece_of_cake/Area.svelte"
-  import AxisX from "$lib/components/piece_of_cake/AxisX.svelte"
-  import AxisY from "$lib/components/piece_of_cake/AxisY.svelte"
-  import DragSelect from "$lib/components/piece_of_cake/DragSelect.svelte"
-  import Html from "$lib/components/piece_of_cake/Html.svelte"
-  import { CurveModel } from "$lib/components/piece_of_cake/model"
-  import MultiLine from "$lib/components/piece_of_cake/MultiLine.svelte"
   import PersistentPopover from "$lib/components/PersistentPopover.svelte"
   import PictoBigAdulteRetraite from "$lib/components/pictos/PictoBigAdulteRetraite.svelte"
   import PictoBigEnfant from "$lib/components/pictos/PictoBigEnfant.svelte"
@@ -29,6 +22,13 @@
   import PictoBigPersonneACharge from "$lib/components/pictos/PictoBigPersonneACharge.svelte"
   import PictoGardeAlternee from "$lib/components/pictos/PictoGardeAlternee.svelte"
   import PictoHandicap from "$lib/components/pictos/PictoHandicap.svelte"
+  import Area from "$lib/components/piece_of_cake/Area.svelte"
+  import AxisX from "$lib/components/piece_of_cake/AxisX.svelte"
+  import AxisY from "$lib/components/piece_of_cake/AxisY.svelte"
+  import DragSelect from "$lib/components/piece_of_cake/DragSelect.svelte"
+  import Html from "$lib/components/piece_of_cake/Html.svelte"
+  import { CurveModel } from "$lib/components/piece_of_cake/model"
+  import MultiLine from "$lib/components/piece_of_cake/MultiLine.svelte"
   import PieceOfCake from "$lib/components/piece_of_cake/PieceOfCake.svelte"
   import SharedTooltip from "$lib/components/piece_of_cake/SharedTooltip.svelte"
   import Svg from "$lib/components/piece_of_cake/Svg.svelte"
diff --git a/src/lib/components/test_cases/TestCaseRelatedCarousel.svelte b/src/lib/components/test_cases/TestCaseRelatedCarousel.svelte
index d9455eeee..c8a9de61b 100644
--- a/src/lib/components/test_cases/TestCaseRelatedCarousel.svelte
+++ b/src/lib/components/test_cases/TestCaseRelatedCarousel.svelte
@@ -1,18 +1,18 @@
 <script lang="ts">
+  import { createEventDispatcher, getContext } from "svelte"
+  import type { Writable } from "svelte/store"
+
   import TestCasesStackRepresentation from "$lib/components/test_cases/TestCasesStackRepresentation.svelte"
   import TestCaseSummary from "$lib/components/test_cases/TestCaseSummary.svelte"
   import VariableValueChange from "$lib/components/variables/VariableValueChange.svelte"
-
+  import type { EvaluationByName } from "$lib/decompositions"
   import type { DisplayMode } from "$lib/displays"
-  import { createEventDispatcher, getContext } from "svelte"
-  import type { Writable } from "svelte/store"
   import type { Situation } from "$lib/situations"
   import {
     variableSummaryByName,
     type ValuesByCalculationNameByVariableName,
     variableSummaryByNameByReformName,
   } from "$lib/variables"
-  import type { EvaluationByName } from "$lib/decompositions"
 
   export let displayMode: DisplayMode
   export let year: number
diff --git a/src/lib/components/test_cases/TestCaseSelectModal.svelte b/src/lib/components/test_cases/TestCaseSelectModal.svelte
index 495d7fd58..47d24fd16 100644
--- a/src/lib/components/test_cases/TestCaseSelectModal.svelte
+++ b/src/lib/components/test_cases/TestCaseSelectModal.svelte
@@ -1,6 +1,4 @@
 <script lang="ts">
-  import VariableValueChange from "$lib/components/variables/VariableValueChange.svelte"
-  import TestCaseSummary from "$lib/components/test_cases/TestCaseSummary.svelte"
   import {
     Dialog,
     DialogDescription,
@@ -13,6 +11,9 @@
   import type { Writable } from "svelte/store"
 
   import { goto } from "$app/navigation"
+  import TestCaseSummary from "$lib/components/test_cases/TestCaseSummary.svelte"
+  import VariableValueChange from "$lib/components/variables/VariableValueChange.svelte"
+  import type { EvaluationByName } from "$lib/decompositions"
   import type { DisplayMode } from "$lib/displays"
   import type { Situation } from "$lib/situations"
   import { newSimulationUrl } from "$lib/urls"
@@ -21,7 +22,6 @@
     type ValuesByCalculationNameByVariableName,
     variableSummaryByNameByReformName,
   } from "$lib/variables"
-  import type { EvaluationByName } from "$lib/decompositions"
 
   export let displayMode: DisplayMode
   export let isOpen = false
diff --git a/src/lib/components/test_cases/TestCaseSummary.svelte b/src/lib/components/test_cases/TestCaseSummary.svelte
index 07e3a3456..29561d3ad 100644
--- a/src/lib/components/test_cases/TestCaseSummary.svelte
+++ b/src/lib/components/test_cases/TestCaseSummary.svelte
@@ -5,8 +5,7 @@
     ValueParameter,
   } from "@openfisca/json-model"
   import deepEqual from "deep-equal"
-  import { createEventDispatcher } from "svelte"
-  import { getContext } from "svelte"
+  import { createEventDispatcher, getContext } from "svelte"
   import type { Writable } from "svelte/store"
 
   import { page } from "$app/stores"
diff --git a/src/lib/components/test_cases/TestCasesStackRepresentation.svelte b/src/lib/components/test_cases/TestCasesStackRepresentation.svelte
index f46c8a6e2..ca08ee1fa 100644
--- a/src/lib/components/test_cases/TestCasesStackRepresentation.svelte
+++ b/src/lib/components/test_cases/TestCasesStackRepresentation.svelte
@@ -1,6 +1,6 @@
 <script>
-  import PictoBigParent from "$lib/components/pictos/PictoBigParent.svelte"
   import PictoBigEnfant from "$lib/components/pictos/PictoBigEnfant.svelte"
+  import PictoBigParent from "$lib/components/pictos/PictoBigParent.svelte"
 </script>
 
 <div class="flex flex-col items-center">
diff --git a/src/lib/components/variables/InflationLawDetails.svelte b/src/lib/components/variables/InflationLawDetails.svelte
index 5e2fa14b1..00f45e74c 100644
--- a/src/lib/components/variables/InflationLawDetails.svelte
+++ b/src/lib/components/variables/InflationLawDetails.svelte
@@ -1,11 +1,11 @@
 <script lang="ts">
-  import IntroWarningBillModal from "$lib/components/IntroWarningBillModal.svelte"
   import {
     ParameterClass,
     type ScaleParameter,
     type ValueParameter,
   } from "@openfisca/json-model"
 
+  import IntroWarningBillModal from "$lib/components/IntroWarningBillModal.svelte"
   import { getUnitAtDate } from "$lib/units"
   import { formatValue, removeNegativeZero } from "$lib/values"
 
diff --git a/src/lib/components/variables/InflationLawInfoModal.svelte b/src/lib/components/variables/InflationLawInfoModal.svelte
index a6a6760eb..91fa80e16 100644
--- a/src/lib/components/variables/InflationLawInfoModal.svelte
+++ b/src/lib/components/variables/InflationLawInfoModal.svelte
@@ -9,8 +9,8 @@
     TransitionChild,
   } from "@rgossiaux/svelte-headlessui"
 
-  import InflationLawDetails from "$lib/components/variables/InflationLawDetails.svelte"
   import ArticleModal from "$lib/components/parameters/ArticleModal.svelte"
+  import InflationLawDetails from "$lib/components/variables/InflationLawDetails.svelte"
 
   export let isOpen = false
   export let billParameter: ScaleParameter | ValueParameter
diff --git a/src/lib/components/variables/NonVariableReferredParameter.svelte b/src/lib/components/variables/NonVariableReferredParameter.svelte
index e6d972082..775e4a4df 100644
--- a/src/lib/components/variables/NonVariableReferredParameter.svelte
+++ b/src/lib/components/variables/NonVariableReferredParameter.svelte
@@ -3,6 +3,11 @@
   import { getContext } from "svelte"
   import type { Writable } from "svelte/store"
 
+  import VariableReferredNodeParameter from "./VariableReferredNodeParameter.svelte"
+  import VariableReferredScaleParameter from "./VariableReferredScaleParameter.svelte"
+  import VariableReferredValueParameter from "./VariableReferredValueParameter.svelte"
+
+  import type { DisplayMode } from "$lib/displays"
   import {
     asNodeParameter,
     asScaleParameter,
@@ -11,11 +16,6 @@
     rootParameter,
     rootParameterByReformName,
   } from "$lib/parameters"
-  import type { DisplayMode } from "$lib/displays"
-
-  import VariableReferredNodeParameter from "./VariableReferredNodeParameter.svelte"
-  import VariableReferredScaleParameter from "./VariableReferredScaleParameter.svelte"
-  import VariableReferredValueParameter from "./VariableReferredValueParameter.svelte"
 
   export let budget: boolean | undefined
   export let date: string
diff --git a/src/lib/components/variables/VariableHeader.svelte b/src/lib/components/variables/VariableHeader.svelte
index 8019abf32..8e40c8053 100644
--- a/src/lib/components/variables/VariableHeader.svelte
+++ b/src/lib/components/variables/VariableHeader.svelte
@@ -2,10 +2,10 @@
   import type { Variable } from "@openfisca/json-model"
   import { getVariableLatestFormulaDate } from "@openfisca/json-model"
 
+  import Tooltip from "$lib/components/Tooltip.svelte"
   import type { Decomposition } from "$lib/decompositions"
   import type { DisplayMode } from "$lib/displays"
   import { newSimulationUrl } from "$lib/urls"
-  import Tooltip from "$lib/components/Tooltip.svelte"
 
   export let decomposition: Decomposition | undefined
   export let displayMode: DisplayMode
diff --git a/src/lib/components/variables/VariableReferredInputs.svelte b/src/lib/components/variables/VariableReferredInputs.svelte
index 0055642f2..c634887d8 100644
--- a/src/lib/components/variables/VariableReferredInputs.svelte
+++ b/src/lib/components/variables/VariableReferredInputs.svelte
@@ -2,11 +2,11 @@
   import type { Variable } from "@openfisca/json-model"
   import { getVariableFormula } from "@openfisca/json-model"
 
+  import VariableInput from "./VariableInput.svelte"
+
   import type { Situation } from "$lib/situations"
   import type { ValuesByCalculationNameByVariableName } from "$lib/variables"
 
-  import VariableInput from "./VariableInput.svelte"
-
   export let date: string
   export let inputInstantsByVariableName: {
     [name: string]: Set<string>
diff --git a/src/lib/components/variables/VariableReferredInputsPane.svelte b/src/lib/components/variables/VariableReferredInputsPane.svelte
index c842dc54f..f59ca8518 100644
--- a/src/lib/components/variables/VariableReferredInputsPane.svelte
+++ b/src/lib/components/variables/VariableReferredInputsPane.svelte
@@ -3,6 +3,8 @@
   import { createEventDispatcher, getContext } from "svelte"
   import type { Writable } from "svelte/store"
 
+  import VariableReferredInputs from "./VariableReferredInputs.svelte"
+
   import {
     decompositionCoreByName,
     walkDecompositionsCoreName,
@@ -14,8 +16,6 @@
     variableSummaryByName,
   } from "$lib/variables"
 
-  import VariableReferredInputs from "./VariableReferredInputs.svelte"
-
   export let date: string
   export let inputInstantsByVariableName: {
     [name: string]: Set<string>
diff --git a/src/lib/components/variables/VariableReferredNodeParameter.svelte b/src/lib/components/variables/VariableReferredNodeParameter.svelte
index 9f43e1cdd..c3ac0a209 100644
--- a/src/lib/components/variables/VariableReferredNodeParameter.svelte
+++ b/src/lib/components/variables/VariableReferredNodeParameter.svelte
@@ -5,13 +5,13 @@
     type Parameter,
   } from "@openfisca/json-model"
 
-  import { asScaleParameter, asValueParameter } from "$lib/parameters"
-  import type { DisplayMode } from "$lib/displays"
-
   import VariableReferredParameterHeader from "./VariableReferredParameterHeader.svelte"
   import VariableReferredScaleParameter from "./VariableReferredScaleParameter.svelte"
   import VariableReferredValueParameter from "./VariableReferredValueParameter.svelte"
 
+  import type { DisplayMode } from "$lib/displays"
+  import { asScaleParameter, asValueParameter } from "$lib/parameters"
+
   export let billParameter: NodeParameter
   export let bothFilteredParameter: NodeParameter
   export let budget: boolean | undefined
diff --git a/src/lib/components/variables/VariableReferredParameters.svelte b/src/lib/components/variables/VariableReferredParameters.svelte
index 40996f70f..d46f7fe55 100644
--- a/src/lib/components/variables/VariableReferredParameters.svelte
+++ b/src/lib/components/variables/VariableReferredParameters.svelte
@@ -1,5 +1,4 @@
 <script lang="ts">
-  import type {} from "@openfisca/json-model"
   import {
     getVariableFormula,
     mergeParameters,
@@ -10,6 +9,11 @@
   import { getContext } from "svelte"
   import type { Writable } from "svelte/store"
 
+  import VariableHeader from "./VariableHeader.svelte"
+  import VariableReferredNodeParameter from "./VariableReferredNodeParameter.svelte"
+  import VariableReferredScaleParameter from "./VariableReferredScaleParameter.svelte"
+  import VariableReferredValueParameter from "./VariableReferredValueParameter.svelte"
+
   import {
     decompositionCoreByName,
     decompositionCoreByNameByReformName,
@@ -30,11 +34,6 @@
     variableSummaryByNameByReformName,
   } from "$lib/variables"
 
-  import VariableHeader from "./VariableHeader.svelte"
-  import VariableReferredNodeParameter from "./VariableReferredNodeParameter.svelte"
-  import VariableReferredScaleParameter from "./VariableReferredScaleParameter.svelte"
-  import VariableReferredValueParameter from "./VariableReferredValueParameter.svelte"
-
   export let date: string
   export let displayMode: DisplayMode
   export let name: string
diff --git a/src/lib/components/variables/VariableReferredScaleParameter.svelte b/src/lib/components/variables/VariableReferredScaleParameter.svelte
index 2956fd4c5..93d5ae2c1 100644
--- a/src/lib/components/variables/VariableReferredScaleParameter.svelte
+++ b/src/lib/components/variables/VariableReferredScaleParameter.svelte
@@ -17,17 +17,18 @@
     requestTestCasesCalculation,
     type RequestedCalculations,
   } from "$lib/calculations"
-  import type { DisplayMode } from "$lib/displays"
   import ArticleModal from "$lib/components/parameters/ArticleModal.svelte"
   import InflationLawButton from "$lib/components/variables/InflationLawButton.svelte"
   import InflationLawInfoModal from "$lib/components/variables/InflationLawInfoModal.svelte"
   import VariableReferredParameterHeader from "$lib/components/variables/VariableReferredParameterHeader.svelte"
   import VariableReferredScaleAtInstant from "$lib/components/variables/VariableReferredScaleAtInstant.svelte"
+  import type { DisplayMode } from "$lib/displays"
   import {
     trackLawEditParameterArticles,
     trackLawEditParameterHistory,
     trackLawEditParameterStatus,
   } from "$lib/matomo"
+  import { rootParameterByReformName } from "$lib/parameters"
   import {
     ParameterReformChangeType,
     type ParametricReform,
@@ -37,7 +38,6 @@
     budgetEditableParametersNameByVariableName,
     budgetVariablesName,
   } from "$lib/variables"
-  import { rootParameterByReformName } from "$lib/parameters"
 
   export let billParameter: ScaleParameter
   export let budget: boolean | undefined
diff --git a/src/lib/components/variables/VariableReferredValueParameter.svelte b/src/lib/components/variables/VariableReferredValueParameter.svelte
index d1557fd4d..07084bc0f 100644
--- a/src/lib/components/variables/VariableReferredValueParameter.svelte
+++ b/src/lib/components/variables/VariableReferredValueParameter.svelte
@@ -26,13 +26,13 @@
     requestTestCasesCalculation,
     type RequestedCalculations,
   } from "$lib/calculations"
-  import type { DisplayMode } from "$lib/displays"
   import ArticleModal from "$lib/components/parameters/ArticleModal.svelte"
   import InflationLawButton from "$lib/components/variables/InflationLawButton.svelte"
   import InflationLawInfoModal from "$lib/components/variables/InflationLawInfoModal.svelte"
   import VariableReferredParameterHeader from "$lib/components/variables/VariableReferredParameterHeader.svelte"
   import VariableReferredValueEdit from "$lib/components/variables/VariableReferredValueEdit.svelte"
   import VariableReferredValueView from "$lib/components/variables/VariableReferredValueView.svelte"
+  import type { DisplayMode } from "$lib/displays"
   import {
     trackLawEditParameterArticles,
     trackLawEditParameterHistory,
diff --git a/src/lib/components/variables/VariableReferredValueView.svelte b/src/lib/components/variables/VariableReferredValueView.svelte
index 78e67315a..04c5d9d36 100644
--- a/src/lib/components/variables/VariableReferredValueView.svelte
+++ b/src/lib/components/variables/VariableReferredValueView.svelte
@@ -1,8 +1,8 @@
 <script lang="ts">
   import type { Unit, ValueAtInstant } from "@openfisca/json-model"
 
-  import { removeNegativeZero } from "$lib/values"
   import Tooltip from "$lib/components/Tooltip.svelte"
+  import { removeNegativeZero } from "$lib/values"
 
   export let billValue: ValueAtInstant | undefined | null
   export let lawValue: ValueAtInstant | undefined | null
diff --git a/src/lib/components/variables/VariableView.svelte b/src/lib/components/variables/VariableView.svelte
index cc175610d..50154a3e2 100644
--- a/src/lib/components/variables/VariableView.svelte
+++ b/src/lib/components/variables/VariableView.svelte
@@ -5,11 +5,11 @@
   import { page } from "$app/stores"
   import FormulaView from "$lib/components/variables/FormulaView.svelte"
   import VariableInput from "$lib/components/variables/VariableInput.svelte"
+  import { decompositionCoreByName } from "$lib/decompositions"
   import type { Situation } from "$lib/situations"
   import type { SelfTargetAProps } from "$lib/urls"
   import type { ValuesByCalculationNameByVariableName } from "$lib/variables"
   import { buildInstantFormulaAndReferencesArray } from "$lib/variables"
-  import { decompositionCoreByName } from "$lib/decompositions"
 
   export let date: string
   export let editable: boolean
diff --git a/src/lib/decompositions.ts b/src/lib/decompositions.ts
index b2116a959..662359522 100644
--- a/src/lib/decompositions.ts
+++ b/src/lib/decompositions.ts
@@ -10,6 +10,7 @@ import type {
   Waterfall,
   WaterfallOptions,
 } from "@openfisca/json-model"
+import deepEqual from "deep-equal"
 
 import type { CalculationName } from "$lib/calculations"
 import { reformChangesByName } from "$lib/reforms"
@@ -18,7 +19,6 @@ import {
   variableSummaryByName,
   variableSummaryByNameByReformName,
 } from "$lib/variables"
-import deepEqual from "deep-equal"
 
 export type {
   Decomposition as DecompositionCore,
diff --git a/src/lib/search/search_worker_parameters.ts b/src/lib/search/search_worker_parameters.ts
index 57eef81a4..b56653cde 100644
--- a/src/lib/search/search_worker_parameters.ts
+++ b/src/lib/search/search_worker_parameters.ts
@@ -1,5 +1,5 @@
-import MiniSearch from "minisearch"
 import { type Parameter, walkParameters } from "@openfisca/json-model"
+import MiniSearch from "minisearch"
 
 import { rootParameter } from "$lib/parameters"
 
diff --git a/src/lib/search/search_worker_variables_all.ts b/src/lib/search/search_worker_variables_all.ts
index 47bd6d847..7d7551f28 100644
--- a/src/lib/search/search_worker_variables_all.ts
+++ b/src/lib/search/search_worker_variables_all.ts
@@ -1,6 +1,6 @@
 import { miniSearch } from "$lib/search/search_common_variables"
-import { variableSummaryByName } from "$lib/variables"
 import type { SearchVariable } from "$lib/search/search_variable"
+import { variableSummaryByName } from "$lib/variables"
 
 export const allVariables = Object.values(variableSummaryByName).map(
   (variable) =>
diff --git a/src/lib/search/search_worker_variables_with_linked.ts b/src/lib/search/search_worker_variables_with_linked.ts
index d23a72d43..5bd8c62f8 100644
--- a/src/lib/search/search_worker_variables_with_linked.ts
+++ b/src/lib/search/search_worker_variables_with_linked.ts
@@ -2,9 +2,9 @@ import {
   decompositionCoreByName,
   withLinkedVariableNames,
 } from "$lib/decompositions"
-import { variableSummaryByName } from "$lib/variables"
 import { miniSearch } from "$lib/search/search_common_variables"
 import type { SearchVariable } from "$lib/search/search_variable"
+import { variableSummaryByName } from "$lib/variables"
 
 export const withLinkedVariables = withLinkedVariableNames
   .map(
diff --git a/src/lib/server/config.ts b/src/lib/server/config.ts
index 8a1d114ca..c586df34a 100644
--- a/src/lib/server/config.ts
+++ b/src/lib/server/config.ts
@@ -1,7 +1,7 @@
 import "dotenv/config"
 
-import { validateConfig } from "$lib/server/auditors/config"
 import type { RepositoryConfig } from "$lib/repositories"
+import { validateConfig } from "$lib/server/auditors/config"
 
 export interface Config {
   advanced: boolean
diff --git a/src/routes/+layout.server.ts b/src/routes/+layout.server.ts
index 5cd413be7..9d94316fd 100644
--- a/src/routes/+layout.server.ts
+++ b/src/routes/+layout.server.ts
@@ -1,8 +1,8 @@
+import type { LayoutServerLoad } from "./$types"
+
 import type { RepositoryConfig } from "$lib/repositories"
-import type { User } from "$lib/users"
 import config from "$lib/server/config"
-
-import type { LayoutServerLoad } from "./$types"
+import type { User } from "$lib/users"
 
 const { openfiscaRepository } = config
 
diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte
index 7eabc9d88..b6e3dd700 100644
--- a/src/routes/+layout.svelte
+++ b/src/routes/+layout.svelte
@@ -14,6 +14,8 @@
   import { Modals, closeModal } from "svelte-modals"
   import { v4 as uuidV4 } from "uuid"
 
+  import type { LayoutData } from "./$types"
+
   import { browser } from "$app/environment"
   import { page } from "$app/stores"
   import type { BudgetSimulation } from "$lib/budgets"
@@ -68,8 +70,6 @@
     type VariableValues,
   } from "$lib/variables"
 
-  import type { LayoutData } from "./$types"
-
   export let data: LayoutData
 
   const axes: Writable<Axis[][]> = writable([])
diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte
index 1f32f584a..a080bfeca 100644
--- a/src/routes/+page.svelte
+++ b/src/routes/+page.svelte
@@ -16,22 +16,24 @@
   import { getContext, setContext } from "svelte"
   import type { Writable } from "svelte/store"
 
+  import type { PageData } from "./$types"
+
   import { browser } from "$app/environment"
   import { goto } from "$app/navigation"
   import { page } from "$app/stores"
-  import { auditQueryArray, auditQuerySingleton } from "$lib/auditors/queries"
   import { auditSimulationHash } from "$lib/auditors/hashes"
+  import { auditQueryArray, auditQuerySingleton } from "$lib/auditors/queries"
   import type { BudgetSimulation } from "$lib/budgets"
   import {
     requestAllBudgetCalculations,
     requestAllTestCasesCalculations,
     type RequestedCalculations,
   } from "$lib/calculations"
+  import AllocationsFamilialesBudgetView from "$lib/components/AllocationsFamilialesBudgetView.svelte"
+  import AllocationsFamilialesGagnantsPerdantsView from "$lib/components/AllocationsFamilialesGagnantsPerdantsView.svelte"
   import BudgetConnexionModal from "$lib/components/BudgetConnexionModal.svelte"
   import BudgetSimulationSharingModal from "$lib/components/BudgetSimulationSharingModal.svelte"
   import CopyClipboard from "$lib/components/CopyClipboard.svelte"
-  import AllocationsFamilialesBudgetView from "$lib/components/AllocationsFamilialesBudgetView.svelte"
-  import AllocationsFamilialesGagnantsPerdantsView from "$lib/components/AllocationsFamilialesGagnantsPerdantsView.svelte"
   import CsgBudgetView from "$lib/components/CsgBudgetView.svelte"
   import CsgGagnantsPerdantsView from "$lib/components/CsgGagnantsPerdantsView.svelte"
   import IrBudgetView from "$lib/components/IrBudgetView.svelte"
@@ -40,13 +42,13 @@
   import ReformsChanges from "$lib/components/ReformsChanges.svelte"
   import ReplaceTestCaseModal from "$lib/components/ReplaceTestCaseModal.svelte"
   import Spinner from "$lib/components/Spinner.svelte"
-  import TestCaseSelectModal from "$lib/components/test_cases/TestCaseSelectModal.svelte"
   import TestCaseCompareView from "$lib/components/test_cases/TestCaseCompareView.svelte"
   import TestCaseEdit from "$lib/components/test_cases/TestCaseEdit.svelte"
   import TestCaseRelatedCarousel from "$lib/components/test_cases/TestCaseRelatedCarousel.svelte"
-  import TestCaseSimulationSharingModal from "$lib/components/TestCaseSimulationSharingModal.svelte"
+  import TestCaseSelectModal from "$lib/components/test_cases/TestCaseSelectModal.svelte"
   import TestCasesStackRepresentation from "$lib/components/test_cases/TestCasesStackRepresentation.svelte"
   import TestCaseView from "$lib/components/test_cases/TestCaseView.svelte"
+  import TestCaseSimulationSharingModal from "$lib/components/TestCaseSimulationSharingModal.svelte"
   import Tooltip from "$lib/components/Tooltip.svelte"
   import NonVariableReferredParameter from "$lib/components/variables/NonVariableReferredParameter.svelte"
   import VariableReferredInputsPane from "$lib/components/variables/VariableReferredInputsPane.svelte"
@@ -84,8 +86,6 @@
     budgetEditableParametersName,
   } from "$lib/variables"
 
-  import type { PageData } from "./$types"
-
   export let data: PageData
 
   let animationEndedTimeoutId = undefined
diff --git a/src/routes/auth/login/+server.ts b/src/routes/auth/login/+server.ts
index bcd64e1db..821873042 100644
--- a/src/routes/auth/login/+server.ts
+++ b/src/routes/auth/login/+server.ts
@@ -2,11 +2,11 @@ import { error } from "@sveltejs/kit"
 import jwt from "jsonwebtoken"
 import { generators } from "openid-client"
 
+import type { RequestHandler } from "./$types"
+
 import { validateLoginLogoutQuery } from "$lib/server/auditors/queries"
 import config from "$lib/server/config"
 
-import type { RequestHandler } from "./$types"
-
 export const GET: RequestHandler = async ({ cookies, locals, url }) => {
   const [query, queryError] = validateLoginLogoutQuery(url.searchParams) as [
     { redirect: string },
diff --git a/src/routes/auth/logout/+server.ts b/src/routes/auth/logout/+server.ts
index ed3ba952c..48ab7fee6 100644
--- a/src/routes/auth/logout/+server.ts
+++ b/src/routes/auth/logout/+server.ts
@@ -1,10 +1,10 @@
 import { error } from "@sveltejs/kit"
 
+import type { RequestHandler } from "./$types"
+
 import { validateLoginLogoutQuery } from "$lib/server/auditors/queries"
 import config from "$lib/server/config"
 
-import type { RequestHandler } from "./$types"
-
 export const GET: RequestHandler = ({ cookies, locals, url }) => {
   const [query, queryError] = validateLoginLogoutQuery(url.searchParams) as [
     { redirect: string },
diff --git a/src/routes/auth/restore_state/+page.svelte b/src/routes/auth/restore_state/+page.svelte
index 09d20f150..513079573 100644
--- a/src/routes/auth/restore_state/+page.svelte
+++ b/src/routes/auth/restore_state/+page.svelte
@@ -3,15 +3,15 @@
   import type { Writable } from "svelte/store"
 
   import { goto } from "$app/navigation"
+  import {
+    requestAllTestCasesCalculations,
+    type RequestedCalculations,
+  } from "$lib/calculations"
   import type { EvaluationByName } from "$lib/decompositions"
   import type { ParametricReform } from "$lib/reforms"
   import type { Situation } from "$lib/situations"
   import { newSimulationUrl } from "$lib/urls"
   import type { ValuesByCalculationNameByVariableName } from "$lib/variables"
-  import {
-    requestAllTestCasesCalculations,
-    type RequestedCalculations,
-  } from "$lib/calculations"
 
   const evaluationByNameArray = getContext("evaluationByNameArray") as Writable<
     EvaluationByName[]
diff --git a/src/routes/budgets/+server.ts b/src/routes/budgets/+server.ts
index 0c833eaf0..c364ae813 100644
--- a/src/routes/budgets/+server.ts
+++ b/src/routes/budgets/+server.ts
@@ -1,7 +1,10 @@
-import fs from "fs-extra"
-import jwt from "jsonwebtoken"
 import path from "path"
+
 import { error, json } from "@sveltejs/kit"
+import fs from "fs-extra"
+import jwt from "jsonwebtoken"
+
+import type { RequestHandler } from "./$types"
 
 import { hashObject } from "$lib/hash"
 import { getParameter, rootParameter } from "$lib/parameters"
@@ -15,8 +18,6 @@ import type { CachedSimulation } from "$lib/simulations"
 import type { User } from "$lib/users"
 import { budgetEditableParametersName } from "$lib/variables"
 
-import type { RequestHandler } from "./$types"
-
 interface PayloadUser extends User {
   exp?: number
   iat?: number
diff --git a/src/routes/budgets/demands/+server.ts b/src/routes/budgets/demands/+server.ts
index 8427021d1..21cf7f4ac 100644
--- a/src/routes/budgets/demands/+server.ts
+++ b/src/routes/budgets/demands/+server.ts
@@ -6,12 +6,12 @@ import {
 } from "@auditors/core"
 import { error, json } from "@sveltejs/kit"
 
+import type { RequestHandler } from "./$types"
+
 import type { DisplayMode } from "$lib/displays"
 import type { ParametricReform } from "$lib/reforms"
 import config from "$lib/server/config"
 
-import type { RequestHandler } from "./$types"
-
 function auditBody(audit: Audit, dataUnknown: unknown): [unknown, unknown] {
   if (dataUnknown == null) {
     return [dataUnknown, null]
diff --git a/src/routes/budgets/simulations/+server.ts b/src/routes/budgets/simulations/+server.ts
index a4581e169..6ee34d343 100644
--- a/src/routes/budgets/simulations/+server.ts
+++ b/src/routes/budgets/simulations/+server.ts
@@ -1,8 +1,11 @@
+import path from "path"
+
 import { auditRequire, cleanAudit, type Audit } from "@auditors/core"
+import { error, json } from "@sveltejs/kit"
 import fs from "fs-extra"
 import jwt from "jsonwebtoken"
-import path from "path"
-import { error, json } from "@sveltejs/kit"
+
+import type { RequestHandler } from "./$types"
 
 import type { DisplayMode } from "$lib/displays"
 import type { ParametricReform } from "$lib/reforms"
@@ -14,8 +17,6 @@ import config from "$lib/server/config"
 import type { CachedSimulation } from "$lib/simulations"
 import type { User } from "$lib/users"
 
-import type { RequestHandler } from "./$types"
-
 const { simulationsBudgetDir } = config
 
 function auditBody(audit: Audit, dataUnknown: unknown): [unknown, unknown] {
diff --git a/src/routes/budgets/simulations/[simulation]/+page.server.ts b/src/routes/budgets/simulations/[simulation]/+page.server.ts
index 32e9e9fd9..64b32773b 100644
--- a/src/routes/budgets/simulations/[simulation]/+page.server.ts
+++ b/src/routes/budgets/simulations/[simulation]/+page.server.ts
@@ -1,3 +1,5 @@
+import path from "path"
+
 import {
   type Audit,
   auditRequire,
@@ -7,16 +9,15 @@ import {
 } from "@auditors/core"
 import { error } from "@sveltejs/kit"
 import fs from "fs-extra"
-import path from "path"
+
+import type { PageServerLoad } from "./$types"
 
 import type { DisplayMode } from "$lib/displays"
 import type { ParametricReform } from "$lib/reforms"
+import { getBudgetRequestsFilePath } from "$lib/server/budgets"
 import config from "$lib/server/config"
 import type { CachedSimulation } from "$lib/simulations"
 
-import type { PageServerLoad } from "./$types"
-import { getBudgetRequestsFilePath } from "$lib/server/budgets"
-
 const { simulationsBudgetDir } = config
 
 function auditParams(audit: Audit, dataUnknown: unknown): [unknown, unknown] {
diff --git a/src/routes/budgets/simulations/[simulation]/+page.svelte b/src/routes/budgets/simulations/[simulation]/+page.svelte
index 293e77d7b..56bd7879d 100644
--- a/src/routes/budgets/simulations/[simulation]/+page.svelte
+++ b/src/routes/budgets/simulations/[simulation]/+page.svelte
@@ -2,10 +2,10 @@
   import { getContext, onMount } from "svelte"
   import type { Writable } from "svelte/store"
 
-  import type { ParametricReform } from "$lib/reforms"
-
   import type { PageData } from "./$types"
+
   import { goto } from "$app/navigation"
+  import type { ParametricReform } from "$lib/reforms"
   import { newSimulationUrl } from "$lib/urls"
 
   export let data: PageData
diff --git a/src/routes/budgets/simulations/index/+server.ts b/src/routes/budgets/simulations/index/+server.ts
index 002a69846..f6c7ed6ac 100644
--- a/src/routes/budgets/simulations/index/+server.ts
+++ b/src/routes/budgets/simulations/index/+server.ts
@@ -1,12 +1,13 @@
+import path from "path"
+
 import { json } from "@sveltejs/kit"
 import fs from "fs-extra"
-import path from "path"
+
+import type { RequestHandler } from "./$types"
 
 import config from "$lib/server/config"
 import type { CachedSimulation } from "$lib/simulations"
 
-import type { RequestHandler } from "./$types"
-
 const { simulationsBudgetDir } = config
 
 export const POST: RequestHandler = async () => {
diff --git a/src/routes/entities/+page.svelte b/src/routes/entities/+page.svelte
index 5cae0bc4f..56fa533f9 100644
--- a/src/routes/entities/+page.svelte
+++ b/src/routes/entities/+page.svelte
@@ -1,8 +1,8 @@
 <script lang="ts">
-  import { entityByKey } from "$lib/entities"
-
   import type { PageData } from "./$types"
 
+  import { entityByKey } from "$lib/entities"
+
   export let data: PageData
 </script>
 
diff --git a/src/routes/parameters/+page.svelte b/src/routes/parameters/+page.svelte
index a069f37c1..2c447eb8e 100644
--- a/src/routes/parameters/+page.svelte
+++ b/src/routes/parameters/+page.svelte
@@ -2,14 +2,14 @@
   import type { Parameter } from "@openfisca/json-model"
   import { onMount } from "svelte"
 
+  import type { PageData } from "./$types"
+
   import { browser } from "$app/environment"
   import { goto } from "$app/navigation"
   import { page } from "$app/stores"
   import Search from "$lib/components/search/Search.svelte"
   import { SearchMode } from "$lib/search/search_mode"
 
-  import type { PageData } from "./$types"
-
   export let data: PageData
 
   let searchInputValue = ""
diff --git a/src/routes/parameters/[parameter]/+page.svelte b/src/routes/parameters/[parameter]/+page.svelte
index 5726f239b..a22155d3a 100644
--- a/src/routes/parameters/[parameter]/+page.svelte
+++ b/src/routes/parameters/[parameter]/+page.svelte
@@ -2,11 +2,11 @@
   import { getContext, setContext } from "svelte"
   import type { Writable } from "svelte/store"
 
+  import type { PageData } from "./$types"
+
   import ParameterView from "$lib/components/parameters/ParameterView.svelte"
   import { newSelfTargetAProps } from "$lib/urls"
 
-  import type { PageData } from "./$types"
-
   export let data: PageData
 
   const date = getContext("date") as Writable<string>
diff --git a/src/routes/parameters/[parameter]/+server.ts b/src/routes/parameters/[parameter]/+server.ts
index 76f66bb3b..3f7879c5c 100644
--- a/src/routes/parameters/[parameter]/+server.ts
+++ b/src/routes/parameters/[parameter]/+server.ts
@@ -1,3 +1,5 @@
+import { randomBytes } from "crypto"
+
 import { strictAudit } from "@auditors/core"
 import {
   auditEditableParameter,
@@ -7,14 +9,13 @@ import {
   type Parameter,
 } from "@openfisca/json-model"
 import { error } from "@sveltejs/kit"
-import { randomBytes } from "crypto"
+
+import type { RequestHandler } from "./$types"
 
 import { getParameter, rootParameter } from "$lib/parameters"
 import config from "$lib/server/config"
 import { units } from "$lib/units"
 
-import type { RequestHandler } from "./$types"
-
 const { githubPersonalAccessToken, openfiscaRepository } = config
 
 export const PUT: RequestHandler = async ({ request, params }) => {
diff --git a/src/routes/parameters/[parameter]/edit/+page.svelte b/src/routes/parameters/[parameter]/edit/+page.svelte
index eb8a753d9..fa2a74198 100644
--- a/src/routes/parameters/[parameter]/edit/+page.svelte
+++ b/src/routes/parameters/[parameter]/edit/+page.svelte
@@ -13,6 +13,8 @@
   import { getContext } from "svelte"
   import type { Writable } from "svelte/store"
 
+  import type { PageData } from "./$types"
+
   import { goto } from "$app/navigation"
   import NodeEdit from "$lib/components/parameters/NodeEdit.svelte"
   import ScaleEdit from "$lib/components/parameters/ScaleEdit.svelte"
@@ -21,8 +23,6 @@
   import { units } from "$lib/units"
   import { newSelfTargetAProps } from "$lib/urls"
 
-  import type { PageData } from "./$types"
-
   export let data: PageData
 
   const date = getContext("date") as Writable<string>
diff --git a/src/routes/parameters/[parameter]/edit/+page.ts b/src/routes/parameters/[parameter]/edit/+page.ts
index 901f5f96e..ca7189220 100644
--- a/src/routes/parameters/[parameter]/edit/+page.ts
+++ b/src/routes/parameters/[parameter]/edit/+page.ts
@@ -1,18 +1,18 @@
 import { strictAudit } from "@auditors/core"
-import { error } from "@sveltejs/kit"
 import {
   auditRawParameterToEditable,
   ParameterClass,
   rawParameterFromYaml,
   type Parameter,
 } from "@openfisca/json-model"
+import { error } from "@sveltejs/kit"
+
+import type { PageLoad } from "./$types"
 
 import { getParameter, rootParameter } from "$lib/parameters"
 import { newParameterRepositoryRawUrl } from "$lib/repositories"
 import { units } from "$lib/units"
 
-import type { PageLoad } from "./$types"
-
 export const load: PageLoad = async function ({ fetch, params, parent }) {
   const data = await parent()
   const { parameter: name } = params
diff --git a/src/routes/test_cases/+server.ts b/src/routes/test_cases/+server.ts
index 077825724..4ff5b2980 100644
--- a/src/routes/test_cases/+server.ts
+++ b/src/routes/test_cases/+server.ts
@@ -1,5 +1,7 @@
-import fs from "fs-extra"
 import { json } from "@sveltejs/kit"
+import fs from "fs-extra"
+
+import type { RequestHandler } from "./$types"
 
 import { hashObject } from "$lib/hash"
 import config from "$lib/server/config"
@@ -8,8 +10,6 @@ import {
   getTestCasesCacheFilePath,
 } from "$lib/server/test_cases"
 
-import type { RequestHandler } from "./$types"
-
 const { apiBaseUrls } = config
 
 export const POST: RequestHandler = async ({ fetch, request }) => {
diff --git a/src/routes/test_cases/simulations/+server.ts b/src/routes/test_cases/simulations/+server.ts
index 924a353fe..43fe2a2d3 100644
--- a/src/routes/test_cases/simulations/+server.ts
+++ b/src/routes/test_cases/simulations/+server.ts
@@ -7,14 +7,14 @@ import {
 import { error, json } from "@sveltejs/kit"
 import fs from "fs-extra"
 
+import type { RequestHandler } from "./$types"
+
 import { hashString } from "$lib/hash"
 import {
   getTestCasesRequestsDirPath,
   getTestCasesRequestsFilePath,
 } from "$lib/server/test_cases"
 
-import type { RequestHandler } from "./$types"
-
 function auditBody(audit: Audit, dataUnknown: unknown): [unknown, unknown] {
   if (dataUnknown == null) {
     return [dataUnknown, null]
diff --git a/src/routes/test_cases/simulations/[simulation]/+page.server.ts b/src/routes/test_cases/simulations/[simulation]/+page.server.ts
index eebda9510..975c7594a 100644
--- a/src/routes/test_cases/simulations/[simulation]/+page.server.ts
+++ b/src/routes/test_cases/simulations/[simulation]/+page.server.ts
@@ -8,13 +8,13 @@ import {
 import { error } from "@sveltejs/kit"
 import fs from "fs-extra"
 
+import type { PageServerLoad } from "./$types"
+
 import type { DisplayMode } from "$lib/displays"
 import type { ParametricReform } from "$lib/reforms"
 import { getTestCasesRequestsFilePath } from "$lib/server/test_cases"
 import type { Situation } from "$lib/situations"
 
-import type { PageServerLoad } from "./$types"
-
 function auditParams(audit: Audit, dataUnknown: unknown): [unknown, unknown] {
   if (dataUnknown == null) {
     return [dataUnknown, null]
diff --git a/src/routes/test_cases/simulations/[simulation]/+page.svelte b/src/routes/test_cases/simulations/[simulation]/+page.svelte
index 0a6bcff87..66387d2f8 100644
--- a/src/routes/test_cases/simulations/[simulation]/+page.svelte
+++ b/src/routes/test_cases/simulations/[simulation]/+page.svelte
@@ -2,6 +2,8 @@
   import { getContext, onMount } from "svelte"
   import type { Writable } from "svelte/store"
 
+  import type { PageData } from "./$types"
+
   import { goto } from "$app/navigation"
   import {
     requestAllTestCasesCalculations,
@@ -13,8 +15,6 @@
   import { newSimulationUrl } from "$lib/urls"
   import type { ValuesByCalculationNameByVariableName } from "$lib/variables"
 
-  import type { PageData } from "./$types"
-
   export let data: PageData
 
   const evaluationByNameArray = getContext("evaluationByNameArray") as Writable<
diff --git a/src/routes/variables/+page.svelte b/src/routes/variables/+page.svelte
index 0ec59838a..d81c238f6 100644
--- a/src/routes/variables/+page.svelte
+++ b/src/routes/variables/+page.svelte
@@ -1,8 +1,8 @@
 <script lang="ts">
-  import { variableSummaryByName } from "$lib/variables"
-
   import type { PageData } from "./$types"
 
+  import { variableSummaryByName } from "$lib/variables"
+
   export let data: PageData
 </script>
 
diff --git a/src/routes/variables/[variable]/+page.server.ts b/src/routes/variables/[variable]/+page.server.ts
index f27fd04a2..0ea092264 100644
--- a/src/routes/variables/[variable]/+page.server.ts
+++ b/src/routes/variables/[variable]/+page.server.ts
@@ -1,6 +1,7 @@
+import path from "path"
+
 import { error } from "@sveltejs/kit"
 import fs from "fs-extra"
-import path from "path"
 import sanitizeFilename from "sanitize-filename"
 
 import type { PageServerLoad } from "./$types"
diff --git a/src/routes/variables/[variable]/+page.svelte b/src/routes/variables/[variable]/+page.svelte
index 2be1fa95d..074b20079 100644
--- a/src/routes/variables/[variable]/+page.svelte
+++ b/src/routes/variables/[variable]/+page.svelte
@@ -2,6 +2,8 @@
   import { getContext, setContext } from "svelte"
   import type { Writable } from "svelte/store"
 
+  import type { PageData } from "./$types"
+
   import { goto } from "$app/navigation"
   import VariableView from "$lib/components/variables/VariableView.svelte"
   import type { DisplayMode } from "$lib/displays"
@@ -9,8 +11,6 @@
   import { newSelfTargetAProps, newSimulationUrl } from "$lib/urls"
   import type { ValuesByCalculationNameByVariableName } from "$lib/variables"
 
-  import type { PageData } from "./$types"
-
   export let data: PageData
 
   const date = getContext("date") as Writable<string>
diff --git a/src/routes/variables/[variable]/ast/+server.ts b/src/routes/variables/[variable]/ast/+server.ts
index fdd1cc0ba..fb99e7198 100644
--- a/src/routes/variables/[variable]/ast/+server.ts
+++ b/src/routes/variables/[variable]/ast/+server.ts
@@ -1,3 +1,5 @@
+import path from "path"
+
 import {
   type Audit,
   auditRequire,
@@ -11,7 +13,6 @@ import {
 } from "@openfisca/json-model"
 import { error, json } from "@sveltejs/kit"
 import fs from "fs-extra"
-import path from "path"
 import sanitizeFilename from "sanitize-filename"
 
 import type { RequestHandler } from "./$types"
diff --git a/src/routes/variables/[variable]/inputs/[date]/+page.svelte b/src/routes/variables/[variable]/inputs/[date]/+page.svelte
index cd1de61ed..6f98ab2aa 100644
--- a/src/routes/variables/[variable]/inputs/[date]/+page.svelte
+++ b/src/routes/variables/[variable]/inputs/[date]/+page.svelte
@@ -2,14 +2,14 @@
   import { getContext, setContext } from "svelte"
   import type { Writable } from "svelte/store"
 
+  import type { PageData } from "./$types"
+
   import { page } from "$app/stores"
   import VariableReferredInputs from "$lib/components/variables/VariableReferredInputs.svelte"
   import type { Situation } from "$lib/situations"
   import { newSelfTargetAProps } from "$lib/urls"
   import type { ValuesByCalculationNameByVariableName } from "$lib/variables"
 
-  import type { PageData } from "./$types"
-
   export let data: PageData
 
   const inputInstantsByVariableNameArray = getContext(
diff --git a/src/routes/variables/[variable]/parameters/[date]/+page.svelte b/src/routes/variables/[variable]/parameters/[date]/+page.svelte
index 34795ce31..b3bdc22d2 100644
--- a/src/routes/variables/[variable]/parameters/[date]/+page.svelte
+++ b/src/routes/variables/[variable]/parameters/[date]/+page.svelte
@@ -2,14 +2,14 @@
   import { getContext, setContext } from "svelte"
   import type { Writable } from "svelte/store"
 
+  import type { PageData } from "./$types"
+
   import { page } from "$app/stores"
   import VariableReferredParameters from "$lib/components/variables/VariableReferredParameters.svelte"
   import { waterfalls } from "$lib/decompositions"
   import type { DisplayMode } from "$lib/displays"
   import { newSelfTargetAProps } from "$lib/urls"
 
-  import type { PageData } from "./$types"
-
   export let data: PageData
 
   let displayMode: DisplayMode
diff --git a/src/routes/variables/[variable]/xlsx/+page.svelte b/src/routes/variables/[variable]/xlsx/+page.svelte
index 5c4dccc17..d75b91df3 100644
--- a/src/routes/variables/[variable]/xlsx/+page.svelte
+++ b/src/routes/variables/[variable]/xlsx/+page.svelte
@@ -17,6 +17,8 @@
   import { v4 as uuidV4 } from "uuid"
   import XLSX from "xlsx-js-style"
 
+  import type { PageData } from "./$types"
+
   import { browser } from "$app/environment"
   import { page } from "$app/stores"
   import { entityByKey, personEntityKey } from "$lib/entities"
@@ -34,8 +36,6 @@
     type VariableValuesByCalculationName,
   } from "$lib/variables"
 
-  import type { PageData } from "./$types"
-
   export let data: PageData
 
   type ValuesByCalculationNameByPeriodByVariableName = {
diff --git a/src/scripts/clear_simulations_cache.ts b/src/scripts/clear_simulations_cache.ts
index 820aaf0d5..14821dbbb 100644
--- a/src/scripts/clear_simulations_cache.ts
+++ b/src/scripts/clear_simulations_cache.ts
@@ -1,6 +1,7 @@
-import fs from "fs-extra"
 import path from "path"
 
+import fs from "fs-extra"
+
 import config from "$lib/server/config"
 
 const { simulationsBudgetDir, simulationsTestCasesDir } = config
diff --git a/vite.config.ts b/vite.config.ts
index 387d5b333..bfadcdb78 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -1,6 +1,6 @@
 import { sveltekit } from "@sveltejs/kit/vite"
-import type { UserConfig } from "vite"
 import yaml from "js-yaml"
+import type { UserConfig } from "vite"
 // import yamlPlugin from "@rollup/plugin-yaml"
 
 import yamlPlugin from "./plugin-yaml-patched"
-- 
GitLab