diff --git a/lib/FredyPipelineExecutioner.js b/lib/FredyPipelineExecutioner.js index 27b0db3..5822106 100755 --- a/lib/FredyPipelineExecutioner.js +++ b/lib/FredyPipelineExecutioner.js @@ -4,7 +4,11 @@ */ import { NoNewListingsWarning } from './errors.js'; -import { storeListings, getKnownListingHashesForJobAndProvider } from './services/storage/listingsStorage.js'; +import { + storeListings, + getKnownListingHashesForJobAndProvider, + deleteListingsById, +} from './services/storage/listingsStorage.js'; import { getJob } from './services/storage/jobStorage.js'; import * as notify from './notification/notify.js'; import Extractor from './services/extractor/extractor.js'; @@ -131,8 +135,9 @@ class FredyPipelineExecutioner { return newListings; } + const filteredIds = []; // Filter listings by area - keep only those within the polygon - const filteredListings = newListings.filter((listing) => { + const keptListings = newListings.filter((listing) => { // If listing doesn't have coordinates, keep it (don't filter out) if (listing.latitude == null || listing.longitude == null) { return true; @@ -142,10 +147,18 @@ class FredyPipelineExecutioner { const point = [listing.longitude, listing.latitude]; // GeoJSON format: [lon, lat] const isInPolygon = polygonFeatures.some((feature) => booleanPointInPolygon(point, feature)); + if (!isInPolygon) { + filteredIds.push(listing.id); + } + return isInPolygon; }); - return filteredListings; + if (filteredIds.length > 0) { + deleteListingsById(filteredIds); + } + + return keptListings; } /** @@ -287,7 +300,8 @@ class FredyPipelineExecutioner { * @returns {Listing[]} Listings considered unique enough to keep. */ _filterBySimilarListings(listings) { - return listings.filter((listing) => { + const filteredIds = []; + const keptListings = listings.filter((listing) => { const similar = this._similarityCache.checkAndAddEntry({ title: listing.title, address: listing.address, @@ -297,9 +311,16 @@ class FredyPipelineExecutioner { logger.debug( `Filtering similar entry for title '${listing.title}' and address '${listing.address}' (Provider: '${this._providerId}')`, ); + filteredIds.push(listing.id); } return !similar; }); + + if (filteredIds.length > 0) { + deleteListingsById(filteredIds); + } + + return keptListings; } /** diff --git a/package.json b/package.json index 2c635a3..3efa3fb 100755 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fredy", - "version": "19.5.2", + "version": "19.6.0", "description": "[F]ind [R]eal [E]states [d]amn eas[y].", "scripts": { "prepare": "husky", @@ -60,9 +60,9 @@ "Firefox ESR" ], "dependencies": { - "@douyinfe/semi-icons": "^2.91.0", - "@douyinfe/semi-ui": "2.91.0", - "@douyinfe/semi-ui-19": "^2.91.0", + "@douyinfe/semi-icons": "^2.92.2", + "@douyinfe/semi-ui": "2.92.2", + "@douyinfe/semi-ui-19": "^2.92.2", "@mapbox/mapbox-gl-draw": "^1.5.1", "@sendgrid/mail": "8.1.6", "@vitejs/plugin-react": "5.1.4", @@ -71,18 +71,18 @@ "body-parser": "2.2.2", "chart.js": "^4.5.1", "cheerio": "^1.2.0", - "@turf/boolean-point-in-polygon": "^7.0.0", + "@turf/boolean-point-in-polygon": "^7.3.4", "cookie-session": "2.1.1", "handlebars": "4.7.8", "lodash": "4.17.23", - "maplibre-gl": "^5.18.0", + "maplibre-gl": "^5.19.0", "nanoid": "5.1.6", "node-cron": "^4.2.1", "node-fetch": "3.3.2", "node-mailjet": "6.0.11", "p-throttle": "^8.1.0", "package-up": "^5.0.0", - "puppeteer": "^24.37.3", + "puppeteer": "^24.38.0", "puppeteer-extra": "^3.3.6", "puppeteer-extra-plugin-stealth": "^2.11.2", "query-string": "9.3.1", @@ -90,9 +90,9 @@ "react-chartjs-2": "^5.3.1", "react-dom": "19.2.4", "react-range-slider-input": "^3.3.2", - "react-router": "7.13.0", - "react-router-dom": "7.13.0", - "resend": "^6.9.2", + "react-router": "7.13.1", + "react-router-dom": "7.13.1", + "resend": "^6.9.3", "restana": "5.1.0", "semver": "^7.7.4", "serve-static": "2.2.1", @@ -109,17 +109,17 @@ "@eslint/js": "^10.0.1", "chai": "6.2.2", "chalk": "^5.6.2", - "eslint": "10.0.0", + "eslint": "10.0.3", "eslint-config-prettier": "10.1.8", "eslint-plugin-react": "7.37.5", "esmock": "2.7.3", - "globals": "^17.3.0", + "globals": "^17.4.0", "history": "5.3.0", "husky": "9.1.7", "less": "4.5.1", - "lint-staged": "16.2.7", + "lint-staged": "16.3.2", "mocha": "11.7.5", - "nodemon": "^3.1.11", + "nodemon": "^3.1.14", "prettier": "3.8.1" } } diff --git a/test/mocks/mockStore.js b/test/mocks/mockStore.js index 27dc60e..213fee3 100644 --- a/test/mocks/mockStore.js +++ b/test/mocks/mockStore.js @@ -24,4 +24,8 @@ export function getUserSettings(userId) { export const updateListingDistance = (id, distance) => { // noop }; +export const deletedIds = []; +export const deleteListingsById = (ids) => { + deletedIds.push(...ids); +}; /* eslint-enable no-unused-vars */ diff --git a/test/pipeline_filtering.test.js b/test/pipeline_filtering.test.js new file mode 100644 index 0000000..aae6704 --- /dev/null +++ b/test/pipeline_filtering.test.js @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2026 by Christian Kellner. + * Licensed under Apache-2.0 with Commons Clause and Attribution/Naming Clause + */ + +import { expect } from 'chai'; +import { mockFredy } from './utils.js'; +import * as mockStore from './mocks/mockStore.js'; + +describe('Issue reproduction: listings filtered by similarity or area should be marked as manually deleted', () => { + it('should call deleteListingsById when listings are filtered by similarity', async () => { + const Fredy = await mockFredy(); + + const mockSimilarityCache = { + checkAndAddEntry: () => true, // always similar + }; + + const providerConfig = { + url: 'http://example.com', + getListings: () => Promise.resolve([{ id: '1', title: 'test', address: 'addr', price: '100' }]), + normalize: (l) => l, + filter: () => true, + crawlFields: { id: 'id', title: 'title', address: 'address', price: 'price' }, + }; + + const fredy = new Fredy(providerConfig, null, null, 'test-provider', 'test-job', mockSimilarityCache); + + // Clear deletedIds before test + mockStore.deletedIds.length = 0; + + try { + await fredy.execute(); + } catch { + // Might throw NoNewListingsWarning if all are filtered out + } + + expect(mockStore.deletedIds).to.include('1'); + }); + + it('should call deleteListingsById when listings are filtered by area', async () => { + const Fredy = await mockFredy(); + + const mockSimilarityCache = { + checkAndAddEntry: () => false, // never similar + }; + + const spatialFilter = { + features: [ + { + type: 'Feature', + geometry: { + type: 'Polygon', + coordinates: [ + [ + [0, 0], + [0, 1], + [1, 1], + [1, 0], + [0, 0], + ], + ], + }, + }, + ], + }; + + const providerConfig = { + url: 'http://example.com', + getListings: () => + Promise.resolve([{ id: '2', title: 'test', address: 'addr', price: '100', latitude: 2, longitude: 2 }]), // outside polygon + normalize: (l) => l, + filter: () => true, + crawlFields: { id: 'id', title: 'title', address: 'address', price: 'price' }, + }; + + const fredy = new Fredy(providerConfig, null, spatialFilter, 'test-provider', 'test-job', mockSimilarityCache); + + // Clear deletedIds before test + mockStore.deletedIds.length = 0; + + try { + await fredy.execute(); + } catch { + // Might throw NoNewListingsWarning if all are filtered out + } + + expect(mockStore.deletedIds).to.include('2'); + }); +}); diff --git a/yarn.lock b/yarn.lock index 10204c1..55c5b96 100644 --- a/yarn.lock +++ b/yarn.lock @@ -904,34 +904,34 @@ dependencies: tslib "^2.0.0" -"@douyinfe/semi-animation-react@2.91.0": - version "2.91.0" - resolved "https://registry.yarnpkg.com/@douyinfe/semi-animation-react/-/semi-animation-react-2.91.0.tgz#b5f6bf54866751958ad9c00ccbca1bae2230e7af" - integrity sha512-fnUcGcTYBLvHxbzDdN3cK1f81dQ5JFyon3VKwEdduPQVKdDKeRCVyEOgzB+nAWoIme0/M5k3x5n/XunqSwtbIA== +"@douyinfe/semi-animation-react@2.92.2": + version "2.92.2" + resolved "https://registry.yarnpkg.com/@douyinfe/semi-animation-react/-/semi-animation-react-2.92.2.tgz#733a51ca8eac16b988ea3ac497a54f325ec99793" + integrity sha512-jO9zplm+he2bGSa93v6lIgvu1g86IGhd2vsfcOZJ+MToj6rUax309Zh1Dll1pF0PZPwMeGt5kCL31+dx5vB3GA== dependencies: - "@douyinfe/semi-animation" "2.91.0" - "@douyinfe/semi-animation-styled" "2.91.0" + "@douyinfe/semi-animation" "2.92.2" + "@douyinfe/semi-animation-styled" "2.92.2" classnames "^2.2.6" -"@douyinfe/semi-animation-styled@2.91.0": - version "2.91.0" - resolved "https://registry.yarnpkg.com/@douyinfe/semi-animation-styled/-/semi-animation-styled-2.91.0.tgz#75b83f556155ab782ab31afe8acf887b967c3709" - integrity sha512-7p79wtHNrDqKlcU0ZWLag8uYogyg3Ao5dy52bMvJrkshVjeWIQZKSxhkGLdtDE3DnJ3eaVEpAChXYrSSs9qO+g== +"@douyinfe/semi-animation-styled@2.92.2": + version "2.92.2" + resolved "https://registry.yarnpkg.com/@douyinfe/semi-animation-styled/-/semi-animation-styled-2.92.2.tgz#08ddf93765f23b9eb5b41ef8b95e0b5a161752af" + integrity sha512-NslE/t9CFC6zXTaor2/7kq+MIKU2FEMbmhNxNmEezIghD/FVgFvG224QDaT1i7WfZgOldoAEmu8ILn6Rgnw+uA== -"@douyinfe/semi-animation@2.91.0": - version "2.91.0" - resolved "https://registry.yarnpkg.com/@douyinfe/semi-animation/-/semi-animation-2.91.0.tgz#1e7488a6647c38694e08f7b9fdd38c99e45759c7" - integrity sha512-BxEi4BfUqRt26JkgGslOPUXOlsZ+KsaRyqVIGL+fFc3FsH621T75vQEoFfh/3a6k+zlrnFZVGgnz5GTeneS24w== +"@douyinfe/semi-animation@2.92.2": + version "2.92.2" + resolved "https://registry.yarnpkg.com/@douyinfe/semi-animation/-/semi-animation-2.92.2.tgz#a4e8607641a6d44a2fa8fac81ed046420025186a" + integrity sha512-5zYyzSDQqYByPehUZoJ9SuxbsEh62RJnWcwCP7VlYhE6cpior6KnlKcwtpGO0nuOo6o4LWS+TRuC0CGwBpkn5w== dependencies: bezier-easing "^2.1.0" -"@douyinfe/semi-foundation@2.91.0": - version "2.91.0" - resolved "https://registry.yarnpkg.com/@douyinfe/semi-foundation/-/semi-foundation-2.91.0.tgz#d7e80d3ec73d62948f983496e7074dd333fdd503" - integrity sha512-/8b3ce7zWsOPQUtz3wPqU5At7I8fNwgTrt7B4Rld3qZQ9XgxwnUMwaWPRgmJzI8BbHOG/TiCYAZp0iviLOzYAA== +"@douyinfe/semi-foundation@2.92.2": + version "2.92.2" + resolved "https://registry.yarnpkg.com/@douyinfe/semi-foundation/-/semi-foundation-2.92.2.tgz#768aaf3548408cf29ad7a59877915d9b9d9da774" + integrity sha512-+enk5B1gUKA3uuXm6J3xj6l039aAgESbL91uixS6rOcUkOyaebglxJ0nuAxGFsslOcOUo0Kf/Z5kz64fTO1Y8Q== dependencies: - "@douyinfe/semi-animation" "2.91.0" - "@douyinfe/semi-json-viewer-core" "2.91.0" + "@douyinfe/semi-animation" "2.92.2" + "@douyinfe/semi-json-viewer-core" "2.92.2" "@mdx-js/mdx" "^3.0.1" async-validator "^3.5.0" classnames "^2.2.6" @@ -945,44 +945,44 @@ remark-gfm "^4.0.0" scroll-into-view-if-needed "^2.2.24" -"@douyinfe/semi-icons@2.91.0", "@douyinfe/semi-icons@^2.91.0": - version "2.91.0" - resolved "https://registry.yarnpkg.com/@douyinfe/semi-icons/-/semi-icons-2.91.0.tgz#9dc5161280b19eae2ba62c3531325e9d220c4a90" - integrity sha512-ZqYUzTIFzLcQyo7no6DfeYYkH130Z9UKDxrmfQwYJGUuZZF0E8KwovSoFGk7tT60AgQLyskJlqRsdTkpULuuWQ== +"@douyinfe/semi-icons@2.92.2", "@douyinfe/semi-icons@^2.92.2": + version "2.92.2" + resolved "https://registry.yarnpkg.com/@douyinfe/semi-icons/-/semi-icons-2.92.2.tgz#27c91cb7e3a0da8103fd89692afea1897123dc48" + integrity sha512-+fgK2Oe2+uokQZnrd+rHgksmfvDVvqT1fhbl49qJlDsg/xaXRxI2LOQRqBI+x0sOKabGKem+P3lY24Jgd/IGnQ== dependencies: classnames "^2.2.6" -"@douyinfe/semi-illustrations@2.91.0": - version "2.91.0" - resolved "https://registry.yarnpkg.com/@douyinfe/semi-illustrations/-/semi-illustrations-2.91.0.tgz#ed079cf581cd41a2dfafd591fb7fbdca28efa54f" - integrity sha512-4uGONV6JhSD3Lm9YDk2Dm1tYRY0O/fv+wnTEb8BuuWR/85nkNTkfo7gBNWhlxiN0nuUULRAzZV60snWoWI1Q2w== +"@douyinfe/semi-illustrations@2.92.2": + version "2.92.2" + resolved "https://registry.yarnpkg.com/@douyinfe/semi-illustrations/-/semi-illustrations-2.92.2.tgz#d5805578ec365f500ac3c4a7b593c334d7f4211a" + integrity sha512-C120PwRKJ6SbK44O8JD8wVwaqBqyAFqB1wMAdS0iCCeQVuUgn1FkiZcBiEi/Y8PFWlTW9Bv/wWPtTz9LtEpjMw== -"@douyinfe/semi-json-viewer-core@2.91.0": - version "2.91.0" - resolved "https://registry.yarnpkg.com/@douyinfe/semi-json-viewer-core/-/semi-json-viewer-core-2.91.0.tgz#073452d7fe2cfe427bc8767e5f29a4c54a05381a" - integrity sha512-H6xkFs0gmqJf1u9OOArF/2mYoV88oz71jwpWNUell154dcMD/c6ePLXyvtMpc/nfxWe5UFOMuoxOljAyoGOeQw== +"@douyinfe/semi-json-viewer-core@2.92.2": + version "2.92.2" + resolved "https://registry.yarnpkg.com/@douyinfe/semi-json-viewer-core/-/semi-json-viewer-core-2.92.2.tgz#0cfae0aa72b4e87f687ea22f5eb17e59680e7e24" + integrity sha512-or92USy1c++nQjD+WAdGUbl/9HqfOFw7QxedPXAlHG5fWZfRfbyhIcEHqwa/SkZGb4po5S9MdjAks5yaj4KQsA== dependencies: jsonc-parser "^3.3.1" -"@douyinfe/semi-theme-default@2.91.0": - version "2.91.0" - resolved "https://registry.yarnpkg.com/@douyinfe/semi-theme-default/-/semi-theme-default-2.91.0.tgz#07ef454ebf6975c5120d9380583b61afc7deda8d" - integrity sha512-Bd4jaD+zpt208bhSWnMAPcm2QOj3DcJ8lKzEuEwYO6l3q2cpcr902zn/crjyyxiePs/OEabocdCRUrYlJR7Zyw== +"@douyinfe/semi-theme-default@2.92.2": + version "2.92.2" + resolved "https://registry.yarnpkg.com/@douyinfe/semi-theme-default/-/semi-theme-default-2.92.2.tgz#758cf1d04e46d95cbe9e2a1d9d8982c7d6bbf88c" + integrity sha512-8+Iq5vLkJDo0oQiwJyN6Nyon54ImDvUXwdX1qa3ex89zlUwApbFVFWH4uXN6huNhYS99qMIwJBs8egEeDGUYJQ== -"@douyinfe/semi-ui-19@^2.91.0": - version "2.91.0" - resolved "https://registry.yarnpkg.com/@douyinfe/semi-ui-19/-/semi-ui-19-2.91.0.tgz#d25d5a92e63035be3ee930a8aa9cd116286b2b50" - integrity sha512-dzmEYpvKU/xqCcXG/j5Q7z5Gfj+Y5lalTYGM8/BWfC5dhL4YvgJaGPCz/ZHXRAZdmBxKTFI4l4czmtzX0/TA6A== +"@douyinfe/semi-ui-19@^2.92.2": + version "2.92.2" + resolved "https://registry.yarnpkg.com/@douyinfe/semi-ui-19/-/semi-ui-19-2.92.2.tgz#e7caaf7f176d3bc1035962e24e8aff354579dc5d" + integrity sha512-VUkdJWHCG6jwhqm0Lc0b+CgxZ7dFfpKsrm2gPcAK6OXemxrczpnShzwkpI1HfoBxAEdglb/bMbEWeQiy8jmESw== dependencies: "@dnd-kit/core" "^6.0.8" "@dnd-kit/sortable" "^7.0.2" "@dnd-kit/utilities" "^3.2.1" - "@douyinfe/semi-animation" "2.91.0" - "@douyinfe/semi-animation-react" "2.91.0" - "@douyinfe/semi-foundation" "2.91.0" - "@douyinfe/semi-icons" "2.91.0" - "@douyinfe/semi-illustrations" "2.91.0" - "@douyinfe/semi-theme-default" "2.91.0" + "@douyinfe/semi-animation" "2.92.2" + "@douyinfe/semi-animation-react" "2.92.2" + "@douyinfe/semi-foundation" "2.92.2" + "@douyinfe/semi-icons" "2.92.2" + "@douyinfe/semi-illustrations" "2.92.2" + "@douyinfe/semi-theme-default" "2.92.2" "@tiptap/core" "^3.10.7" "@tiptap/extension-document" "^3.10.7" "@tiptap/extension-hard-break" "^3.10.7" @@ -1011,20 +1011,20 @@ scroll-into-view-if-needed "^2.2.24" utility-types "^3.10.0" -"@douyinfe/semi-ui@2.91.0": - version "2.91.0" - resolved "https://registry.yarnpkg.com/@douyinfe/semi-ui/-/semi-ui-2.91.0.tgz#1959f587ce6185f5e2fac196a2ef17192cd4c622" - integrity sha512-ZtTLa+sf6nfY6Z2X8jC6NVKkSiouNIoBIenvurkTaQn27E1RhR4PME5u24td5qXBRBcX4/0+67BpwT7GNWdCHA== +"@douyinfe/semi-ui@2.92.2": + version "2.92.2" + resolved "https://registry.yarnpkg.com/@douyinfe/semi-ui/-/semi-ui-2.92.2.tgz#f76613c9cf358fd9774134b70d821a3546e3d268" + integrity sha512-2jS4pTN+cPXtD3WsS/RRreu5gYx1BTsDnaSAxG6z6adwsk17YuMD2PmJwwHu8gAc46I7Tv4AeqvvIBhyP0WewQ== dependencies: "@dnd-kit/core" "^6.0.8" "@dnd-kit/sortable" "^7.0.2" "@dnd-kit/utilities" "^3.2.1" - "@douyinfe/semi-animation" "2.91.0" - "@douyinfe/semi-animation-react" "2.91.0" - "@douyinfe/semi-foundation" "2.91.0" - "@douyinfe/semi-icons" "2.91.0" - "@douyinfe/semi-illustrations" "2.91.0" - "@douyinfe/semi-theme-default" "2.91.0" + "@douyinfe/semi-animation" "2.92.2" + "@douyinfe/semi-animation-react" "2.92.2" + "@douyinfe/semi-foundation" "2.92.2" + "@douyinfe/semi-icons" "2.92.2" + "@douyinfe/semi-illustrations" "2.92.2" + "@douyinfe/semi-theme-default" "2.92.2" "@tiptap/core" "^3.10.7" "@tiptap/extension-document" "^3.10.7" "@tiptap/extension-hard-break" "^3.10.7" @@ -1195,14 +1195,14 @@ resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.2.tgz#bccdf615bcf7b6e8db830ec0b8d21c9a25de597b" integrity sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew== -"@eslint/config-array@^0.23.0": - version "0.23.1" - resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.23.1.tgz#908223da7b9148f1af5bfb3144b77a9387a89446" - integrity sha512-uVSdg/V4dfQmTjJzR0szNczjOH/J+FyUMMjYtr07xFRXR7EDf9i1qdxrD0VusZH9knj1/ecxzCQQxyic5NzAiA== +"@eslint/config-array@^0.23.3": + version "0.23.3" + resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.23.3.tgz#3f4a93dd546169c09130cbd10f2415b13a20a219" + integrity sha512-j+eEWmB6YYLwcNOdlwQ6L2OsptI/LO6lNBuLIqe5R7RetD658HLoF+Mn7LzYmAWWNNzdC6cqP+L6r8ujeYXWLw== dependencies: - "@eslint/object-schema" "^3.0.1" + "@eslint/object-schema" "^3.0.3" debug "^4.3.1" - minimatch "^10.1.1" + minimatch "^10.2.4" "@eslint/config-helpers@^0.5.2": version "0.5.2" @@ -1218,22 +1218,29 @@ dependencies: "@types/json-schema" "^7.0.15" +"@eslint/core@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@eslint/core/-/core-1.1.1.tgz#450f3d2be2d463ccd51119544092256b4e88df32" + integrity sha512-QUPblTtE51/7/Zhfv8BDwO0qkkzQL7P/aWWbqcf4xWLEYn1oKjdO0gglQBB4GAsu7u6wjijbCmzsUTy6mnk6oQ== + dependencies: + "@types/json-schema" "^7.0.15" + "@eslint/js@^10.0.1": version "10.0.1" resolved "https://registry.yarnpkg.com/@eslint/js/-/js-10.0.1.tgz#1e8a876f50117af8ab67e47d5ad94d38d6622583" integrity sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA== -"@eslint/object-schema@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-3.0.1.tgz#9a1dc9af00d790dc79a9bf57a756e3cb2740ddb9" - integrity sha512-P9cq2dpr+LU8j3qbLygLcSZrl2/ds/pUpfnHNNuk5HW7mnngHs+6WSq5C9mO3rqRX8A1poxqLTC9cu0KOyJlBg== +"@eslint/object-schema@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-3.0.3.tgz#5bf671e52e382e4adc47a9906f2699374637db6b" + integrity sha512-iM869Pugn9Nsxbh/YHRqYiqd23AmIbxJOcpUMOuWCVNdoQJ5ZtwL6h3t0bcZzJUlC3Dq9jCFCESBZnX0GTv7iQ== -"@eslint/plugin-kit@^0.6.0": - version "0.6.0" - resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.6.0.tgz#e0cb12ec66719cb2211ad36499fb516f2a63899d" - integrity sha512-bIZEUzOI1jkhviX2cp5vNyXQc6olzb2ohewQubuYlMXZ2Q/XjBO0x0XhGPvc9fjSIiUN0vw+0hq53BJ4eQSJKQ== +"@eslint/plugin-kit@^0.6.1": + version "0.6.1" + resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.6.1.tgz#eb9e6689b56ce8bc1855bb33090e63f3fc115e8e" + integrity sha512-iH1B076HoAshH1mLpHMgwdGeTs0CYwL0SPMkGuSebZrwBp16v415e9NZXg2jtrqPVQjf6IANe2Vtlr5KswtcZQ== dependencies: - "@eslint/core" "^1.1.0" + "@eslint/core" "^1.1.1" levn "^0.4.1" "@floating-ui/core@^1.7.3": @@ -1284,18 +1291,6 @@ resolved "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz" integrity sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ== -"@isaacs/balanced-match@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz#3081dadbc3460661b751e7591d7faea5df39dd29" - integrity sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ== - -"@isaacs/brace-expansion@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@isaacs/brace-expansion/-/brace-expansion-5.0.1.tgz#0ef5a92d91f2fff2a37646ce54da9e5f599f6eff" - integrity sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ== - dependencies: - "@isaacs/balanced-match" "^4.0.1" - "@isaacs/cliui@^8.0.2": version "8.0.2" resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz" @@ -1494,10 +1489,10 @@ resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== -"@puppeteer/browsers@2.12.1": - version "2.12.1" - resolved "https://registry.yarnpkg.com/@puppeteer/browsers/-/browsers-2.12.1.tgz#eea8d90bab08e709550f5bf987b5af92f3286f1e" - integrity sha512-fXa6uXLxfslBlus3MEpW8S6S9fe5RwmAE5Gd8u3krqOwnkZJV3/lQJiY3LaFdTctLLqJtyMgEUGkbDnRNf6vbQ== +"@puppeteer/browsers@2.13.0": + version "2.13.0" + resolved "https://registry.yarnpkg.com/@puppeteer/browsers/-/browsers-2.13.0.tgz#10f980c6d65efeff77f8a3cac6e1a7ac10604500" + integrity sha512-46BZJYJjc/WwmKjsvDFykHtXrtomsCIrwYQPOP7VfMJoZY2bsDF9oROBABR3paDjDcmkUye1Pb1BqdcdiipaWA== dependencies: debug "^4.4.3" extract-zip "^2.0.1" @@ -1919,7 +1914,7 @@ resolved "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz" integrity sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA== -"@turf/boolean-point-in-polygon@^7.0.0": +"@turf/boolean-point-in-polygon@^7.3.4": version "7.3.4" resolved "https://registry.yarnpkg.com/@turf/boolean-point-in-polygon/-/boolean-point-in-polygon-7.3.4.tgz#654a940939fecddf1887ca4c95bd5a2f07a42de8" integrity sha512-v/4hfyY90Vz9cDgs2GwjQf+Lft8o7mNCLJOTz/iv8SHAIgMMX0czEoIaNVOJr7tBqPqwin1CGwsncrkf5C9n8Q== @@ -2143,11 +2138,16 @@ acorn-jsx@^5.0.0, acorn-jsx@^5.3.2: resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn@^8.0.0, acorn@^8.15.0: +acorn@^8.0.0: version "8.15.0" resolved "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz" integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== +acorn@^8.16.0: + version "8.16.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.16.0.tgz#4ce79c89be40afe7afe8f3adb902a1f1ce9ac08a" + integrity sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw== + adm-zip@^0.5.16: version "0.5.16" resolved "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.16.tgz" @@ -2158,10 +2158,10 @@ agent-base@^7.1.0, agent-base@^7.1.2: resolved "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz" integrity sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ== -ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== +ajv@^6.14.0: + version "6.14.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.14.0.tgz#fd067713e228210636ebb08c60bd3765d6dbe73a" + integrity sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw== dependencies: fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" @@ -2384,6 +2384,11 @@ balanced-match@^1.0.0: resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +balanced-match@^4.0.2: + version "4.0.4" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-4.0.4.tgz#bfb10662feed8196a2c62e7c68e17720c274179a" + integrity sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA== + bare-events@^2.5.4, bare-events@^2.7.0: version "2.8.2" resolved "https://registry.npmjs.org/bare-events/-/bare-events-2.8.2.tgz" @@ -2515,6 +2520,13 @@ brace-expansion@^2.0.1: dependencies: balanced-match "^1.0.0" +brace-expansion@^5.0.2: + version "5.0.4" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-5.0.4.tgz#614daaecd0a688f660bbbc909a8748c3d80d4336" + integrity sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg== + dependencies: + balanced-match "^4.0.2" + braces@^3.0.3, braces@~3.0.2: version "3.0.3" resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz" @@ -2795,10 +2807,10 @@ comma-separated-tokens@^2.0.0: resolved "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz" integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg== -commander@^14.0.2: - version "14.0.2" - resolved "https://registry.npmjs.org/commander/-/commander-14.0.2.tgz" - integrity sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ== +commander@^14.0.3: + version "14.0.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-14.0.3.tgz#425d79b48f9af82fcd9e4fc1ea8af6c5ec07bbc2" + integrity sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw== compute-scroll-into-view@^1.0.20: version "1.0.20" @@ -3063,10 +3075,10 @@ devlop@^1.0.0, devlop@^1.1.0: dependencies: dequal "^2.0.0" -devtools-protocol@0.0.1566079: - version "0.0.1566079" - resolved "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1566079.tgz" - integrity sha512-MJfAEA1UfVhSs7fbSQOG4czavUp1ajfg6prlAN0+cmfa2zNjaIbvq8VneP7do1WAQQIvgNJWSMeP6UyI90gIlQ== +devtools-protocol@0.0.1581282: + version "0.0.1581282" + resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.1581282.tgz#7f289b837e052ad04eb16e9575877801c2b3716c" + integrity sha512-nv7iKtNZQshSW2hKzYNr46nM/Cfh5SEvE2oV0/SEGgc9XupIY5ggf84Cz8eJIkBce7S3bmTAauFD6aysMpnqsQ== diff@^7.0.0: version "7.0.0" @@ -3463,10 +3475,10 @@ eslint-scope@5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-scope@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-9.1.0.tgz#dfcb41d6c0d73df6b977a50cf3e91c41ddb4154e" - integrity sha512-CkWE42hOJsNj9FJRaoMX9waUFYhqY4jmyLFdAdzZr6VaCg3ynLYx4WnOdkaIifGfH4gsUcBTn4OZbHXkpLD0FQ== +eslint-scope@^9.1.2: + version "9.1.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-9.1.2.tgz#b9de6ace2fab1cff24d2e58d85b74c8fcea39802" + integrity sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ== dependencies: "@types/esrecurse" "^4.3.1" "@types/estree" "^1.0.8" @@ -3483,33 +3495,33 @@ eslint-visitor-keys@^3.4.3: resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -eslint-visitor-keys@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-5.0.0.tgz#b9aa1a74aa48c44b3ae46c1597ce7171246a94a9" - integrity sha512-A0XeIi7CXU7nPlfHS9loMYEKxUaONu/hTEzHTGba9Huu94Cq1hPivf+DE5erJozZOky0LfvXAyrV/tcswpLI0Q== +eslint-visitor-keys@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz#9e3c9489697824d2d4ce3a8ad12628f91e9f59be" + integrity sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA== -eslint@10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-10.0.0.tgz#c93c36a96d91621d0fbb680db848ea11af56ab1e" - integrity sha512-O0piBKY36YSJhlFSG8p9VUdPV/SxxS4FYDWVpr/9GJuMaepzwlf4J8I4ov1b+ySQfDTPhc3DtLaxcT1fN0yqCg== +eslint@10.0.3: + version "10.0.3" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-10.0.3.tgz#360a7de7f2706eb8a32caa17ca983f0089efe694" + integrity sha512-COV33RzXZkqhG9P2rZCFl9ZmJ7WL+gQSCRzE7RhkbclbQPtLAWReL7ysA0Sh4c8Im2U9ynybdR56PV0XcKvqaQ== dependencies: "@eslint-community/eslint-utils" "^4.8.0" "@eslint-community/regexpp" "^4.12.2" - "@eslint/config-array" "^0.23.0" + "@eslint/config-array" "^0.23.3" "@eslint/config-helpers" "^0.5.2" - "@eslint/core" "^1.1.0" - "@eslint/plugin-kit" "^0.6.0" + "@eslint/core" "^1.1.1" + "@eslint/plugin-kit" "^0.6.1" "@humanfs/node" "^0.16.6" "@humanwhocodes/module-importer" "^1.0.1" "@humanwhocodes/retry" "^0.4.2" "@types/estree" "^1.0.6" - ajv "^6.12.4" + ajv "^6.14.0" cross-spawn "^7.0.6" debug "^4.3.2" escape-string-regexp "^4.0.0" - eslint-scope "^9.1.0" - eslint-visitor-keys "^5.0.0" - espree "^11.1.0" + eslint-scope "^9.1.2" + eslint-visitor-keys "^5.0.1" + espree "^11.1.1" esquery "^1.7.0" esutils "^2.0.2" fast-deep-equal "^3.1.3" @@ -3520,7 +3532,7 @@ eslint@10.0.0: imurmurhash "^0.1.4" is-glob "^4.0.0" json-stable-stringify-without-jsonify "^1.0.1" - minimatch "^10.1.1" + minimatch "^10.2.4" natural-compare "^1.4.0" optionator "^0.9.3" @@ -3529,14 +3541,14 @@ esmock@2.7.3: resolved "https://registry.npmjs.org/esmock/-/esmock-2.7.3.tgz" integrity sha512-/M/YZOjgyLaVoY6K83pwCsGE1AJQnj4S4GyXLYgi/Y79KL8EeW6WU7Rmjc89UO7jv6ec8+j34rKeWOfiLeEu0A== -espree@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-11.1.0.tgz#7d0c82a69f8df670728dba256264b383fbf73e8f" - integrity sha512-WFWYhO1fV4iYkqOOvq8FbqIhr2pYfoDY0kCotMkDeNtGpiGGkZ1iov2u8ydjtgM8yF8rzK7oaTbw2NAzbAbehw== +espree@^11.1.1: + version "11.2.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-11.2.0.tgz#01d5e47dc332aaba3059008362454a8cc34ccaa5" + integrity sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw== dependencies: - acorn "^8.15.0" + acorn "^8.16.0" acorn-jsx "^5.3.2" - eslint-visitor-keys "^5.0.0" + eslint-visitor-keys "^5.0.1" esprima@^4.0.1: version "4.0.1" @@ -4002,10 +4014,10 @@ glob@^7.0.0, glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" -globals@^17.3.0: - version "17.3.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-17.3.0.tgz#8b96544c2fa91afada02747cc9731c002a96f3b9" - integrity sha512-yMqGUQVVCkD4tqjOJf3TnrvaaHDMYp4VlUSObbkIiuCPe/ofdMBFIAcBbCSRFWOnos6qRiTVStDwqPLUclaxIw== +globals@^17.4.0: + version "17.4.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-17.4.0.tgz#33d7d297ed1536b388a0e2f4bcd0ff19c8ff91b5" + integrity sha512-hjrNztw/VajQwOLsMNT1cbJiH2muO3OROCHnbehc8eY5JyD2gqz4AcMHPqgaOR59DjgUjYAYLeH699g/eWi2jw== globalthis@^1.0.4: version "1.0.4" @@ -4759,18 +4771,17 @@ linkifyjs@^4.3.2: resolved "https://registry.yarnpkg.com/linkifyjs/-/linkifyjs-4.3.2.tgz#d97eb45419aabf97ceb4b05a7adeb7b8c8ade2b1" integrity sha512-NT1CJtq3hHIreOianA8aSXn6Cw0JzYOuDQbOrSPe7gqFnCpKP++MQe3ODgO3oh2GJFORkAAdqredOa60z63GbA== -lint-staged@16.2.7: - version "16.2.7" - resolved "https://registry.npmjs.org/lint-staged/-/lint-staged-16.2.7.tgz" - integrity sha512-lDIj4RnYmK7/kXMya+qJsmkRFkGolciXjrsZ6PC25GdTfWOAWetR0ZbsNXRAj1EHHImRSalc+whZFg56F5DVow== +lint-staged@16.3.2: + version "16.3.2" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-16.3.2.tgz#378b48c6c340d42eefcc8d13d198b61a562e63a9" + integrity sha512-xKqhC2AeXLwiAHXguxBjuChoTTWFC6Pees0SHPwOpwlvI3BH7ZADFPddAdN3pgo3aiKgPUx/bxE78JfUnxQnlg== dependencies: - commander "^14.0.2" + commander "^14.0.3" listr2 "^9.0.5" micromatch "^4.0.8" - nano-spawn "^2.0.0" - pidtree "^0.6.0" string-argv "^0.3.2" - yaml "^2.8.1" + tinyexec "^1.0.2" + yaml "^2.8.2" listr2@^9.0.5: version "9.0.5" @@ -4867,10 +4878,10 @@ make-dir@^2.1.0: pify "^4.0.1" semver "^5.6.0" -maplibre-gl@^5.18.0: - version "5.18.0" - resolved "https://registry.yarnpkg.com/maplibre-gl/-/maplibre-gl-5.18.0.tgz#0542080eb6e034f22f9750b8786d00b1642ea7e5" - integrity sha512-UtWxPBpHuFvEkM+5FVfcFG9ZKEWZQI6+PZkvLErr8Zs5ux+O7/KQ3JjSUvAfOlMeMgd/77qlHpOw0yHL7JU5cw== +maplibre-gl@^5.19.0: + version "5.19.0" + resolved "https://registry.yarnpkg.com/maplibre-gl/-/maplibre-gl-5.19.0.tgz#70f6af711d61a4a7405c4b7bc8fffce5dd6c11b1" + integrity sha512-REhYUN8gNP3HlcIZS6QU2uy8iovl31cXsrNDkCcqWSQbCkcpdYLczqDz5PVIwNH42UQNyvukjes/RoHPDrOUmQ== dependencies: "@mapbox/geojson-rewind" "^0.5.2" "@mapbox/jsonlint-lines-primitives" "^2.0.2" @@ -5551,12 +5562,12 @@ mimic-response@^3.1.0: resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== -minimatch@^10.1.1: - version "10.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.1.2.tgz#6c3f289f9de66d628fa3feb1842804396a43d81c" - integrity sha512-fu656aJ0n2kcXwsnwnv9g24tkU5uSmOlTjd6WyyaKm2Z+h1qmY6bAjrcaIxF/BslFqbZ8UBtbJi7KgQOZD2PTw== +minimatch@^10.2.1, minimatch@^10.2.4: + version "10.2.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.2.4.tgz#465b3accbd0218b8281f5301e27cedc697f96fde" + integrity sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg== dependencies: - "@isaacs/brace-expansion" "^5.0.1" + brace-expansion "^5.0.2" minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" @@ -5637,11 +5648,6 @@ murmurhash-js@^1.0.0: resolved "https://registry.npmjs.org/murmurhash-js/-/murmurhash-js-1.0.0.tgz" integrity sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw== -nano-spawn@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/nano-spawn/-/nano-spawn-2.0.0.tgz" - integrity sha512-tacvGzUY5o2D8CBh2rrwxyNojUsZNU2zjNTzKQrkgGJQTbGAfArVWXSKMBokBeeg6C7OLRGUEyoFlYbfeWQIqw== - nanoid@5.1.6, nanoid@^5.0.9: version "5.1.6" resolved "https://registry.npmjs.org/nanoid/-/nanoid-5.1.6.tgz" @@ -5720,15 +5726,15 @@ node-releases@^2.0.27: resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz" integrity sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA== -nodemon@^3.1.11: - version "3.1.11" - resolved "https://registry.npmjs.org/nodemon/-/nodemon-3.1.11.tgz" - integrity sha512-is96t8F/1//UHAjNPHpbsNY46ELPpftGUoSVNXwUfMk/qdjSylYrWSu1XavVTBOn526kFiOR733ATgNBCQyH0g== +nodemon@^3.1.14: + version "3.1.14" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-3.1.14.tgz#8487ca379c515301d221ec007f27f24ecafa2b51" + integrity sha512-jakjZi93UtB3jHMWsXL68FXSAosbLfY0In5gtKq3niLSkrWznrVBzXFNOEMJUfc9+Ke7SHWoAZsiMkNP3vq6Jw== dependencies: chokidar "^3.5.2" debug "^4" ignore-by-default "^1.0.1" - minimatch "^3.1.2" + minimatch "^10.2.1" pstree.remy "^1.1.8" semver "^7.5.3" simple-update-notifier "^2.0.0" @@ -6027,11 +6033,6 @@ picomatch@^4.0.3: resolved "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz" integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q== -pidtree@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz" - integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g== - pify@^4.0.1: version "4.0.1" resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" @@ -6326,16 +6327,16 @@ punycode@^2.1.0: resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== -puppeteer-core@24.37.3: - version "24.37.3" - resolved "https://registry.yarnpkg.com/puppeteer-core/-/puppeteer-core-24.37.3.tgz#56f65d743eb99fe86b246b6af9ea3e94b0e4a4f9" - integrity sha512-fokQ8gv+hNgsRWqVuP5rUjGp+wzV5aMTP3fcm8ekNabmLGlJdFHas1OdMscAH9Gzq4Qcf7cfI/Pe6wEcAqQhqg== +puppeteer-core@24.38.0: + version "24.38.0" + resolved "https://registry.yarnpkg.com/puppeteer-core/-/puppeteer-core-24.38.0.tgz#456393366c84b9159f7f43aa1fcab4dc90116e11" + integrity sha512-zB3S/tksIhgi2gZRndUe07AudBz5SXOB7hqG0kEa9/YXWrGwlVlYm3tZtwKgfRftBzbmLQl5iwHkQQl04n/mWw== dependencies: - "@puppeteer/browsers" "2.12.1" + "@puppeteer/browsers" "2.13.0" chromium-bidi "14.0.0" debug "^4.4.3" - devtools-protocol "0.0.1566079" - typed-query-selector "^2.12.0" + devtools-protocol "0.0.1581282" + typed-query-selector "^2.12.1" webdriver-bidi-protocol "0.4.1" ws "^8.19.0" @@ -6386,17 +6387,17 @@ puppeteer-extra@^3.3.6: debug "^4.1.1" deepmerge "^4.2.2" -puppeteer@^24.37.3: - version "24.37.3" - resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-24.37.3.tgz#68327e1f571887ed1ba7916d770e6028975a21db" - integrity sha512-AUGGWq0BhPM+IOS2U9A+ZREH3HDFkV1Y5HERYGDg5cbGXjoGsTCT7/A6VZRfNU0UJJdCclyEimZICkZW6pqJyw== +puppeteer@^24.38.0: + version "24.38.0" + resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-24.38.0.tgz#abf7665c73e408598860a94fc268e4ebe0ea21b2" + integrity sha512-abnJOBVoL9PQTLKSbYGm9mjNFyIPaTVj77J/6cS370dIQtcZMpx8wyZoAuBzR71Aoon6yvI71NEVFUsl3JU82g== dependencies: - "@puppeteer/browsers" "2.12.1" + "@puppeteer/browsers" "2.13.0" chromium-bidi "14.0.0" cosmiconfig "^9.0.0" - devtools-protocol "0.0.1566079" - puppeteer-core "24.37.3" - typed-query-selector "^2.12.0" + devtools-protocol "0.0.1581282" + puppeteer-core "24.38.0" + typed-query-selector "^2.12.1" qs@^6.14.1: version "6.14.1" @@ -6497,17 +6498,17 @@ react-resizable@^3.0.5: prop-types "15.x" react-draggable "^4.0.3" -react-router-dom@7.13.0: - version "7.13.0" - resolved "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.13.0.tgz" - integrity sha512-5CO/l5Yahi2SKC6rGZ+HDEjpjkGaG/ncEP7eWFTvFxbHP8yeeI0PxTDjimtpXYlR3b3i9/WIL4VJttPrESIf2g== +react-router-dom@7.13.1: + version "7.13.1" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-7.13.1.tgz#74c045acc333ca94612b889cd1b1e1ee9534dead" + integrity sha512-UJnV3Rxc5TgUPJt2KJpo1Jpy0OKQr0AjgbZzBFjaPJcFOb2Y8jA5H3LT8HUJAiRLlWrEXWHbF1Z4SCZaQjWDHw== dependencies: - react-router "7.13.0" + react-router "7.13.1" -react-router@7.13.0: - version "7.13.0" - resolved "https://registry.npmjs.org/react-router/-/react-router-7.13.0.tgz" - integrity sha512-PZgus8ETambRT17BUm/LL8lX3Of+oiLaPuVTRH3l1eLvSPpKO3AvhAEb5N7ihAFZQrYDqkvvWfFh9p0z9VsjLw== +react-router@7.13.1: + version "7.13.1" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-7.13.1.tgz#5e2b3ebafd6c78d9775e135474bf5060645077f7" + integrity sha512-td+xP4X2/6BJvZoX6xw++A2DdEi++YypA69bJUV5oVvqf6/9/9nNlD70YO1e9d3MyamJEBQFEzk6mbfDYbqrSA== dependencies: cookie "^1.0.1" set-cookie-parser "^2.6.0" @@ -6724,10 +6725,10 @@ require-directory@^2.1.1: resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== -resend@^6.9.2: - version "6.9.2" - resolved "https://registry.yarnpkg.com/resend/-/resend-6.9.2.tgz#0aae7681060c535915ce6cca97740950bf33b75a" - integrity sha512-uIM6CQ08tS+hTCRuKBFbOBvHIGaEhqZe8s4FOgqsVXSbQLAhmNWpmUhG3UAtRnmcwTWFUqnHa/+Vux8YGPyDBA== +resend@^6.9.3: + version "6.9.3" + resolved "https://registry.yarnpkg.com/resend/-/resend-6.9.3.tgz#4eb7f235b8f0049ee9f0208587939b8c953c6d5f" + integrity sha512-GRXjH9XZBJA+daH7bBVDuTShr22iWCxXA8P7t495G4dM/RC+d+3gHBK/6bz9K6Vpcq11zRQKmD+B+jECwQlyGQ== dependencies: postal-mime "2.7.3" svix "1.84.1" @@ -7439,6 +7440,11 @@ tiny-json-http@^7.0.2: resolved "https://registry.npmjs.org/tiny-json-http/-/tiny-json-http-7.5.1.tgz" integrity sha512-lB7qkBGpL3HR/8gidBu3MMfgfnDj2mlvK/eYXgSbO06gKphemLKGp/TgRTy/BKVD7nCbgIeCm41lMNayXO1f2w== +tinyexec@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-1.0.2.tgz#bdd2737fe2ba40bd6f918ae26642f264b99ca251" + integrity sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg== + tinyglobby@^0.2.15: version "0.2.15" resolved "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz" @@ -7564,10 +7570,10 @@ typed-array-length@^1.0.7: possible-typed-array-names "^1.0.0" reflect.getprototypeof "^1.0.6" -typed-query-selector@^2.12.0: - version "2.12.0" - resolved "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.0.tgz" - integrity sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg== +typed-query-selector@^2.12.1: + version "2.12.1" + resolved "https://registry.yarnpkg.com/typed-query-selector/-/typed-query-selector-2.12.1.tgz#04423bfb71b8f3aee3df1c29598ed6c7c8f55284" + integrity sha512-uzR+FzI8qrUEIu96oaeBJmd9E7CFEiQ3goA5qCVgc4s5llSubcfGHq9yUstZx/k4s9dXHVKsE35YWoFyvEqEHA== uc.micro@^2.0.0, uc.micro@^2.1.0: version "2.1.0" @@ -7936,10 +7942,10 @@ yallist@^3.0.2: resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== -yaml@^2.8.1: - version "2.8.1" - resolved "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz" - integrity sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw== +yaml@^2.8.2: + version "2.8.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.8.2.tgz#5694f25eca0ce9c3e7a9d9e00ce0ddabbd9e35c5" + integrity sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A== yargs-parser@^21.1.1: version "21.1.1"