From bd0ad270f58b1361331cbd1c2ef5da3583be7cf3 Mon Sep 17 00:00:00 2001 From: Marc Gavanier Date: Fri, 20 Dec 2024 17:06:01 +0100 Subject: [PATCH] feat: guess more typologies from name --- .tsconfig/tsconfig.base.json | 2 +- .tsconfig/tsconfig.json | 2 +- package.json | 2 +- pnpm-lock.yaml | 612 ++++++++------- .../fields/typologies/name-to-typologie.ts | 285 ++++++- .../typologies/typologies.field.spec.ts | 733 +++++++++++++++++- .../fields/typologies/typologies.field.ts | 13 +- 7 files changed, 1321 insertions(+), 328 deletions(-) diff --git a/.tsconfig/tsconfig.base.json b/.tsconfig/tsconfig.base.json index 197865b6..59101619 100644 --- a/.tsconfig/tsconfig.base.json +++ b/.tsconfig/tsconfig.base.json @@ -13,7 +13,7 @@ // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ /* Language and Environment */ - "target": "es2022" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, + "target": "es2023" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, "lib": ["dom"] /* Specify a set of bundled library declaration files that describe the target runtime environment. */, // "jsx": "preserve", /* Specify what JSX code is generated. */ // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ diff --git a/.tsconfig/tsconfig.json b/.tsconfig/tsconfig.json index 61d796a9..31fa0003 100644 --- a/.tsconfig/tsconfig.json +++ b/.tsconfig/tsconfig.json @@ -5,7 +5,7 @@ "compilerOptions": { "outDir": "../dist", "module": "commonjs", - "target": "es2022" + "target": "es2023" }, "include": ["../src/**/*"], "exclude": ["../src/**/*.spec.ts", "../src/**/*.test.ts"] diff --git a/package.json b/package.json index ccb88221..5f8612c1 100644 --- a/package.json +++ b/package.json @@ -195,7 +195,7 @@ "tsx": "^4.19.1" }, "dependencies": { - "@gouvfr-anct/lieux-de-mediation-numerique": "^2.0.1", + "@gouvfr-anct/lieux-de-mediation-numerique": "^2.1.0", "@gouvfr-anct/timetable-to-osm-opening-hours": "^1.0.1", "@turf/turf": "^6.5.0", "axios": "^1.7.7", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6e70dd4c..44a4514e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,8 +8,8 @@ importers: .: dependencies: '@gouvfr-anct/lieux-de-mediation-numerique': - specifier: ^2.0.1 - version: 2.0.1 + specifier: ^2.1.0 + version: 2.1.0 '@gouvfr-anct/timetable-to-osm-opening-hours': specifier: ^1.0.1 version: 1.1.0 @@ -18,10 +18,10 @@ importers: version: 6.5.0 axios: specifier: ^1.7.7 - version: 1.7.7 + version: 1.7.9 axios-retry: specifier: ^4.5.0 - version: 4.5.0(axios@1.7.7) + version: 4.5.0(axios@1.7.9) commander: specifier: ^10.0.0 version: 10.0.1 @@ -30,16 +30,16 @@ importers: version: 1.0.1 csv-parse: specifier: ^5.5.6 - version: 5.5.6 + version: 5.6.0 csv-stringify: specifier: ^6.5.1 - version: 6.5.1 + version: 6.5.2 csvtojson: specifier: ^2.0.10 version: 2.0.10 dotenv: specifier: ^16.0.3 - version: 16.4.5 + version: 16.4.7 flat: specifier: ^5.0.2 version: 5.0.2 @@ -54,17 +54,17 @@ importers: version: 8.2.6 proj4: specifier: ^2.9.0 - version: 2.12.1 + version: 2.15.0 typescript: specifier: ^5.4.5 - version: 5.6.2 + version: 5.7.2 devDependencies: '@commitlint/cli': specifier: ^19.3.0 - version: 19.5.0(@types/node@20.16.5)(typescript@5.6.2) + version: 19.6.1(@types/node@20.17.10)(typescript@5.7.2) '@commitlint/config-conventional': specifier: ^19.2.2 - version: 19.5.0 + version: 19.6.0 '@turf/helpers': specifier: ^7.1.0 version: 7.1.0 @@ -76,16 +76,16 @@ importers: version: 9.0.7 '@types/jest': specifier: ^29.1.1 - version: 29.5.13 + version: 29.5.14 '@types/node': specifier: ^20.14.6 - version: 20.16.5 + version: 20.17.10 '@typescript-eslint/eslint-plugin': specifier: ^5.39.0 - version: 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2) + version: 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2) '@typescript-eslint/parser': specifier: ^5.39.0 - version: 5.62.0(eslint@8.57.1)(typescript@5.6.2) + version: 5.62.0(eslint@8.57.1)(typescript@5.7.2) eslint: specifier: ^8.24.0 version: 8.57.1 @@ -94,34 +94,34 @@ importers: version: 8.10.0(eslint@8.57.1) eslint-plugin-jest: specifier: ^27.1.0 - version: 27.9.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(jest@29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@types/node@20.16.5)(typescript@5.6.2)))(typescript@5.6.2) + version: 27.9.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(jest@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2)))(typescript@5.7.2) husky: specifier: ^9.0.11 - version: 9.1.6 + version: 9.1.7 iconv-lite: specifier: ^0.6.3 version: 0.6.3 jest: specifier: ^29.1.2 - version: 29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@types/node@20.16.5)(typescript@5.6.2)) + version: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2)) lint-staged: specifier: ^15.2.7 - version: 15.2.10 + version: 15.2.11 prettier: specifier: ^3.3.2 - version: 3.3.3 + version: 3.4.2 standard-version: specifier: ^9.5.0 version: 9.5.0 ts-jest: specifier: ^29.0.3 - version: 29.2.5(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@types/node@20.16.5)(typescript@5.6.2)))(typescript@5.6.2) + version: 29.2.5(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2)))(typescript@5.7.2) ts-node: specifier: ^10.9.2 - version: 10.9.2(@types/node@20.16.5)(typescript@5.6.2) + version: 10.9.2(@types/node@20.17.10)(typescript@5.7.2) tsx: specifier: ^4.19.1 - version: 4.19.1 + version: 4.19.2 packages: '@ampproject/remapping@2.3.0': @@ -297,13 +297,13 @@ packages: '@bcoe/v8-coverage@0.2.3': resolution: { integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== } - '@commitlint/cli@19.5.0': - resolution: { integrity: sha512-gaGqSliGwB86MDmAAKAtV9SV1SHdmN8pnGq4EJU4+hLisQ7IFfx4jvU4s+pk6tl0+9bv6yT+CaZkufOinkSJIQ== } + '@commitlint/cli@19.6.1': + resolution: { integrity: sha512-8hcyA6ZoHwWXC76BoC8qVOSr8xHy00LZhZpauiD0iO0VYbVhMnED0da85lTfIULxl7Lj4c6vZgF0Wu/ed1+jlQ== } engines: { node: '>=v18' } hasBin: true - '@commitlint/config-conventional@19.5.0': - resolution: { integrity: sha512-OBhdtJyHNPryZKg0fFpZNOBM1ZDbntMvqMuSmpfyP86XSfwzGw4CaoYRG4RutUPg0BTK07VMRIkNJT6wi2zthg== } + '@commitlint/config-conventional@19.6.0': + resolution: { integrity: sha512-DJT40iMnTYtBtUfw9ApbsLZFke1zKh6llITVJ+x9mtpHD08gsNXaIRqHTmwTZL3dNX5+WoyK7pCN/5zswvkBCQ== } engines: { node: '>=v18' } '@commitlint/config-validator@19.5.0': @@ -322,16 +322,16 @@ packages: resolution: { integrity: sha512-yNy088miE52stCI3dhG/vvxFo9e4jFkU1Mj3xECfzp/bIS/JUay4491huAlVcffOoMK1cd296q0W92NlER6r3A== } engines: { node: '>=v18' } - '@commitlint/is-ignored@19.5.0': - resolution: { integrity: sha512-0XQ7Llsf9iL/ANtwyZ6G0NGp5Y3EQ8eDQSxv/SRcfJ0awlBY4tHFAvwWbw66FVUaWICH7iE5en+FD9TQsokZ5w== } + '@commitlint/is-ignored@19.6.0': + resolution: { integrity: sha512-Ov6iBgxJQFR9koOupDPHvcHU9keFupDgtB3lObdEZDroiG4jj1rzky60fbQozFKVYRTUdrBGICHG0YVmRuAJmw== } engines: { node: '>=v18' } - '@commitlint/lint@19.5.0': - resolution: { integrity: sha512-cAAQwJcRtiBxQWO0eprrAbOurtJz8U6MgYqLz+p9kLElirzSCc0vGMcyCaA1O7AqBuxo11l1XsY3FhOFowLAAg== } + '@commitlint/lint@19.6.0': + resolution: { integrity: sha512-LRo7zDkXtcIrpco9RnfhOKeg8PAnE3oDDoalnrVU/EVaKHYBWYL1DlRR7+3AWn0JiBqD8yKOfetVxJGdEtZ0tg== } engines: { node: '>=v18' } - '@commitlint/load@19.5.0': - resolution: { integrity: sha512-INOUhkL/qaKqwcTUvCE8iIUf5XHsEPCLY9looJ/ipzi7jtGhgmtH7OOFiNvwYgH7mA8osUWOUDV8t4E2HAi4xA== } + '@commitlint/load@19.6.1': + resolution: { integrity: sha512-kE4mRKWWNju2QpsCWt428XBvUH55OET2N4QKQ0bF85qS/XbsRGG1MiTByDNlEVpEPceMkDr46LNH95DtRwcsfA== } engines: { node: '>=v18' } '@commitlint/message@19.5.0': @@ -350,8 +350,8 @@ packages: resolution: { integrity: sha512-CU/GscZhCUsJwcKTJS9Ndh3AKGZTNFIOoQB2n8CmFnizE0VnEuJoum+COW+C1lNABEeqk6ssfc1Kkalm4bDklA== } engines: { node: '>=v18' } - '@commitlint/rules@19.5.0': - resolution: { integrity: sha512-hDW5TPyf/h1/EufSHEKSp6Hs+YVsDMHazfJ2azIk9tHPXS6UqSz1dIRs1gpqS3eMXgtkT7JH6TW4IShdqOwhAw== } + '@commitlint/rules@19.6.0': + resolution: { integrity: sha512-1f2reW7lbrI0X0ozZMesS/WZxgPa4/wi56vFuJENBmed6mWq5KsheN/nxqnl/C23ioxpPO/PL6tXpiiFy5Bhjw== } engines: { node: '>=v18' } '@commitlint/to-lines@19.5.0': @@ -520,8 +520,8 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.11.1': - resolution: { integrity: sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q== } + '@eslint-community/regexpp@4.12.1': + resolution: { integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== } engines: { node: ^12.0.0 || ^14.0.0 || >=16.0.0 } '@eslint/eslintrc@2.1.4': @@ -532,8 +532,8 @@ packages: resolution: { integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== } engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } - '@gouvfr-anct/lieux-de-mediation-numerique@2.0.1': - resolution: { integrity: sha512-/ZdrEvZI/fKjj85JRyy0xU1/xi05hXQyGC4BML+15PIcXZBDPZwUpwzWRNjR+nHHOIbvJ0tBxIsZeWlhg9FRWg== } + '@gouvfr-anct/lieux-de-mediation-numerique@2.1.0': + resolution: { integrity: sha512-aAJpHvn6ZrhXfA4fCoUZ2pEybVsYXAueYtaJI9hmcCdtW0gja3W+6HlwYXQIB0ap6ikv0mn24RZQRv8nl+c6gg== } '@gouvfr-anct/timetable-to-osm-opening-hours@1.1.0': resolution: { integrity: sha512-lUqYH2mDbp/VX49rxua1hjKsxWjpOR9Yqt1tI6dPViLF+Ac58ku8lEWGKJwVK2rLl3Kwq/xen+ml7CfmvNdhWQ== } @@ -709,6 +709,9 @@ packages: '@turf/bbox@6.5.0': resolution: { integrity: sha512-RBbLaao5hXTYyyg577iuMtDB8ehxMlUqHEJiMs8jT1GHkFhr6sYre3lmLsPeYEi/ZKj5TP5tt7fkzNdJ4GIVyw== } + '@turf/bbox@7.1.0': + resolution: { integrity: sha512-PdWPz9tW86PD78vSZj2fiRaB8JhUHy6piSa/QXb83lucxPK+HTAdzlDQMTKj5okRCU8Ox/25IR2ep9T8NdopRA== } + '@turf/bearing@6.5.0': resolution: { integrity: sha512-dxINYhIEMzgDOztyMZc20I7ssYVNEpSv04VbMo5YPQsqa80KO3TFvbuCahMsCAW5z8Tncc8dwBlEFrmRjJG33A== } @@ -895,6 +898,9 @@ packages: '@turf/meta@6.5.0': resolution: { integrity: sha512-RrArvtsV0vdsCBegoBtOalgdSOfkBrTJ07VkpiCnq/491W67hnMWmDu7e6Ztw0C3WldRYTXkg3SumfdzZxLBHA== } + '@turf/meta@7.1.0': + resolution: { integrity: sha512-ZgGpWWiKz797Fe8lfRj7HKCkGR+nSJ/5aKXMyofCvLSc2PuYJs/qyyifDPWjASQQCzseJ7AlF2Pc/XQ/3XkkuA== } + '@turf/midpoint@6.5.0': resolution: { integrity: sha512-MyTzV44IwmVI6ec9fB2OgZ53JGNlgOpaYl9ArKoF49rXpL84F9rNATndbe0+MQIhdkw8IlzA6xVP4lZzfMNVCw== } @@ -1054,8 +1060,8 @@ packages: '@types/istanbul-reports@3.0.4': resolution: { integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== } - '@types/jest@29.5.13': - resolution: { integrity: sha512-wd+MVEZCHt23V0/L642O5APvspWply/rGY5BcW4SUETo2UzPU3Z26qr8jC2qxpimI2jjx9h7+2cj2FwIr01bXg== } + '@types/jest@29.5.14': + resolution: { integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ== } '@types/json-schema@7.0.15': resolution: { integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== } @@ -1066,8 +1072,8 @@ packages: '@types/minimist@1.2.5': resolution: { integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag== } - '@types/node@20.16.5': - resolution: { integrity: sha512-VwYCweNo3ERajwy0IUlqqcyZ8/A7Zwa9ZP3MnENWcB11AejO+tLy3pu850goUW2FC/IJMdZUfKpX/yxL1gymCA== } + '@types/node@20.17.10': + resolution: { integrity: sha512-/jrvh5h6NXhEauFFexRin69nA0uHJ5gwk4iDivp/DeoEua3uwCUto6PC86IpRITBOs4+6i2I56K5x5b6WYGXHA== } '@types/normalize-package-data@2.4.4': resolution: { integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA== } @@ -1145,8 +1151,8 @@ packages: resolution: { integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== } engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } - '@ungap/structured-clone@1.2.0': - resolution: { integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== } + '@ungap/structured-clone@1.2.1': + resolution: { integrity: sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA== } JSONStream@1.3.5: resolution: { integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== } @@ -1166,6 +1172,11 @@ packages: engines: { node: '>=0.4.0' } hasBin: true + acorn@8.14.0: + resolution: { integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== } + engines: { node: '>=0.4.0' } + hasBin: true + add-stream@1.0.0: resolution: { integrity: sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ== } @@ -1242,8 +1253,8 @@ packages: peerDependencies: axios: 0.x || 1.x - axios@1.7.7: - resolution: { integrity: sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q== } + axios@1.7.9: + resolution: { integrity: sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw== } babel-jest@29.7.0: resolution: { integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== } @@ -1310,8 +1321,16 @@ packages: buffer@5.7.1: resolution: { integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== } - call-bind@1.0.7: - resolution: { integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== } + call-bind-apply-helpers@1.0.1: + resolution: { integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g== } + engines: { node: '>= 0.4' } + + call-bind@1.0.8: + resolution: { integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== } + engines: { node: '>= 0.4' } + + call-bound@1.0.3: + resolution: { integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA== } engines: { node: '>= 0.4' } callsites@3.1.0: @@ -1530,13 +1549,13 @@ packages: core-util-is@1.0.3: resolution: { integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== } - cosmiconfig-typescript-loader@5.0.0: - resolution: { integrity: sha512-+8cK7jRAReYkMwMiG+bxhcNKiHJDM6bR9FD/nGBXOWdMLuYawjF5cGrtLilJ+LGd3ZjCXnJjR5DkfWPoIVlqJA== } - engines: { node: '>=v16' } + cosmiconfig-typescript-loader@6.1.0: + resolution: { integrity: sha512-tJ1w35ZRUiM5FeTzT7DtYWAFFv37ZLqSRkGi2oeCK1gPhvaWjkAtfXvLmvE1pRfxxp9aQo6ba/Pvg1dKj05D4g== } + engines: { node: '>=v18' } peerDependencies: '@types/node': '*' - cosmiconfig: '>=8.2' - typescript: '>=4' + cosmiconfig: '>=9' + typescript: '>=5' cosmiconfig@9.0.0: resolution: { integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg== } @@ -1555,19 +1574,19 @@ packages: create-require@1.1.1: resolution: { integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== } - cross-spawn@7.0.3: - resolution: { integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== } + cross-spawn@7.0.6: + resolution: { integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== } engines: { node: '>= 8' } crypto@1.0.1: resolution: { integrity: sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig== } deprecated: This package is no longer supported. It's now a built-in Node module. If you've depended on crypto, you should switch to the one that's built-in. - csv-parse@5.5.6: - resolution: { integrity: sha512-uNpm30m/AGSkLxxy7d9yRXpJQFrZzVWLFBkS+6ngPcZkw/5k3L/jjFuj7tVnEpRn+QgmiXr21nDlhCiUK4ij2A== } + csv-parse@5.6.0: + resolution: { integrity: sha512-l3nz3euub2QMg5ouu5U09Ew9Wf6/wQ8I++ch1loQ0ljmzhmfZYrH9fflS22i/PQEvsPvxCwxgz5q7UB8K1JO4Q== } - csv-stringify@6.5.1: - resolution: { integrity: sha512-+9lpZfwpLntpTIEpFbwQyWuW/hmI/eHuJZD1XzeZpfZTqkf1fyvBbBLXTJJMsBuuS11uTShMqPwzx4A6ffXgRQ== } + csv-stringify@6.5.2: + resolution: { integrity: sha512-RFPahj0sXcmUyjrObAK+DOWtMvMIFV328n4qZJhgX3x2RqkQgOTU2mCUmiFR0CzM6AzChlRSUErjiJeEt8BaQA== } csvtojson@2.0.10: resolution: { integrity: sha512-lUWFxGKyhraKCW8Qghz6Z0f2l/PqB1W3AO0HKJzGIQ5JRSlR651ekJDiGJbBT4sRNNv5ddnSGVEnsxP9XRCVpQ== } @@ -1594,8 +1613,8 @@ packages: dateformat@3.0.3: resolution: { integrity: sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== } - debug@4.3.7: - resolution: { integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== } + debug@4.4.0: + resolution: { integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== } engines: { node: '>=6.0' } peerDependencies: supports-color: '*' @@ -1676,14 +1695,18 @@ packages: resolution: { integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== } engines: { node: '>=8' } - dotenv@16.4.5: - resolution: { integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== } + dotenv@16.4.7: + resolution: { integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ== } engines: { node: '>=12' } dotgitignore@2.1.0: resolution: { integrity: sha512-sCm11ak2oY6DglEPpCB8TixLjWAxd3kJTs6UIcSasNYxXdFPV+YKlye92c8H4kKFqV5qYMIh7d+cYecEg0dIkA== } engines: { node: '>=6' } + dunder-proto@1.0.1: + resolution: { integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== } + engines: { node: '>= 0.4' } + earcut@2.2.4: resolution: { integrity: sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ== } @@ -1722,14 +1745,18 @@ packages: error-ex@1.3.2: resolution: { integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== } - es-define-property@1.0.0: - resolution: { integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== } + es-define-property@1.0.1: + resolution: { integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== } engines: { node: '>= 0.4' } es-errors@1.3.0: resolution: { integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== } engines: { node: '>= 0.4' } + es-object-atoms@1.0.0: + resolution: { integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== } + engines: { node: '>= 0.4' } + esbuild@0.23.1: resolution: { integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg== } engines: { node: '>=18' } @@ -1785,6 +1812,7 @@ packages: eslint@8.57.1: resolution: { integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA== } engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true espree@9.6.1: @@ -1959,8 +1987,8 @@ packages: resolution: { integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA== } engines: { node: '>=18' } - get-intrinsic@1.2.4: - resolution: { integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== } + get-intrinsic@1.2.6: + resolution: { integrity: sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA== } engines: { node: '>= 0.4' } get-package-type@0.1.0: @@ -2037,8 +2065,9 @@ packages: resolution: { integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== } engines: { node: '>=10' } - gopd@1.0.1: - resolution: { integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== } + gopd@1.2.0: + resolution: { integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== } + engines: { node: '>= 0.4' } graceful-fs@4.2.11: resolution: { integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== } @@ -2066,12 +2095,8 @@ packages: has-property-descriptors@1.0.2: resolution: { integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== } - has-proto@1.0.3: - resolution: { integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== } - engines: { node: '>= 0.4' } - - has-symbols@1.0.3: - resolution: { integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== } + has-symbols@1.1.0: + resolution: { integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== } engines: { node: '>= 0.4' } has-tostringtag@1.0.2: @@ -2103,8 +2128,8 @@ packages: resolution: { integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ== } engines: { node: '>=16.17.0' } - husky@9.1.6: - resolution: { integrity: sha512-sqbjZKK7kf44hfdE94EoX8MZNk0n7HeW37O4YrVGCF4wzgQjp+akPAkfUK5LZ6KuR/6sqeAVuXHji+RzQgOn5A== } + husky@9.1.7: + resolution: { integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA== } engines: { node: '>=18' } hasBin: true @@ -2161,8 +2186,8 @@ packages: resolution: { integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg== } engines: { node: '>=12.0.0' } - is-arguments@1.1.1: - resolution: { integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== } + is-arguments@1.2.0: + resolution: { integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA== } engines: { node: '>= 0.4' } is-arrayish@0.2.1: @@ -2172,8 +2197,8 @@ packages: resolution: { integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ== } engines: { node: '>= 0.4' } - is-date-object@1.0.5: - resolution: { integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== } + is-date-object@1.1.0: + resolution: { integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg== } engines: { node: '>= 0.4' } is-extglob@2.1.1: @@ -2220,8 +2245,8 @@ packages: resolution: { integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== } engines: { node: '>=0.10.0' } - is-regex@1.1.4: - resolution: { integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== } + is-regex@1.2.1: + resolution: { integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== } engines: { node: '>= 0.4' } is-retry-allowed@2.2.0: @@ -2418,8 +2443,8 @@ packages: node-notifier: optional: true - jiti@1.21.6: - resolution: { integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w== } + jiti@2.4.2: + resolution: { integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A== } hasBin: true js-tokens@4.0.0: @@ -2487,20 +2512,20 @@ packages: resolution: { integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== } engines: { node: '>= 0.8.0' } - lilconfig@3.1.2: - resolution: { integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow== } + lilconfig@3.1.3: + resolution: { integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw== } engines: { node: '>=14' } lines-and-columns@1.2.4: resolution: { integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== } - lint-staged@15.2.10: - resolution: { integrity: sha512-5dY5t743e1byO19P9I4b3x8HJwalIznL5E1FWYnU6OWw33KxNBSLAc6Cy7F2PsFEO8FKnLwjwm5hx7aMF0jzZg== } + lint-staged@15.2.11: + resolution: { integrity: sha512-Ev6ivCTYRTGs9ychvpVw35m/bcNDuBN+mnTeObCL5h+boS5WzBEC6LHI4I9F/++sZm1m+J2LEiy0gxL/R9TBqQ== } engines: { node: '>=18.12.0' } hasBin: true - listr2@8.2.4: - resolution: { integrity: sha512-opevsywziHd3zHCVQGAj8zu+Z3yHNkkoYhWIGnq54RrCVwLz0MozotJEDnKsIBLvkfLGN6BLOyAeRrYI0pKA4g== } + listr2@8.2.5: + resolution: { integrity: sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ== } engines: { node: '>=18.0.0' } load-json-file@4.0.0: @@ -2599,6 +2624,10 @@ packages: resolution: { integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== } engines: { node: '>=8' } + math-intrinsics@1.1.0: + resolution: { integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== } + engines: { node: '>= 0.4' } + meow@12.1.1: resolution: { integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw== } engines: { node: '>=16.10' } @@ -2886,8 +2915,8 @@ packages: resolution: { integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== } engines: { node: '>= 0.8.0' } - prettier@3.3.3: - resolution: { integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew== } + prettier@3.4.2: + resolution: { integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ== } engines: { node: '>=14' } hasBin: true @@ -2898,8 +2927,8 @@ packages: process-nextick-args@2.0.1: resolution: { integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== } - proj4@2.12.1: - resolution: { integrity: sha512-vmhP3hmstjXjzFwg8QXJwpoj4n7GVrXk3ZW3DzNK/Ur4cuwXq7ZiMXaWYvLYLQbX8n4MXgbwTr4lthOUZltBpA== } + proj4@2.15.0: + resolution: { integrity: sha512-LqCNEcPdI03BrCHxPLj29vsd5afsm+0sV1H/O3nTDKrv8/LA01ea1z4QADDMjUqxSXWnrmmQDjqFm1J/uZ5RLw== } prompts@2.4.2: resolution: { integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== } @@ -2972,8 +3001,8 @@ packages: resolution: { integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== } engines: { node: '>=8' } - regexp.prototype.flags@1.5.2: - resolution: { integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== } + regexp.prototype.flags@1.5.3: + resolution: { integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ== } engines: { node: '>= 0.4' } require-directory@2.1.1: @@ -3348,8 +3377,8 @@ packages: peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' - tsx@4.19.1: - resolution: { integrity: sha512-0flMz1lh74BR4wOvBjuh9olbnwqCPc35OOlfyzHba0Dc+QNUeWX/Gq2YTbnwcWPO3BMd8fkzRVrHcsR+a7z7rA== } + tsx@4.19.2: + resolution: { integrity: sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g== } engines: { node: '>=18.0.0' } hasBin: true @@ -3387,8 +3416,8 @@ packages: typedarray@0.0.6: resolution: { integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== } - typescript@5.6.2: - resolution: { integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw== } + typescript@5.7.2: + resolution: { integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg== } engines: { node: '>=14.17' } hasBin: true @@ -3437,8 +3466,8 @@ packages: engines: { node: '>= 8' } hasBin: true - wkt-parser@1.3.3: - resolution: { integrity: sha512-ZnV3yH8/k58ZPACOXeiHaMuXIiaTk1t0hSUVisbO0t4RjA5wPpUytcxeyiN2h+LZRrmuHIh/1UlrR9e7DHDvTw== } + wkt-parser@1.4.0: + resolution: { integrity: sha512-qpwO7Ihds/YYDTi1aADFTI1Sm9YC/tTe3SHD24EeIlZxy7Ik6a1b4HOz7jAi0xdUAw487duqpo8OGu+Tf4nwlQ== } word-wrap@1.2.5: resolution: { integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== } @@ -3484,8 +3513,8 @@ packages: yallist@4.0.0: resolution: { integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== } - yaml@2.5.1: - resolution: { integrity: sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q== } + yaml@2.6.1: + resolution: { integrity: sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg== } engines: { node: '>= 14' } hasBin: true @@ -3543,7 +3572,7 @@ snapshots: '@babel/traverse': 7.25.6 '@babel/types': 7.25.6 convert-source-map: 2.0.0 - debug: 4.3.7 + debug: 4.4.0 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -3711,7 +3740,7 @@ snapshots: '@babel/parser': 7.25.6 '@babel/template': 7.25.0 '@babel/types': 7.25.6 - debug: 4.3.7 + debug: 4.4.0 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -3724,11 +3753,11 @@ snapshots: '@bcoe/v8-coverage@0.2.3': {} - '@commitlint/cli@19.5.0(@types/node@20.16.5)(typescript@5.6.2)': + '@commitlint/cli@19.6.1(@types/node@20.17.10)(typescript@5.7.2)': dependencies: '@commitlint/format': 19.5.0 - '@commitlint/lint': 19.5.0 - '@commitlint/load': 19.5.0(@types/node@20.16.5)(typescript@5.6.2) + '@commitlint/lint': 19.6.0 + '@commitlint/load': 19.6.1(@types/node@20.17.10)(typescript@5.7.2) '@commitlint/read': 19.5.0 '@commitlint/types': 19.5.0 tinyexec: 0.3.0 @@ -3737,7 +3766,7 @@ snapshots: - '@types/node' - typescript - '@commitlint/config-conventional@19.5.0': + '@commitlint/config-conventional@19.6.0': dependencies: '@commitlint/types': 19.5.0 conventional-changelog-conventionalcommits: 7.0.2 @@ -3763,27 +3792,27 @@ snapshots: '@commitlint/types': 19.5.0 chalk: 5.3.0 - '@commitlint/is-ignored@19.5.0': + '@commitlint/is-ignored@19.6.0': dependencies: '@commitlint/types': 19.5.0 semver: 7.6.3 - '@commitlint/lint@19.5.0': + '@commitlint/lint@19.6.0': dependencies: - '@commitlint/is-ignored': 19.5.0 + '@commitlint/is-ignored': 19.6.0 '@commitlint/parse': 19.5.0 - '@commitlint/rules': 19.5.0 + '@commitlint/rules': 19.6.0 '@commitlint/types': 19.5.0 - '@commitlint/load@19.5.0(@types/node@20.16.5)(typescript@5.6.2)': + '@commitlint/load@19.6.1(@types/node@20.17.10)(typescript@5.7.2)': dependencies: '@commitlint/config-validator': 19.5.0 '@commitlint/execute-rule': 19.5.0 '@commitlint/resolve-extends': 19.5.0 '@commitlint/types': 19.5.0 chalk: 5.3.0 - cosmiconfig: 9.0.0(typescript@5.6.2) - cosmiconfig-typescript-loader: 5.0.0(@types/node@20.16.5)(cosmiconfig@9.0.0(typescript@5.6.2))(typescript@5.6.2) + cosmiconfig: 9.0.0(typescript@5.7.2) + cosmiconfig-typescript-loader: 6.1.0(@types/node@20.17.10)(cosmiconfig@9.0.0(typescript@5.7.2))(typescript@5.7.2) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 @@ -3816,7 +3845,7 @@ snapshots: lodash.mergewith: 4.6.2 resolve-from: 5.0.0 - '@commitlint/rules@19.5.0': + '@commitlint/rules@19.6.0': dependencies: '@commitlint/ensure': 19.5.0 '@commitlint/message': 19.5.0 @@ -3915,12 +3944,12 @@ snapshots: eslint: 8.57.1 eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.11.1': {} + '@eslint-community/regexpp@4.12.1': {} '@eslint/eslintrc@2.1.4': dependencies: ajv: 6.12.6 - debug: 4.3.7 + debug: 4.4.0 espree: 9.6.1 globals: 13.24.0 ignore: 5.3.2 @@ -3933,14 +3962,14 @@ snapshots: '@eslint/js@8.57.1': {} - '@gouvfr-anct/lieux-de-mediation-numerique@2.0.1': {} + '@gouvfr-anct/lieux-de-mediation-numerique@2.1.0': {} '@gouvfr-anct/timetable-to-osm-opening-hours@1.1.0': {} '@humanwhocodes/config-array@0.13.0': dependencies: '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.7 + debug: 4.4.0 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -3973,27 +4002,27 @@ snapshots: '@jest/console@29.7.0': dependencies: '@jest/types': 29.6.3 - '@types/node': 20.16.5 + '@types/node': 20.17.10 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 slash: 3.0.0 - '@jest/core@29.7.0(ts-node@10.9.2(@types/node@20.16.5)(typescript@5.6.2))': + '@jest/core@29.7.0(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.16.5 + '@types/node': 20.17.10 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@types/node@20.16.5)(typescript@5.6.2)) + jest-config: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -4018,7 +4047,7 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.16.5 + '@types/node': 20.17.10 jest-mock: 29.7.0 '@jest/expect-utils@29.7.0': @@ -4036,7 +4065,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.16.5 + '@types/node': 20.17.10 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -4058,7 +4087,7 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 20.16.5 + '@types/node': 20.17.10 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -4128,7 +4157,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.16.5 + '@types/node': 20.17.10 '@types/yargs': 17.0.33 chalk: 4.1.2 @@ -4221,6 +4250,13 @@ snapshots: '@turf/helpers': 6.5.0 '@turf/meta': 6.5.0 + '@turf/bbox@7.1.0': + dependencies: + '@turf/helpers': 7.1.0 + '@turf/meta': 7.1.0 + '@types/geojson': 7946.0.14 + tslib: 2.7.0 + '@turf/bearing@6.5.0': dependencies: '@turf/helpers': 6.5.0 @@ -4630,6 +4666,11 @@ snapshots: dependencies: '@turf/helpers': 6.5.0 + '@turf/meta@7.1.0': + dependencies: + '@turf/helpers': 7.1.0 + '@types/geojson': 7946.0.14 + '@turf/midpoint@6.5.0': dependencies: '@turf/bearing': 6.5.0 @@ -5031,7 +5072,7 @@ snapshots: '@types/conventional-commits-parser@5.0.0': dependencies: - '@types/node': 20.16.5 + '@types/node': 20.17.10 '@types/geojson@7946.0.14': {} @@ -5040,11 +5081,11 @@ snapshots: '@types/glob@8.1.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 20.16.5 + '@types/node': 20.17.10 '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 20.16.5 + '@types/node': 20.17.10 '@types/inquirer@9.0.7': dependencies: @@ -5061,7 +5102,7 @@ snapshots: dependencies: '@types/istanbul-lib-report': 3.0.3 - '@types/jest@29.5.13': + '@types/jest@29.5.14': dependencies: expect: 29.7.0 pretty-format: 29.7.0 @@ -5072,7 +5113,7 @@ snapshots: '@types/minimist@1.2.5': {} - '@types/node@20.16.5': + '@types/node@20.17.10': dependencies: undici-types: 6.19.8 @@ -5084,7 +5125,7 @@ snapshots: '@types/through@0.0.33': dependencies: - '@types/node': 20.16.5 + '@types/node': 20.17.10 '@types/yargs-parser@21.0.3': {} @@ -5092,34 +5133,34 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2)': + '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2)': dependencies: - '@eslint-community/regexpp': 4.11.1 - '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.6.2) + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.7.2) '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.1)(typescript@5.6.2) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.6.2) - debug: 4.3.7 + '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.1)(typescript@5.7.2) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.7.2) + debug: 4.4.0 eslint: 8.57.1 graphemer: 1.4.0 ignore: 5.3.2 natural-compare-lite: 1.4.0 semver: 7.6.3 - tsutils: 3.21.0(typescript@5.6.2) + tsutils: 3.21.0(typescript@5.7.2) optionalDependencies: - typescript: 5.6.2 + typescript: 5.7.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.2)': + '@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.7.2)': dependencies: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.6.2) - debug: 4.3.7 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.7.2) + debug: 4.4.0 eslint: 8.57.1 optionalDependencies: - typescript: 5.6.2 + typescript: 5.7.2 transitivePeerDependencies: - supports-color @@ -5128,42 +5169,42 @@ snapshots: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - '@typescript-eslint/type-utils@5.62.0(eslint@8.57.1)(typescript@5.6.2)': + '@typescript-eslint/type-utils@5.62.0(eslint@8.57.1)(typescript@5.7.2)': dependencies: - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.6.2) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.6.2) - debug: 4.3.7 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.7.2) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.7.2) + debug: 4.4.0 eslint: 8.57.1 - tsutils: 3.21.0(typescript@5.6.2) + tsutils: 3.21.0(typescript@5.7.2) optionalDependencies: - typescript: 5.6.2 + typescript: 5.7.2 transitivePeerDependencies: - supports-color '@typescript-eslint/types@5.62.0': {} - '@typescript-eslint/typescript-estree@5.62.0(typescript@5.6.2)': + '@typescript-eslint/typescript-estree@5.62.0(typescript@5.7.2)': dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.7 + debug: 4.4.0 globby: 11.1.0 is-glob: 4.0.3 semver: 7.6.3 - tsutils: 3.21.0(typescript@5.6.2) + tsutils: 3.21.0(typescript@5.7.2) optionalDependencies: - typescript: 5.6.2 + typescript: 5.7.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@5.6.2)': + '@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@5.7.2)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) '@types/json-schema': 7.0.15 '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.6.2) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.7.2) eslint: 8.57.1 eslint-scope: 5.1.1 semver: 7.6.3 @@ -5176,16 +5217,16 @@ snapshots: '@typescript-eslint/types': 5.62.0 eslint-visitor-keys: 3.4.3 - '@ungap/structured-clone@1.2.0': {} + '@ungap/structured-clone@1.2.1': {} JSONStream@1.3.5: dependencies: jsonparse: 1.3.1 through: 2.3.8 - acorn-jsx@5.3.2(acorn@8.12.1): + acorn-jsx@5.3.2(acorn@8.14.0): dependencies: - acorn: 8.12.1 + acorn: 8.14.0 acorn-walk@8.3.4: dependencies: @@ -5193,6 +5234,8 @@ snapshots: acorn@8.12.1: {} + acorn@8.14.0: {} + add-stream@1.0.0: {} ajv@6.12.6: @@ -5256,12 +5299,12 @@ snapshots: asynckit@0.4.0: {} - axios-retry@4.5.0(axios@1.7.7): + axios-retry@4.5.0(axios@1.7.9): dependencies: - axios: 1.7.7 + axios: 1.7.9 is-retry-allowed: 2.2.0 - axios@1.7.7: + axios@1.7.9: dependencies: follow-redirects: 1.15.9 form-data: 4.0.0 @@ -5371,14 +5414,23 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 - call-bind@1.0.7: + call-bind-apply-helpers@1.0.1: dependencies: - es-define-property: 1.0.0 es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.4 + + call-bind@1.0.8: + dependencies: + call-bind-apply-helpers: 1.0.1 + es-define-property: 1.0.1 + get-intrinsic: 1.2.6 set-function-length: 1.2.2 + call-bound@1.0.3: + dependencies: + call-bind-apply-helpers: 1.0.1 + get-intrinsic: 1.2.6 + callsites@3.1.0: {} camelcase-keys@6.2.2: @@ -5625,29 +5677,29 @@ snapshots: core-util-is@1.0.3: {} - cosmiconfig-typescript-loader@5.0.0(@types/node@20.16.5)(cosmiconfig@9.0.0(typescript@5.6.2))(typescript@5.6.2): + cosmiconfig-typescript-loader@6.1.0(@types/node@20.17.10)(cosmiconfig@9.0.0(typescript@5.7.2))(typescript@5.7.2): dependencies: - '@types/node': 20.16.5 - cosmiconfig: 9.0.0(typescript@5.6.2) - jiti: 1.21.6 - typescript: 5.6.2 + '@types/node': 20.17.10 + cosmiconfig: 9.0.0(typescript@5.7.2) + jiti: 2.4.2 + typescript: 5.7.2 - cosmiconfig@9.0.0(typescript@5.6.2): + cosmiconfig@9.0.0(typescript@5.7.2): dependencies: env-paths: 2.2.1 import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 optionalDependencies: - typescript: 5.6.2 + typescript: 5.7.2 - create-jest@29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@types/node@20.16.5)(typescript@5.6.2)): + create-jest@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2)): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@types/node@20.16.5)(typescript@5.6.2)) + jest-config: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -5658,7 +5710,7 @@ snapshots: create-require@1.1.1: {} - cross-spawn@7.0.3: + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 @@ -5666,9 +5718,9 @@ snapshots: crypto@1.0.1: {} - csv-parse@5.5.6: {} + csv-parse@5.6.0: {} - csv-stringify@6.5.1: {} + csv-stringify@6.5.2: {} csvtojson@2.0.10: dependencies: @@ -5690,7 +5742,7 @@ snapshots: dateformat@3.0.3: {} - debug@4.3.7: + debug@4.4.0: dependencies: ms: 2.1.3 @@ -5705,12 +5757,12 @@ snapshots: deep-equal@1.1.2: dependencies: - is-arguments: 1.1.1 - is-date-object: 1.0.5 - is-regex: 1.1.4 + is-arguments: 1.2.0 + is-date-object: 1.1.0 + is-regex: 1.2.1 object-is: 1.1.6 object-keys: 1.1.1 - regexp.prototype.flags: 1.5.2 + regexp.prototype.flags: 1.5.3 deep-is@0.1.4: {} @@ -5722,9 +5774,9 @@ snapshots: define-data-property@1.1.4: dependencies: - es-define-property: 1.0.0 + es-define-property: 1.0.1 es-errors: 1.3.0 - gopd: 1.0.1 + gopd: 1.2.0 define-properties@1.2.1: dependencies: @@ -5756,13 +5808,19 @@ snapshots: dependencies: is-obj: 2.0.0 - dotenv@16.4.5: {} + dotenv@16.4.7: {} dotgitignore@2.1.0: dependencies: find-up: 3.0.0 minimatch: 3.1.2 + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + earcut@2.2.4: {} eastasianwidth@0.2.0: {} @@ -5789,12 +5847,14 @@ snapshots: dependencies: is-arrayish: 0.2.1 - es-define-property@1.0.0: - dependencies: - get-intrinsic: 1.2.4 + es-define-property@1.0.1: {} es-errors@1.3.0: {} + es-object-atoms@1.0.0: + dependencies: + es-errors: 1.3.0 + esbuild@0.23.1: optionalDependencies: '@esbuild/aix-ppc64': 0.23.1 @@ -5834,13 +5894,13 @@ snapshots: dependencies: eslint: 8.57.1 - eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(jest@29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@types/node@20.16.5)(typescript@5.6.2)))(typescript@5.6.2): + eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(jest@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2)))(typescript@5.7.2): dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.7.2) eslint: 8.57.1 optionalDependencies: - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2) - jest: 29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@types/node@20.16.5)(typescript@5.6.2)) + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2) + jest: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2)) transitivePeerDependencies: - supports-color - typescript @@ -5860,17 +5920,17 @@ snapshots: eslint@8.57.1: dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) - '@eslint-community/regexpp': 4.11.1 + '@eslint-community/regexpp': 4.12.1 '@eslint/eslintrc': 2.1.4 '@eslint/js': 8.57.1 '@humanwhocodes/config-array': 0.13.0 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 + '@ungap/structured-clone': 1.2.1 ajv: 6.12.6 chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.7 + cross-spawn: 7.0.6 + debug: 4.4.0 doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -5902,8 +5962,8 @@ snapshots: espree@9.6.1: dependencies: - acorn: 8.12.1 - acorn-jsx: 5.3.2(acorn@8.12.1) + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) eslint-visitor-keys: 3.4.3 esprima@4.0.1: {} @@ -5926,7 +5986,7 @@ snapshots: execa@5.1.1: dependencies: - cross-spawn: 7.0.3 + cross-spawn: 7.0.6 get-stream: 6.0.1 human-signals: 2.1.0 is-stream: 2.0.1 @@ -5938,7 +5998,7 @@ snapshots: execa@8.0.1: dependencies: - cross-spawn: 7.0.3 + cross-spawn: 7.0.6 get-stream: 8.0.1 human-signals: 5.0.0 is-stream: 3.0.0 @@ -6042,7 +6102,7 @@ snapshots: foreground-child@3.3.0: dependencies: - cross-spawn: 7.0.3 + cross-spawn: 7.0.6 signal-exit: 4.1.0 form-data@4.0.0: @@ -6075,7 +6135,7 @@ snapshots: geojson-rbush@3.2.0: dependencies: - '@turf/bbox': 6.5.0 + '@turf/bbox': 7.1.0 '@turf/helpers': 6.5.0 '@turf/meta': 6.5.0 '@types/geojson': 7946.0.8 @@ -6085,13 +6145,18 @@ snapshots: get-east-asian-width@1.2.0: {} - get-intrinsic@1.2.4: + get-intrinsic@1.2.6: dependencies: + call-bind-apply-helpers: 1.0.1 + dunder-proto: 1.0.1 + es-define-property: 1.0.1 es-errors: 1.3.0 + es-object-atoms: 1.0.0 function-bind: 1.1.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 + gopd: 1.2.0 + has-symbols: 1.1.0 hasown: 2.0.2 + math-intrinsics: 1.1.0 get-package-type@0.1.0: {} @@ -6183,9 +6248,7 @@ snapshots: merge2: 1.4.1 slash: 3.0.0 - gopd@1.0.1: - dependencies: - get-intrinsic: 1.2.4 + gopd@1.2.0: {} graceful-fs@4.2.11: {} @@ -6208,15 +6271,13 @@ snapshots: has-property-descriptors@1.0.2: dependencies: - es-define-property: 1.0.0 - - has-proto@1.0.3: {} + es-define-property: 1.0.1 - has-symbols@1.0.3: {} + has-symbols@1.1.0: {} has-tostringtag@1.0.2: dependencies: - has-symbols: 1.0.3 + has-symbols: 1.1.0 hasown@2.0.2: dependencies: @@ -6236,7 +6297,7 @@ snapshots: human-signals@5.0.0: {} - husky@9.1.6: {} + husky@9.1.7: {} iconv-lite@0.4.24: dependencies: @@ -6295,9 +6356,9 @@ snapshots: through: 2.3.8 wrap-ansi: 6.2.0 - is-arguments@1.1.1: + is-arguments@1.2.0: dependencies: - call-bind: 1.0.7 + call-bound: 1.0.3 has-tostringtag: 1.0.2 is-arrayish@0.2.1: {} @@ -6306,8 +6367,9 @@ snapshots: dependencies: hasown: 2.0.2 - is-date-object@1.0.5: + is-date-object@1.1.0: dependencies: + call-bound: 1.0.3 has-tostringtag: 1.0.2 is-extglob@2.1.1: {} @@ -6336,10 +6398,12 @@ snapshots: is-plain-obj@1.1.0: {} - is-regex@1.1.4: + is-regex@1.2.1: dependencies: - call-bind: 1.0.7 + call-bound: 1.0.3 + gopd: 1.2.0 has-tostringtag: 1.0.2 + hasown: 2.0.2 is-retry-allowed@2.2.0: {} @@ -6393,7 +6457,7 @@ snapshots: istanbul-lib-source-maps@4.0.1: dependencies: - debug: 4.3.7 + debug: 4.4.0 istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -6429,7 +6493,7 @@ snapshots: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.16.5 + '@types/node': 20.17.10 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.3 @@ -6449,16 +6513,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@types/node@20.16.5)(typescript@5.6.2)): + jest-cli@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.16.5)(typescript@5.6.2)) + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@types/node@20.16.5)(typescript@5.6.2)) + create-jest: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2)) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@types/node@20.16.5)(typescript@5.6.2)) + jest-config: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -6468,7 +6532,7 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@types/node@20.16.5)(typescript@5.6.2)): + jest-config@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2)): dependencies: '@babel/core': 7.25.2 '@jest/test-sequencer': 29.7.0 @@ -6493,8 +6557,8 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 20.16.5 - ts-node: 10.9.2(@types/node@20.16.5)(typescript@5.6.2) + '@types/node': 20.17.10 + ts-node: 10.9.2(@types/node@20.17.10)(typescript@5.7.2) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -6523,7 +6587,7 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.16.5 + '@types/node': 20.17.10 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -6533,7 +6597,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 20.16.5 + '@types/node': 20.17.10 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -6572,7 +6636,7 @@ snapshots: jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 20.16.5 + '@types/node': 20.17.10 jest-util: 29.7.0 jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): @@ -6607,7 +6671,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.16.5 + '@types/node': 20.17.10 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -6635,7 +6699,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.16.5 + '@types/node': 20.17.10 chalk: 4.1.2 cjs-module-lexer: 1.4.1 collect-v8-coverage: 1.0.2 @@ -6681,7 +6745,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 20.16.5 + '@types/node': 20.17.10 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -6700,7 +6764,7 @@ snapshots: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.16.5 + '@types/node': 20.17.10 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -6709,24 +6773,24 @@ snapshots: jest-worker@29.7.0: dependencies: - '@types/node': 20.16.5 + '@types/node': 20.17.10 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@types/node@20.16.5)(typescript@5.6.2)): + jest@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.16.5)(typescript@5.6.2)) + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2)) '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@types/node@20.16.5)(typescript@5.6.2)) + jest-cli: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros - supports-color - ts-node - jiti@1.21.6: {} + jiti@2.4.2: {} js-tokens@4.0.0: {} @@ -6774,26 +6838,26 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - lilconfig@3.1.2: {} + lilconfig@3.1.3: {} lines-and-columns@1.2.4: {} - lint-staged@15.2.10: + lint-staged@15.2.11: dependencies: chalk: 5.3.0 commander: 12.1.0 - debug: 4.3.7 + debug: 4.4.0 execa: 8.0.1 - lilconfig: 3.1.2 - listr2: 8.2.4 + lilconfig: 3.1.3 + listr2: 8.2.5 micromatch: 4.0.8 pidtree: 0.6.0 string-argv: 0.3.2 - yaml: 2.5.1 + yaml: 2.6.1 transitivePeerDependencies: - supports-color - listr2@8.2.4: + listr2@8.2.5: dependencies: cli-truncate: 4.0.0 colorette: 2.0.20 @@ -6892,6 +6956,8 @@ snapshots: map-obj@4.3.0: {} + math-intrinsics@1.1.0: {} + meow@12.1.1: {} meow@8.1.2: @@ -6999,7 +7065,7 @@ snapshots: object-is@1.1.6: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 object-keys@1.1.1: {} @@ -7151,7 +7217,7 @@ snapshots: prelude-ls@1.2.1: {} - prettier@3.3.3: {} + prettier@3.4.2: {} pretty-format@29.7.0: dependencies: @@ -7161,10 +7227,10 @@ snapshots: process-nextick-args@2.0.1: {} - proj4@2.12.1: + proj4@2.15.0: dependencies: mgrs: 1.0.0 - wkt-parser: 1.3.3 + wkt-parser: 1.4.0 prompts@2.4.2: dependencies: @@ -7242,9 +7308,9 @@ snapshots: indent-string: 4.0.0 strip-indent: 3.0.0 - regexp.prototype.flags@1.5.2: + regexp.prototype.flags@1.5.3: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 es-errors: 1.3.0 set-function-name: 2.0.2 @@ -7320,8 +7386,8 @@ snapshots: define-data-property: 1.1.4 es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.4 - gopd: 1.0.1 + get-intrinsic: 1.2.6 + gopd: 1.2.0 has-property-descriptors: 1.0.2 set-function-name@2.0.2: @@ -7543,18 +7609,18 @@ snapshots: trim-newlines@3.0.1: {} - ts-jest@29.2.5(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@types/node@20.16.5)(typescript@5.6.2)))(typescript@5.6.2): + ts-jest@29.2.5(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2)))(typescript@5.7.2): dependencies: bs-logger: 0.2.6 ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.16.5)(ts-node@10.9.2(@types/node@20.16.5)(typescript@5.6.2)) + jest: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2)) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 semver: 7.6.3 - typescript: 5.6.2 + typescript: 5.7.2 yargs-parser: 21.1.1 optionalDependencies: '@babel/core': 7.25.2 @@ -7562,21 +7628,21 @@ snapshots: '@jest/types': 29.6.3 babel-jest: 29.7.0(@babel/core@7.25.2) - ts-node@10.9.2(@types/node@20.16.5)(typescript@5.6.2): + ts-node@10.9.2(@types/node@20.17.10)(typescript@5.7.2): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.16.5 + '@types/node': 20.17.10 acorn: 8.12.1 acorn-walk: 8.3.4 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.6.2 + typescript: 5.7.2 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 @@ -7584,12 +7650,12 @@ snapshots: tslib@2.7.0: {} - tsutils@3.21.0(typescript@5.6.2): + tsutils@3.21.0(typescript@5.7.2): dependencies: tslib: 1.14.1 - typescript: 5.6.2 + typescript: 5.7.2 - tsx@4.19.1: + tsx@4.19.2: dependencies: esbuild: 0.23.1 get-tsconfig: 4.8.1 @@ -7616,7 +7682,7 @@ snapshots: typedarray@0.0.6: {} - typescript@5.6.2: {} + typescript@5.7.2: {} uglify-js@3.19.3: optional: true @@ -7662,7 +7728,7 @@ snapshots: dependencies: isexe: 2.0.0 - wkt-parser@1.3.3: {} + wkt-parser@1.4.0: {} word-wrap@1.2.5: {} @@ -7707,7 +7773,7 @@ snapshots: yallist@4.0.0: {} - yaml@2.5.1: {} + yaml@2.6.1: {} yargs-parser@20.2.9: {} diff --git a/src/transformer/fields/typologies/name-to-typologie.ts b/src/transformer/fields/typologies/name-to-typologie.ts index b873848d..c290deda 100644 --- a/src/transformer/fields/typologies/name-to-typologie.ts +++ b/src/transformer/fields/typologies/name-to-typologie.ts @@ -4,21 +4,16 @@ import { Typologie } from '@gouvfr-anct/lieux-de-mediation-numerique'; import { TypologieMatcher } from './typologies.field'; export const TYPOLOGIE_MATCHERS: TypologieMatcher[] = [ - { - typologie: Typologie.MUNI, - matchers: [/mairie/iu, /commune/iu, /^ville d[eu]/iu, /h[oô]tel de ville/iu] - }, - { - typologie: Typologie.FT, - matchers: [/france travail/iu] - }, - { - typologie: Typologie.FT, - matchers: [/p[ôo]le emploi/iu] - }, { typologie: Typologie.BIB, - matchers: [/m[ée]diath[èeé]que/iu, /biblioth[èeé]que/iu] + matchers: [ + /m[ée]diath[èeé]que/iu, + /bibl?ioth[èeé]que/iu, + /Mediathquete/iu, + /Mediathque/iu, + /Médiathqèue/iu, + /Médiatthèque/iu + ] }, { typologie: Typologie.TIERS_LIEUX, @@ -28,17 +23,15 @@ export const TYPOLOGIE_MATCHERS: TypologieMatcher[] = [ typologie: Typologie.ML, matchers: [/mission locale/iu, /mis local/iu] }, - { - typologie: Typologie.MQ, - matchers: [/maison de quartier/iu] - }, { typologie: Typologie.MDS, matchers: [ + /(?:^|\W)MDSI?(?:\W|$)/iu, + /(?:^|\W)MSD(?:\W|$)/iu, /maison du d[ée]partement/iu, - /(?:maison|espace) d[eé]partementale? des solidarit[eé]s/iu, - /(?:maison|espace) d[eé]partementale? de la solidarit[ée]/iu, - /(?:maison|espace) de la solidarit[eé] d[eé]partementale/iu + /(?:maison|espace|centre) d[eé]partementale?s? des? (?:la )?solidarit[eé]s?/iu, + /(?:maison|espace|centre) d[eé]partementale?s? de proximit[eé]/iu, + /(?:maison|espace|centre) des? (?:la )?solidarit[eé]s? d[eé]partementale?s?/iu ] }, { @@ -51,15 +44,31 @@ export const TYPOLOGIE_MATCHERS: TypologieMatcher[] = [ }, { typologie: Typologie.CAF, - matchers: [/caisse d[’'\s]allocations familiales/iu] + matchers: [/caisse d[’'\s]allocations familiales/iu, /(?:^|\s)CAF(?:\s|@|$)/iu] + }, + { + typologie: Typologie.CADA, + matchers: [/CADA\s/iu] + }, + { + typologie: Typologie.CD, + matchers: [/^CON?SEIL DEP/iu, /CDAD/iu] + }, + { + typologie: Typologie.CDAS, + matchers: [/^CDAS(?:\s|$)/iu] + }, + { + typologie: Typologie.CFP, + matchers: [/Finances Publiques/iu, /Finances Public/iu] }, { typologie: Typologie.RS_FJT, matchers: [/(?:^|\W)FJT(?:\W|$)/iu] }, { - typologie: Typologie.PIJ_BIJ, - matchers: [/info(?:rmation)?s? jeune/iu, /(?:^|\W)PIJ(?:\W|$)/iu, /(?:^|\W)CRIJ(?:\W|$)/iu, /point accueil jeunesse/iu] + typologie: Typologie.ACI, + matchers: [/^ACI\s/iu, /Chantier d'Insertion/iu] }, { typologie: Typologie.ASSO, @@ -72,34 +81,234 @@ export const TYPOLOGIE_MATCHERS: TypologieMatcher[] = [ /croix[\s-]Rouge/iu, /secours catholique/iu, /restos du c(?:oe|œ)ur/iu, - /familles rurales/iu, + /familles? rurales?/iu, + /LIGUE (?:DE L[\s']|D')?ENSEIGNEMENT/iu, + /Konexio/iu, + /Groupe SOS/iu, + /APF\s/iu, + /ASSO\s/iu, + /associatif/iu, + /Coallia/iu, /(?:^|\W)AFR(?:\W|$)/iu ] }, - { - typologie: Typologie.CS, - matchers: [/centre social/iu, /centres sociaux/iu] - }, - { - typologie: Typologie.PREF, - matchers: [/sous[-\s]pr[ée]fecture/iu] - }, { typologie: Typologie.CD, matchers: [/conseil d[eé]partemental/iu] }, { typologie: Typologie.CC, - matchers: [/communaut[ée] de communes/iu, /(?:^|\W)cdc(?:\W|$)/iu, /(?:^|\W)cc(?:\W|$)/iu, /communaute com/iu] + matchers: [/^communaut[ée] des? com(?:munes?)?/iu, /^cdc(?:\W|$)/iu, /^cc(?:\W|$)/iu] }, { typologie: Typologie.CCAS, - matchers: [/(?:^|\W)ccas(?:\W|$)/iu, /ctre com action social/iu, /centre communal d[’'\s]action social/iu] + matchers: [ + /(?:^|\W)ccas(?:\W|$)/iu, + /(?:^|\W)c\.c\.a\.s(?:\W|$)/iu, + /c(?:en)?tr?e com(?:munal)? action social/iu, + /centre communal.? d[’'\s]action social/iu + ] + }, + { + typologie: Typologie.CCONS, + matchers: [/CONSULAT/iu] }, { typologie: Typologie.CIAS, matchers: [/(?:^|\W)CIAS(?:\W|$)/iu, /centre intercommunal d[’'\s]action sociale/iu] }, + { + typologie: Typologie.CIDFF, + matchers: [/(?:^|\W)CIDFF(?:\W|\d|$)/iu] + }, + { + typologie: Typologie.CITMET, + matchers: [/Cit[ée] de l'Emploi/iu, /CJM/iu, /Cit[ée] des M[ée]tiers/iu] + }, + { + typologie: Typologie.CMP, + matchers: [/(?:^|\W)CMP(?:\W|\d|$)/iu, /Centre Médico Psychologique/iu] + }, + { + typologie: Typologie.CMS, + matchers: [/^CMS(?:\s|$)/iu, /^PMS(?:\s|$)/iu, /(?:Centre|P[oô]le|Relais) m[ée]dic(?:o|aux)\WSocia(?:l|ux)/iu] + }, + { + typologie: Typologie.CPAM, + matchers: [/(?:^|\W)CPAM(?:\W|$)/iu, /CAISSE PRIMAIRE D?[' ]?ASSURANCE MALADIE/iu] + }, + { + typologie: Typologie.CPH, + matchers: [/(?:^|\W)CPH(?:\W|$)/iu] + }, + { + typologie: Typologie.CS, + matchers: [/(?:^|\W)CS(?:\W|$)/iu, /(?:espace|c(?:en)?tre) (?:socia(?:l|ux)|soc\W)/iu] + }, + { + typologie: Typologie.CSAPA, + matchers: [/(?:^|\W)CSAPA(?:\W|$)/iu] + }, + { + typologie: Typologie.CSC, + matchers: [ + /(?:^|\W)CSC(?:\W|$)/iu, + /soci(?:o|al)\W?cul?turel/iu, + /Sociale? et Culturel(?:le)?/iu, + /Culturel(?:le)? et Sociale?/iu, + /Centres? Culturels?/iu + ] + }, + { + typologie: Typologie.DEPT, + matchers: [/(?:^|\W)DPT(?:\W|$)/iu, /^D[ée]partement(?:\W|$)/iu] + }, + { + typologie: Typologie.E2C, + matchers: [/(?:^|\W)[ée]cole deuxième chance(?:\W|$)/iu] + }, + { + typologie: Typologie.EI, + matchers: [/(?:^|\W)EI(?:\W|$)/iu] + }, + { + typologie: Typologie.ENM, + matchers: [/(?:^|\W)Bus(?:\W|$)/iu] + }, + { + typologie: Typologie.EPI, + matchers: [/(?:^|\W)EPI(?:\W|$)/iu, /Espace Public (?:Internet|Informatique)/iu] + }, + { + typologie: Typologie.EPIDE, + matchers: [/(?:^|\W)EPIDE(?:\W|$)/iu] + }, + { + typologie: Typologie.EPN, + matchers: [ + /(?:^|\W)EPN(?:\W|$)/iu, + /(?:Espace|[ée]tablissement)s?(?: Publi(?:c|que))? (?:Multim[ée]dia|Num[ée]riques?)/iu, + /Cyber\W?(?:base|centre)/iu + ] + }, + { + typologie: Typologie.ES, + matchers: [/[ée]picerie (?:bar|sociale|solidaire)/iu] + }, + { + typologie: Typologie.ESAT, + matchers: [/(?:^|\W)ESAT(?:\W|$)/iu] + }, + { + typologie: Typologie.ESS, + matchers: [/[ée]conomique Social et Solidaire/iu] + }, + { + typologie: Typologie.EVS, + matchers: [/(?:^|\W)EVS(?:\W|$)/iu, /Espace de Vie Sociale/iu] + }, + { + typologie: Typologie.FABLAB, + matchers: [/(?:^|\W)FAB\W?(?:LAB|AT)(?:\W|$)/iu] + }, + { + typologie: Typologie.FT, + matchers: [/france travail/iu, /p[ôo]le emploi/iu] + }, + { + typologie: Typologie.GEIQ, + matchers: [/Groupement (?:local )?(?:d')?Employeurs/iu, /Groupement pour l'Insertion/iu] + }, + { + typologie: Typologie.LA_POSTE, + matchers: [/la\s?poste/iu, /poste\s/iu, /Agence (?:communale )?postale/iu, /Bureau de poste/iu] + }, + { + typologie: Typologie.MDE, + matchers: [/Maison de l'emploi/iu, /Maison de l'économie/iu] + }, + { + typologie: Typologie.MDH, + matchers: [/Maison des Habitant/iu] + }, + { + typologie: Typologie.MDPH, + matchers: [/(?:^|\W)MDPH(?:\W|$)/iu, /Maison D[ée]p(?:artementale des)? Personnes Handicap[ée]es/iu] + }, + { + typologie: Typologie.MJC, + matchers: [ + /(?:^|\W)MJC(?:\W|$)/iu, + /(?:^|\W)M\.J\.C(?:\W|$)/iu, + /maison (?:des? )?jeunes,? (?:et |& )?(?:de )?(?:la )?culture/iu + ] + }, + { + typologie: Typologie.MQ, + matchers: [/maison de quartier/iu] + }, + { + typologie: Typologie.MSAP, + matchers: [/(?:^|\W)MSAP(?:\W|$)/iu, /(?:Maison|Relais) des? Services?/iu] + }, + { + typologie: Typologie.MUNI, + matchers: [ + /(?:^|\W)Municipalité(?:\W|$)/iu, + /(?:^|\W)mairie(?:\W|$)/iu, + /(?:^|\W)maire(?:\W|$)/iu, + /^commune(?:\W|$)/iu, + /^CA\s/iu, + /\sAgglo(?:m[ée]ration)?$/iu, + /Agglom[ée]ration d/iu, + /Communaut[ée] (?:d\W)?Agglom[ée]ration/iu, + /^ville d[eu]/iu, + /h[oô]tel de ville/iu + ] + }, + { + typologie: Typologie.PAD, + matchers: [/Accès au Droit/iu] + }, + { + typologie: Typologie.PI, + matchers: [/Point d'information/iu, /Point Info/iu] + }, + { + typologie: Typologie.PIJ_BIJ, + matchers: [ + /(?:^|\W)BIJ(?:\W|$)/iu, + /info(?:rmation)?s? jeune/iu, + /(?:^|\W)PIJ(?:\W|$)/iu, + /(?:^|\W)CRIJ(?:\W|$)/iu, + /point accueil jeunesse/iu, + /Espace jeune/iu + ] + }, + { + typologie: Typologie.PIMMS, + matchers: [/(?:^|\W)PIMMS(?:\W|$)/iu, /point information mediation multi services/iu] + }, + { + typologie: Typologie.PLIE, + matchers: [/^PLIE(?:\W|$)/iu] + }, + { + typologie: Typologie.PREF, + matchers: [/^Pr[ée]fecture/iu, /^sous[-\s]pr[ée]fecture/iu] + }, + { + typologie: Typologie.REG, + matchers: [/^R[ée]gion/iu] + }, + { + typologie: Typologie.RESSOURCERIE, + matchers: [/Ressourcerie/iu] + }, + { + typologie: Typologie.UDAF, + matchers: [/(?:^|\W)UDAF(?:\W|\d|$)/iu] + }, { typologie: Typologie.AFPA, matchers: [/(?:^|\W)AFPA(?:\W|$)/iu] @@ -108,10 +317,6 @@ export const TYPOLOGIE_MATCHERS: TypologieMatcher[] = [ typologie: Typologie.CHRS, matchers: [/(?:^|\W)CHRS(?:\W|$)/iu] }, - { - typologie: Typologie.MJC, - matchers: [/(?:^|\W)MJC(?:\W|$)/iu, /maison des jeunes (?:et )?de la culture/iu] - }, { typologie: Typologie.MDE, matchers: [/(?:^|\W)MDE(?:\W|$)/iu, /maison[\w\s',]+de l[’'\s]emploi/iu] @@ -142,9 +347,5 @@ export const TYPOLOGIE_MATCHERS: TypologieMatcher[] = [ /Folschviller - Antenne de L'H[ôo]pital/iu, /Communaut[eé] de communes Vaison Ventoux/iu ] - }, - { - typologie: Typologie.PIMMS, - matchers: [/(?:^|\W)PIMMS(?:\W|$)/iu, /point information mediation multi services/iu] } ]; diff --git a/src/transformer/fields/typologies/typologies.field.spec.ts b/src/transformer/fields/typologies/typologies.field.spec.ts index 1b3136b9..51cd2772 100644 --- a/src/transformer/fields/typologies/typologies.field.spec.ts +++ b/src/transformer/fields/typologies/typologies.field.spec.ts @@ -35,23 +35,744 @@ describe('typologies field', (): void => { expect(typologies).toStrictEqual([Typologie.BIB]); }); - it('should get Bib even if the typo of mediathèque is not good', (): void => { + it.each([['bibliothéque'], ['médiathéque'], ['Bibiothèque'], ['Mediathquete'], ['Médiathqèue'], ['Médiatthèque']])( + 'should get BIB when name contains %s', + (nom: string): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: nom }, matching); + + expect(typologies).toStrictEqual([Typologie.BIB]); + } + ); + + it.each([['CAF'], ['Caf du Nord'], ['Caf@Arras'], ['Relais CAF'], ["Caisse d'Allocations Familiales"]])( + 'should get CAF when name contains %s', + (nom: string): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: nom }, matching); + + expect(typologies).toStrictEqual([Typologie.CAF]); + } + ); + + it('should get CADA when name starts with CADA', (): void => { const matching: LieuxMediationNumeriqueMatching = { nom: { colonne: 'name' } } as LieuxMediationNumeriqueMatching; - const typologies: Typologies = processTypologies({ name: 'médiathéque' }, matching); + const typologies: Typologies = processTypologies({ name: 'CADA / HUDA' }, matching); - expect(typologies).toStrictEqual([Typologie.BIB]); + expect(typologies).toStrictEqual([Typologie.CADA]); }); - it('should get Bib even if the typo of bibliothèque is not good', (): void => { + it.each([ + ['CCAS - Rochefort-sur-Loire'], + ['C.C.A.S. ORCHIES'], + ["Centre Communal d'Action Sociale"], + ["Centre Communale d'Action Sociale de la ville de Chelles"], + ['CTE COM ACTION SOCIALE'], + ["CTRE COMMUNAL ACTION SOCIALE D'HOUPLINES"], + ['CENTRE COMMUNAL ACTION SOCIALE MILLAS'] + ])('should get CCAS when name contains %s', (nom: string): void => { const matching: LieuxMediationNumeriqueMatching = { nom: { colonne: 'name' } } as LieuxMediationNumeriqueMatching; - const typologies: Typologies = processTypologies({ name: 'bibliothéque' }, matching); + const typologies: Typologies = processTypologies({ name: nom }, matching); - expect(typologies).toStrictEqual([Typologie.BIB]); + expect(typologies).toStrictEqual([Typologie.CCAS]); + }); + + it.each([["CONSEIL DEP DE L'ACCES AU DROIT"], ['COSEIL DEPATEMENTAL DES YVELINES SERVICE MNA'], ['CDAD Ardennes']])( + 'should get CD when name contains %s', + (nom: string): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: nom }, matching); + + expect(typologies).toStrictEqual([Typologie.CD]); + } + ); + + it.each([['CIAS le phare', "Centre intercommunal d'actions sociales du Pays de Craon"]])( + 'should get CIAS when name contains %s', + (nom: string): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: nom }, matching); + + expect(typologies).toStrictEqual([Typologie.CIAS]); + } + ); + + it.each([['CIDFF'], ['CIDFF62']])('should get CIDFF when name contains %s', (nom: string): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: nom }, matching); + + expect(typologies).toStrictEqual([Typologie.CIDFF]); + }); + + it.each([ + ["Cité de l'emploi de Limoges"], + ['Cité de la Jeunesse & des Métiers (CJM)'], + ['Cite des Metiers'], + ['Cité des Métiers - Centre associé'] + ])('should get CITMET when name contains %s', (nom: string): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: nom }, matching); + + expect(typologies).toStrictEqual([Typologie.CITMET]); + }); + + it.each([['Centre Médico Psychologique de Loudéac'], ['CMP Paul Guiraud']])( + 'should get CMP when name contains %s', + (nom: string): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: nom }, matching); + + expect(typologies).toStrictEqual([Typologie.CMP]); + } + ); + + it.each([ + ['CMS Agen Louis Vivent'], + ['CMS'], + ['Centre Médico Social'], + ['CENTRE MEDICO SOCIAL BRIONNE'], + ['Centre médico-social'], + ['CMS- Centre Medicaux Sociaux'], + ['PMS Cran-Gevrier'], + ['POLE MEDICO-SOCIAL DE CHAMONIX'], + ['Pôle Médico-Social Balmettes'], + ["Relais médico-social d'Alby-sur-Chéran"] + ])('should get CMP when name contains %s', (nom: string): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: nom }, matching); + + expect(typologies).toStrictEqual([Typologie.CMS]); + }); + + it.each([ + ["Accueil CAISSE PRIMAIRE D'ASSURANCE MALADIE DE LA LOIRE"], + ['CAISSE PRIMAIRE ASSURANCE MALADIE'], + ['CAISSE PRIMAIRE D ASSURANCE MALADIE - CPAM - DES LANDES'], + ['CPAM'], + ['CPAM - Agence de Cholet'], + ["Point d'accueil CPAM Guémené-Penfao"] + ])('should get CPAM when name contains %s', (nom: string): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: nom }, matching); + + expect(typologies).toStrictEqual([Typologie.CPAM]); + }); + + it.each([['CPH - lab Fraternel']])('should get CPH when name contains %s', (nom: string): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: nom }, matching); + + expect(typologies).toStrictEqual([Typologie.CPH]); + }); + + it.each([ + ['CENTRE SOC FAMILIAL ST GABRIEL'], + ['CENTRE SOCIAL DE BAGATELLE'], + ['CTRE SOCIAL ESPACE ST GILLES'], + ['CS Capelette'], + ['Espace Social Commun Blosne'] + ])('should get CS when name contains %s', (nom: string): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: nom }, matching); + + expect(typologies).toStrictEqual([Typologie.CS]); + }); + + it.each([['CSAPA']])('should get CSAPA when name contains %s', (nom: string): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: nom }, matching); + + expect(typologies).toStrictEqual([Typologie.CSAPA]); + }); + + it.each([ + ["amej centre d'animation socioculturel"], + ['Artémis, centre socio-culturel'], + ['Centre Animation Sociale et Culturelle'], + ['Centre Culturel'], + ['Centre socio culturel'], + ['Centre Socioculturel'], + ['Centre Sociocuturel Manu 4'], + ['Centres Culturels Municipaux de Limoges'], + ['CSC Europe - COLOMBES'], + ['ESPACE SOCIAL CULTUREL CROIX DES OISEAUX'], + ['Espace social et culturel AFEL'], + ['FOYER CULTUREL ET SOCIAL JACQUES PELLETIER'] + ])('should get CSC when name contains %s', (nom: string): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: nom }, matching); + + expect(typologies).toContain(Typologie.CSC); + }); + + it.each([ + ['Département'], + ['Departement 64'], + ['DEPARTEMENT DE COTE D OR'], + ["DPT de la Vienne - Direction de l'Action Sociale"] + ])('should get DEPT when name contains %s', (nom: string): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: nom }, matching); + + expect(typologies).toStrictEqual([Typologie.DEPT]); + }); + + it('should get E2C when name contains Ecole deuxième chance', (): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: 'Ecole deuxième chance Grand Lille' }, matching); + + expect(typologies).toStrictEqual([Typologie.E2C]); + }); + + it('should get EI when name contains EI', (): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: 'EI Girard Hervé - mon assistant numérique' }, matching); + + expect(typologies).toStrictEqual([Typologie.EI]); + }); + + it('should get ENM when name contains Bus', (): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: "Bus It'In" }, matching); + + expect(typologies).toStrictEqual([Typologie.ENM]); + }); + + it.each([['EPI'], ['Espace Public Internet Gagarine'], ['Espace Public Informatique Monmousseau']])( + 'should get EPI when name contains %s', + (nom: string): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: nom }, matching); + + expect(typologies).toStrictEqual([Typologie.EPI]); + } + ); + + it('should get EPIDE when name contains EPIDE', (): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: 'EPIDE' }, matching); + + expect(typologies).toStrictEqual([Typologie.EPIDE]); + }); + + it.each([ + ['EPN'], + ['Arobase Espace Public Multimédia'], + ['Cyber base'], + ['Cyber-base'], + ['Cyberbase'], + ['Cyber Centre'], + ['Espace Multimédia'], + ['Espace Numérique'], + ['ESPACE NUMERIQUE DE LA PASSERELLE'], + ['Espace Publique Numérique'], + ['Espaces Numériques Ville de Fort de France'], + ['Etablissement public numérique'] + ])('should get EPN when name contains %s', (nom: string): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: nom }, matching); + + expect(typologies).toStrictEqual([Typologie.EPN]); + }); + + it.each([['Epicerie Bar'], ['Epicerie sociale'], ['Epicerie solidaire']])( + 'should get ES when name contains %s', + (nom: string): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: nom }, matching); + + expect(typologies).toStrictEqual([Typologie.ES]); + } + ); + + it.each([['ESAT']])('should get ESAT when name contains %s', (nom: string): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: nom }, matching); + + expect(typologies).toStrictEqual([Typologie.ESAT]); + }); + + it('should get ESS when name contains Economique Social et Solidaire', (): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies( + { name: 'La Belle Créole Fédération du Lien Economique Social et Solidaire' }, + matching + ); + + expect(typologies).toStrictEqual([Typologie.ESS]); + }); + + it.each([['EVS'], ['Espace de Vie Sociale']])('should get EVS when name contains %s', (nom: string): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: nom }, matching); + + expect(typologies).toStrictEqual([Typologie.EVS]); + }); + + it.each([['Fablab'], ['Fab Lab'], ["FAB'AT"]])('should get FABLAB when name contains %s', (nom: string): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: nom }, matching); + + expect(typologies).toStrictEqual([Typologie.FABLAB]); + }); + + it.each([['Pôle emploi'], ['Pole Emploi Blaye']])('should get FT when name contains %s', (nom: string): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: nom }, matching); + + expect(typologies).toStrictEqual([Typologie.FT]); + }); + + it.each([ + ["GROUPEMENT D'EMPLOYEURS SIAE 30 GE SIAE 30"], + ["Groupement Local Employeurs d'Agents de Médiation"], + ["Groupement pour l'Insertion & l'Evolution Professionnelles - GIEP NC"] + ])('should get GEIQ when name contains %s', (nom: string): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: nom }, matching); + + expect(typologies).toStrictEqual([Typologie.GEIQ]); + }); + + it.each([['la poste'], ['Agence Communale Postale'], ['Agence Postale'], ['Bureau de poste']])( + 'should get LA_POSTE when name contains %s', + (nom: string): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: nom }, matching); + + expect(typologies).toStrictEqual([Typologie.LA_POSTE]); + } + ); + + it.each([["Maison de l'emploi"], ["Maison de l'économie"]])('should get MDE when name contains %s', (nom: string): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: nom }, matching); + + expect(typologies).toStrictEqual([Typologie.MDE]); + }); + + it.each([['Maison des Habitants Abbaye'], ['Maison des Habitant.es Anatole France']])( + 'should get MDH when name contains %s', + (nom: string): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: nom }, matching); + + expect(typologies).toStrictEqual([Typologie.MDH]); + } + ); + + it.each([['MDPH 32'], ['GIP MAISON DEP PERSONNES HANDICAPEES'], ['Maison Départementale des Personnes Handicapées']])( + 'should get MDPH when name contains %s', + (nom: string): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: nom }, matching); + + expect(typologies).toStrictEqual([Typologie.MDPH]); + } + ); + + it.each([ + ['MDS'], + ['Antenne MSD de Lalbenque'], + ['MDSI CHAULNES'], + ['Centre Départemental de la Solidarité Ambroise Paré'], + ['CENTRE DEPARTEMENTAL DE LA SOLIDARITE'], + ['Maison de la Solidarité Départementale de Mauriac'], + ['Maison départementale de proximité de Cadours'], + ['Maison Départementale de Solidarité de Blaye'], + ['Maison Départementales des Solidarités de DECAZEVILLE'], + ['Maison Des Solidarités Départementales'] + ])('should get MSD when name contains %s', (nom: string): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: nom }, matching); + + expect(typologies).toStrictEqual([Typologie.MDS]); + }); + + it.each([ + ['MJC'], + ['M.J.C'], + ['MAISON DE JEUNES ET LA CULTURE pays de QUINTIN'], + ["Maison des jeunes, de la culture et d'animation de la Vie Sociale de Saint-Lys"], + ['MAISON JEUNES & CULTURE'] + ])('should get MJC when name contains %s', (nom: string): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: nom }, matching); + + expect(typologies).toStrictEqual([Typologie.MJC]); + }); + + it.each([['Maison de quartier']])('should get MQ when name contains %s', (nom: string): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: nom }, matching); + + expect(typologies).toStrictEqual([Typologie.MQ]); + }); + + it.each([ + ['Maison des Services'], + ['Maison de Services'], + ['La Maison des Services publics'], + ['Maison de service au public - Guenrouët'], + ['Maison de Services Au Public'], + ['MSAP'], + ['Relais de services au public'] + ])('should get MSAP when name contains %s', (nom: string): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: nom }, matching); + + expect(typologies).toStrictEqual([Typologie.MSAP]); + }); + + it.each([ + ['Mairie de Saint Alban'], + ['Maire'], + ['Agglomération du Choletais'], + ['Commune de Ventiseri'], + ["CA D'EPINAL"], + ['CARCASSONNE AGGLO'], + ['Communauté Agglomération La Rochelle'], + ["Communauté d'Agglomération Bergeracoise"], + ['CONCARNEAU CORNOUAILLE AGGLOMERATION'], + ["Municipalité d'Annay"] + ])('should get MUNI when name contains %s', (nom: string): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: nom }, matching); + + expect(typologies).toStrictEqual([Typologie.MUNI]); + }); + + it.each([["Point d'Accès au Droit"], ['Accès au Droit Nord Morbihan']])( + 'should get PAD when name contains %s', + (nom: string): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: nom }, matching); + + expect(typologies).toStrictEqual([Typologie.PAD]); + } + ); + + it.each([["Point d'information ISOLA", 'Point Info 14']])('should get PI when name contains %s', (nom: string): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: nom }, matching); + + expect(typologies).toStrictEqual([Typologie.PI]); + }); + + it.each([['BIJ'], ['Bureau Information Jeunesse de Belfort'], ["Centre d'Information Jeunesse de Vesoul"], ['Espace jeune']])( + 'should get PIJ_BIJ when name contains %s', + (nom: string): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: nom }, matching); + + expect(typologies).toStrictEqual([Typologie.PIJ_BIJ]); + } + ); + + it('should get PIMMS when name contains PIMMS', (): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: 'PIMMS médiation Isère' }, matching); + + expect(typologies).toStrictEqual([Typologie.PIMMS]); + }); + + it('should get PLIE when name contains PLIE', (): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: 'PLIE de Colombes' }, matching); + + expect(typologies).toStrictEqual([Typologie.PLIE]); + }); + + it.each([['Préfecture'], ['Prefecture de la Vienne'], ["Sous-préfecture - Point d'accueil numérique"]])( + 'should get PREF when name contains %s', + (nom: string): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: nom }, matching); + + expect(typologies).toStrictEqual([Typologie.PREF]); + } + ); + + it('should get REG when name contains Région', (): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: 'Région Occitanie' }, matching); + + expect(typologies).toStrictEqual([Typologie.REG]); + }); + + it('should get RESSOURCERIE when name contains Ressourcerie', (): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: 'Ressourcerie' }, matching); + + expect(typologies).toStrictEqual([Typologie.RESSOURCERIE]); + }); + + it('should get UDAF when name contains UDAF', (): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: 'UDAF93' }, matching); + + expect(typologies).toStrictEqual([Typologie.UDAF]); + }); + + it.each([['CDAS de Combourg']])('should get CDAS when name contains %s', (nom: string): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: nom }, matching); + + expect(typologies).toStrictEqual([Typologie.CDAS]); + }); + + it.each([ + ['Communauté de Commune de la Dombes'], + ['Communauté de Communes Anjou Loir et Sarthe'], + ["Communauté des Communes Rurales de l'Entre-2-Mers"] + ])('should get CC when name contains %s', (nom: string): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: nom }, matching); + + expect(typologies).toStrictEqual([Typologie.CC]); + }); + + it('should get CCONS when name contains CONSULAT', (): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: 'CONSULAT GENERAL DE FRANCE A LOS ANGELES' }, matching); + + expect(typologies).toStrictEqual([Typologie.CCONS]); + }); + + it.each([['Finances Publiques'], ['Centre des Finances Public de Cholet']])( + 'should get CFP when name contains %s', + (nom: string): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: nom }, matching); + + expect(typologies).toStrictEqual([Typologie.CFP]); + } + ); + + it('should get LA_POSTE when name contains LaPoste', (): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: 'laposte' }, matching); + + expect(typologies).toStrictEqual([Typologie.LA_POSTE]); + }); + + it('should get LA_POSTE when name contains poste', (): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: 'Poste Oyonnax' }, matching); + + expect(typologies).toStrictEqual([Typologie.LA_POSTE]); + }); + + it('should get ACI when name starts with ACI', (): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: 'ACI du Vallespir' }, matching); + + expect(typologies).toStrictEqual([Typologie.ACI]); + }); + + it("should get ACI when name contains Chantier d'Insertion", (): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: "Chantier d'Insertion" }, matching); + + expect(typologies).toStrictEqual([Typologie.ACI]); + }); + + it.each([ + ['LIGUE DE L ENSEIGNEMENT'], + ["LIGUE DE L'ENSEIGNEMENT"], + ["LIGUE D'ENSEIGNEMENT"], + ['Konexio'], + ['Groupe SOS'], + ['APF France handicap'], + ['Familles Rurales'], + ['ASSO DU PAYS DES SEPT RIVIERES'], + ['Association Osez'], + ['Blue Fox Coffee - café associatif'], + ['Coallia'], + ['FAMILLE RURALE'], + ['LIGUE ENSEIGNEMENT TARN GARONNE'] + ])('should get ASSO when name contains %s', (nom: string): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: nom }, matching); + + expect(typologies).toStrictEqual([Typologie.ASSO]); + }); + + it('should find multiple typologies from name', (): void => { + const matching: LieuxMediationNumeriqueMatching = { + nom: { colonne: 'name' } + } as LieuxMediationNumeriqueMatching; + + const typologies: Typologies = processTypologies({ name: 'CPAM / CAF du Gers' }, matching); + + expect(typologies).toStrictEqual([Typologie.CAF, Typologie.CPAM]); }); }); diff --git a/src/transformer/fields/typologies/typologies.field.ts b/src/transformer/fields/typologies/typologies.field.ts index d3765816..aef3020f 100644 --- a/src/transformer/fields/typologies/typologies.field.ts +++ b/src/transformer/fields/typologies/typologies.field.ts @@ -54,13 +54,18 @@ const toTypologieMatchingName = (source: DataSource, matching: LieuxMediationNumeriqueMatching) => (typologies: Typologies, typologieMatcher: TypologieMatcher): Typologies => typologieMatcher.matchers.reduce(matchWithName(source, matching), false) - ? Typologies([typologieMatcher.typologie]) + ? Typologies(Array.from(new Set([...typologies, typologieMatcher.typologie]))) : typologies; const inferTypologies = (source: DataSource, matching: LieuxMediationNumeriqueMatching): Typologies => - processDispositifProgrammeNationaux(source, matching).includes(DispositifProgrammeNational.FranceServices) - ? Typologies([Typologie.RFS]) - : TYPOLOGIE_MATCHERS.reduce(toTypologieMatchingName(source, matching), Typologies([])); + TYPOLOGIE_MATCHERS.reduce( + toTypologieMatchingName(source, matching), + Typologies( + processDispositifProgrammeNationaux(source, matching).includes(DispositifProgrammeNational.FranceServices) + ? [Typologie.RFS] + : [] + ) + ); const checkingTypologieSourceValues = (source: DataSource, matching: LieuxMediationNumeriqueMatching): boolean[] | undefined => matching.typologie?.map(