diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2d627fdb3..162eb610a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,12 +6,27 @@
### ✨ New features/enhancements
+### 🐛 Bug fixes
+
+- Fixed CSS styling of background colour and let the application have full height
+
+### 🔧 Internal changes
+
+- Refactored the `Courses` table to `Course` with a database migration
+
+## [0.8.0] - 2026-06-09
+
+### ✨ New features/enhancements
+
- Added 404 status code return to `retrieveCourse` in `Controllers/Course` and added front-end tests for affected components
+- Updated Computer Science graph and configuration for 2026-27
+- Added privacy-preserving analytics using GoatCounter and updated privacy policy
### 🐛 Bug fixes
- Fixed a bug where duplicate graph components were being added
- Fixed CSS styling to center course modal and lighten overlay
+- Fixed a bug in SVG parsing where `path` elements with a `Z` path directive were not being ignored
### 🔧 Internal changes
@@ -28,6 +43,14 @@
- Removed `Location` datatype in favour of `Building`
- Refactor tests to run directly on tuple input to prevent unnecessary unpacking and repacking
- Renamed usages of the word "room" to "location" in the codebase to better reflect the data represented
+- Added test cases for JSON parsing of Meeting data type in `backend-test/Database/TablesTests.hs`
+- Added test cases for JSON parsing of Time' data type in `backend-test/Database/TablesTests.hs`
+- Refactored functions relating to `Building` and `Time` into `Models/Building` and `Models/Time` respectively
+- Refactor graph helper functions from `app/Svg/Database.hs` to `app/Models/Graph.hs`
+- Refactor functions for performing matrix operations from `app/Svg/Parser.hs` to `app/Util/Matrix.hs`
+- Updated documentation in `app/Util/Blaze.hs`
+- Moved the `Course` data type from `Database/Tables.hs` into `Models/Course.hs`, renamed it to `CourseData`
+- Removed `SvgJSON` data type in favour of `([Text], [Shape], [Path])`
#### y-course-refactor mini changelog (to replace):
- Refactor `Times` database schema to encompass only a single session of a course
diff --git a/PRIVACY.md b/PRIVACY.md
index 3c296bc6b..dab680d5e 100644
--- a/PRIVACY.md
+++ b/PRIVACY.md
@@ -1,15 +1,15 @@
-#Privacy Policy
+# Privacy Policy
-Courseography does not store any information about you: none of your actions in the various components of this website are recorded, nor is any of your information accessed through Facebook.
+Courseography does not collect or store any information about you, and does not require sign-in to use any website features.
-There is an option for you to post schedules and graphs to your Facebook account. At no point will Courseography post anything to Facebook without your instruction to do so. Courseography does not interact with your Facebook account in any way other than these posts, and logging in and out. Logging into your Facebook account is not required to use any other feature of this website.
+Courseography uses [GoatCounter](https://www.goatcounter.com/), an open-source web analytics platform to track page views. This platform does not store any personal information about you, and does not use cookies or persistent storage to track you. For information about GoatCounter, please see its [Privacy Policy](https://www.goatcounter.com/help/privacy).
-##Changes to this privacy statement
+## Changes to this privacy statement
We may amend this Privacy Statement from time to time. If we make changes in the way we use personal information, we will notify you by posting an announcement on our website. Users are bound by any changes to the Privacy Statement when he or she uses or otherwise accesses Courseography after such changes have been first posted.
-##Questions or concerns
+## Questions or concerns
If you have any questions or concerns regarding privacy on our website, please send us a detailed message at courseography@cs.toronto.edu. We will make every effort to resolve your concerns.
-Effective Date: April 15, 2015
+Effective Date: June 6, 2025
diff --git a/README.md b/README.md
index 404f4d141..cdd02a22e 100644
--- a/README.md
+++ b/README.md
@@ -120,6 +120,7 @@ Nazanin Ghazitabatabai,
Sidharth Gupta,
Parker Hutcheson,
Yoonie Jang,
+Angelina Jiang,
Jai Joshi,
Aayush Karki,
Japleen Kaur,
@@ -143,6 +144,7 @@ Ian Stewart-Binks,
Alan Su,
Maryam Taj,
Betty Wang,
+Rui Weng,
Fullchee Zhang,
Minfan Zhang,
Alex Shih,
diff --git a/app/Config.hs b/app/Config.hs
index 07943216c..b1fce49c3 100644
--- a/app/Config.hs
+++ b/app/Config.hs
@@ -183,7 +183,7 @@ createReqBody page = object [ "campuses" .= ([] :: [T.Text]),
"page" .= page,
"pageSize" .= (300 :: Int),
"requirementProps" .= ([] :: [T.Text]),
- "sessions" .= (["20259", "20261"] :: [T.Text]),
+ "sessions" .= (["20269", "20271"] :: [T.Text]),
"timePreferences" .= ([] :: [T.Text])
]
diff --git a/app/Controllers/Course.hs b/app/Controllers/Course.hs
index 6921be3b1..ab0333ed2 100644
--- a/app/Controllers/Course.hs
+++ b/app/Controllers/Course.hs
@@ -6,7 +6,7 @@ import Control.Monad.IO.Class (liftIO)
import qualified Data.Text as T (Text, unlines)
import Database.Persist (Entity)
import Database.Persist.Sqlite (SqlPersistM, entityVal, selectList)
-import Database.Tables as Tables (Courses, coursesCode)
+import Database.Tables as Tables (Course, courseCode)
import Happstack.Server (Response, ServerPart, lookText', notFound, ok, toResponse)
import Models.Course (getDeptCourses, returnCourse)
import Util.Happstack (createJSONResponse)
@@ -25,8 +25,8 @@ retrieveCourse = do
index :: ServerPart Response
index = do
response <- liftIO $ runDb $ do
- coursesList :: [Entity Courses] <- selectList [] []
- let codes = map (coursesCode . entityVal) coursesList
+ coursesList :: [Entity Course] <- selectList [] []
+ let codes = map (courseCode . entityVal) coursesList
return $ T.unlines codes :: SqlPersistM T.Text
return $ toResponse response
diff --git a/app/Controllers/Graph.hs b/app/Controllers/Graph.hs
index 51b4b31f5..d40dd754e 100644
--- a/app/Controllers/Graph.hs
+++ b/app/Controllers/Graph.hs
@@ -1,7 +1,7 @@
module Controllers.Graph (graphResponse, index, getGraphJSON, graphImageResponse, saveGraphJSON) where
import Control.Monad.IO.Class (liftIO)
-import Data.Aeson (decode, object, (.=))
+import Data.Aeson (object, (.=))
import Data.Maybe (fromMaybe)
import Export.ImageConversion (withImageFile)
import Happstack.Server (Response, ServerPart, lookBS, lookText', ok, toResponse)
@@ -15,9 +15,9 @@ import qualified Text.Blaze.Html5.Attributes as A
import Config (runDb)
import Database.Persist.Sqlite (Entity, SelectOpt (Asc), SqlPersistM, selectList, (==.))
-import Database.Tables as Tables (EntityField (GraphDynamic, GraphTitle), Graph, SvgJSON, Text)
+import Database.Tables as Tables (EntityField(GraphTitle, GraphDynamic), Text, Graph)
import Export.GetImages (writeActiveGraphImage)
-import Models.Graph (getGraph, insertGraph)
+import Models.Graph (getGraph, insertGraph, parseGraphComponentsJSON)
import Util.Happstack (createJSONResponse)
import Util.Helpers (readImageData)
@@ -64,9 +64,9 @@ saveGraphJSON :: ServerPart Response
saveGraphJSON = do
jsonStr <- lookBS "jsonData"
nameStr <- lookText' "nameData"
- let jsonObj = decode jsonStr :: Maybe SvgJSON
+ let jsonObj = parseGraphComponentsJSON jsonStr
case jsonObj of
Nothing -> return $ toResponse ("Error" :: String)
- Just svg -> do
- _ <- liftIO $ runDb $ insertGraph nameStr svg
+ Just components -> do
+ _ <- liftIO $ runDb $ insertGraph nameStr components
return $ toResponse ("Success" :: String)
diff --git a/app/Controllers/Timetable.hs b/app/Controllers/Timetable.hs
index 9763698f4..670338d80 100644
--- a/app/Controllers/Timetable.hs
+++ b/app/Controllers/Timetable.hs
@@ -21,6 +21,7 @@ import Export.PdfGenerator
import Happstack.Server
import MasterTemplate
import Models.Meeting (returnMeeting)
+import Models.Time (buildTime)
import Scripts
import System.FilePath ((>))
import System.IO.Temp (withSystemTempDirectory)
diff --git a/app/Database/CourseVideoSeed.hs b/app/Database/CourseVideoSeed.hs
index ba5f77367..693e40d7b 100644
--- a/app/Database/CourseVideoSeed.hs
+++ b/app/Database/CourseVideoSeed.hs
@@ -24,7 +24,7 @@ courseVideos = [
seedVideo :: (Text, [Text]) -> SqlPersistM ()
seedVideo (code, videos) =
- updateWhere [CoursesCode ==. code] [CoursesVideoUrls =. videos]
+ updateWhere [CourseCode ==. code] [CourseVideoUrls =. videos]
-- | Sets the video routes of all course rows.
seedVideos :: IO ()
diff --git a/app/Database/Migrations.hs b/app/Database/Migrations.hs
index e189dbbd0..a66c30268 100644
--- a/app/Database/Migrations.hs
+++ b/app/Database/Migrations.hs
@@ -33,8 +33,9 @@ applyMigrations currVersion migrations = do
migrationList :: [MigrationWrapper]
migrationList = [
MigrationWrapper {version=2, script=renamePostTables},
- MigrationWrapper {version=3, script=splitTimes}
- ]
+ MigrationWrapper {version=3, script=renameCoursesTable},
+ MigrationWrapper {version=4, script=splitTimes}
+ ]
-- | Migration script which renames the Post tables to Program
renamePostTables :: Migration
@@ -43,6 +44,11 @@ renamePostTables = do
addMigration True "ALTER TABLE post_category RENAME TO program_category;"
addMigration True "ALTER TABLE program_category RENAME COLUMN post TO program;"
+-- | Migration script which renames the Courses table to Course
+renameCoursesTable :: Migration
+renameCoursesTable =
+ addMigration True "ALTER TABLE courses RENAME TO course;"
+
-- | Migration script to add proper support for year-long courses
splitTimes :: Migration
splitTimes = do
diff --git a/app/Database/Tables.hs b/app/Database/Tables.hs
index 98de06678..365b400db 100644
--- a/app/Database/Tables.hs
+++ b/app/Database/Tables.hs
@@ -26,7 +26,6 @@ import Data.Char (toLower)
import qualified Data.Text as T
import Data.Time.Clock (UTCTime)
import Database.DataType
-import Database.Persist.Sqlite (Key, SqlPersistM, entityVal, selectFirst, (==.))
import Database.Persist.TH
import GHC.Generics
@@ -44,7 +43,7 @@ Department json
Primary name
UniqueName name
-Courses
+Course
code T.Text
Primary code
title T.Text Maybe
@@ -67,7 +66,7 @@ Meeting
enrol Int
wait Int
extra Int
- deriving Generic Show
+ deriving Generic Show Eq
UniqueMeeting code session section
Times
@@ -161,20 +160,13 @@ SchemaVersion
-- ** TODO: Remove these extra types and class instances
--- | JSON SVG data
-data SvgJSON =
- SvgJSON { texts :: [Text],
- shapes :: [Shape],
- paths :: [Path]
- } deriving (Show, Generic)
-
data Time' =
Time' { timeSession' :: Maybe T.Text,
weekDay' :: Double,
startHour' :: Double,
endHour' :: Double,
timeLocation' :: Maybe T.Text
- } deriving (Show, Generic)
+ } deriving (Show, Eq, Generic)
data Time =
Time { timeSession :: Maybe T.Text,
@@ -191,30 +183,11 @@ data MeetTime = MeetTime {meetInfo :: Meeting, timeInfo :: [Time'] }
data MeetTime' = MeetTime' { meetData :: Meeting, timeData :: [Time] }
deriving (Show, Generic)
--- | A Course. TODO: remove this data type (it's redundant).
-data Course =
- Course { breadth :: Maybe T.Text,
- description :: Maybe T.Text,
- title :: Maybe T.Text,
- prereqString :: Maybe T.Text,
- allMeetingTimes :: Maybe [MeetTime'],
- name :: !T.Text,
- exclusions :: Maybe T.Text,
- distribution :: Maybe T.Text,
- coreqs :: Maybe T.Text,
- videoUrls :: [T.Text]
- } deriving (Show, Generic)
-
-instance ToJSON Course
instance ToJSON Program
instance ToJSON Time
instance ToJSON MeetTime'
instance ToJSON Building
--- instance FromJSON required so that tables can be parsed into JSON,
--- not necessary otherwise.
-instance FromJSON SvgJSON
-
instance ToJSON Meeting where
toJSON = genericToJSON defaultOptions {
fieldLabelModifier =
@@ -307,35 +280,3 @@ convertTimeVals (Just day) (Just start) (Just end) =
endDbl = getHourVal end
in (dayDbl, startDbl, endDbl)
convertTimeVals _ _ _ = (5.0, 25.0, 25.0)
-
--- | Convert Times into Time
-buildTime :: Times -> SqlPersistM Time
-buildTime t = do
- building <- getBuilding (timesLocation t)
- return $ Time (timesSession t)
- (timesWeekDay t)
- (timesStartHour t)
- (timesEndHour t)
- building
-
-buildTimes :: Key Meeting -> Time' -> Times
-buildTimes meetingKey t =
- Times (timeSession' t)
- (weekDay' t)
- (startHour' t)
- (endHour' t)
- meetingKey
- (timeLocation' t)
-
--- | Given a building code, get the persistent Building associated with it
-getBuilding :: Maybe T.Text -> SqlPersistM (Maybe Building)
-getBuilding rm = do
- case rm of
- Nothing -> return Nothing
- Just r -> do
- maybeEntityBuilding <- selectFirst [BuildingCode ==. T.take 2 r] []
- case maybeEntityBuilding of
- Nothing -> return Nothing
- Just entBuilding -> do
- let building = entityVal entBuilding
- return $ Just building
diff --git a/app/Export/GetImages.hs b/app/Export/GetImages.hs
index 61afd80b0..d8bcee43c 100644
--- a/app/Export/GetImages.hs
+++ b/app/Export/GetImages.hs
@@ -17,7 +17,7 @@ import qualified Data.Map as M
import Data.Maybe (fromMaybe)
import qualified Data.Text as T
import qualified Data.Text.Lazy.IO as LTIO
-import Database.Tables as Tables
+import Database.Tables (Time (..))
import Export.ImageConversion (withImageFile)
import Export.TimetableImageCreator (renderTableHelper, times)
import Models.Meeting (getMeetingTime)
diff --git a/app/MasterTemplate.hs b/app/MasterTemplate.hs
index e4b5295ba..f861ee9e0 100644
--- a/app/MasterTemplate.hs
+++ b/app/MasterTemplate.hs
@@ -20,6 +20,10 @@ masterTemplate title headers body scripts =
! A.href "/static/res/ico/favicon.png"
sequence_ headers
toStylesheet "/static/style/app.css"
+ H.script ! H.customAttribute "data-goatcounter" "https://david-yz-liu.goatcounter.com/count"
+ ! H.customAttribute "async" ""
+ ! A.src "//gc.zgo.at/count.js"
+ $ mempty
H.body $ do
body
scripts
diff --git a/app/Models/Building.hs b/app/Models/Building.hs
new file mode 100644
index 000000000..0c2557178
--- /dev/null
+++ b/app/Models/Building.hs
@@ -0,0 +1,55 @@
+module Models.Building
+ (buildingsCSV,
+ parseBuildings,
+ getBuildingsFromCSV,
+ getBuilding) where
+
+import Config (runDb)
+import Control.Monad.IO.Class (liftIO)
+import Data.CSV (csvFile)
+import qualified Data.Text as T
+import Database.Persist.Sqlite (Filter, SqlPersistM, deleteWhere, entityVal, insertMany_,
+ selectFirst, (==.))
+import Database.Tables (Building (Building), EntityField (BuildingCode))
+import Filesystem.Path.CurrentOS as Path (append, decodeString, encodeString)
+import System.Directory (getCurrentDirectory)
+import Text.ParserCombinators.Parsec (parseFromFile)
+import Util.Helpers (safeHead)
+
+buildingsCSV :: IO Prelude.FilePath
+buildingsCSV = do
+ curDir <- getCurrentDirectory
+ return $ Path.encodeString $ Path.append (Path.decodeString curDir) $ Path.append (Path.decodeString "db") (Path.decodeString "building.csv")
+
+parseBuildings :: IO ()
+parseBuildings = do
+ buildingInfo <- getBuildingsFromCSV =<< buildingsCSV
+ runDb $ do
+ liftIO $ putStrLn "Inserting buildings"
+ deleteWhere ([] :: [Filter Building]) :: SqlPersistM ()
+ insertMany_ buildingInfo :: SqlPersistM ()
+
+-- | Extract building names, codes, addresses, postal codes, latitude and longitude from csv file
+getBuildingsFromCSV :: String -> IO [Building]
+getBuildingsFromCSV buildingCSVFile = do
+ buildingCSVData <- parseFromFile csvFile buildingCSVFile
+ case buildingCSVData of
+ Left _ -> error "csv parse error"
+ Right buildingData ->
+ return $ map (\b -> Building (T.pack $ safeHead "" b)
+ (T.pack (b !! 1))
+ (T.pack (b !! 2))
+ (T.pack (b !! 3))
+ (read (b !! 4) :: Double)
+ (read (b !! 5) :: Double)) $ drop 1 buildingData
+
+-- | Given a building code, get the persistent Building associated with it
+getBuilding :: Maybe T.Text -> SqlPersistM (Maybe Building)
+getBuilding rm =
+ case rm of
+ Nothing -> return Nothing
+ Just r -> do
+ maybeEntityBuilding <- selectFirst [BuildingCode ==. T.take 2 r] []
+ case maybeEntityBuilding of
+ Nothing -> return Nothing
+ Just entBuilding -> return $ Just (entityVal entBuilding)
diff --git a/app/Models/Course.hs b/app/Models/Course.hs
index 05946ae5b..480d1267b 100644
--- a/app/Models/Course.hs
+++ b/app/Models/Course.hs
@@ -1,5 +1,8 @@
+{-# LANGUAGE DeriveGeneric #-}
+
module Models.Course
- (buildCourse,
+ (CourseData (..),
+ buildCourse,
returnCourse,
prereqsForCourse,
getDeptCourses,
@@ -7,22 +10,48 @@ module Models.Course
import Config (runDb)
import Control.Monad.IO.Class (MonadIO, liftIO)
+import Data.Aeson (ToJSON)
import Data.Maybe (fromMaybe)
import qualified Data.Text as T (Text, append, filter, snoc, toUpper)
import Database.Persist.Class (selectKeysList)
import Database.Persist.Sqlite (Entity, PersistValue (PersistText), SqlPersistM, entityVal, get,
insert_, rawSql, selectFirst, selectList, (<-.), (==.))
-import Database.Tables hiding (breadth, distribution)
+import Database.Tables (Breadth (breadthDescription),
+ Course (courseBreadth, courseCode, courseCoreqs, courseDescription, courseDistribution, courseExclusions, coursePrereqString, courseTitle, courseVideoUrls),
+ Distribution (distributionDescription),
+ EntityField (BreadthDescription, CourseCode, DistributionDescription, MeetingCode),
+ Key, MeetTime', Meeting (meetingCode))
+import GHC.Generics (Generic)
import Models.Meeting (buildMeetTimes, meetingQuery)
--- | Queries the database for all information about @course@,
--- constructs and returns a Course value.
-returnCourse :: T.Text -> IO (Maybe Course)
+-- | The data for a single course, as returned by the back-end to the front-end.
+-- This is different from the schema-defined 'Course' type (in "Database.Tables")
+-- 'Course' describes how a course is stored in the database, whereas
+-- 'CourseData' describes the shape of the information sent to the client
+-- when a course is requested.
+data CourseData =
+ CourseData { breadth :: Maybe T.Text,
+ description :: Maybe T.Text,
+ title :: Maybe T.Text,
+ prereqString :: Maybe T.Text,
+ allMeetingTimes :: Maybe [MeetTime'],
+ name :: !T.Text,
+ exclusions :: Maybe T.Text,
+ distribution :: Maybe T.Text,
+ coreqs :: Maybe T.Text,
+ videoUrls :: [T.Text]
+ } deriving (Show, Generic)
+
+instance ToJSON CourseData
+
+-- | Queries the database for all information about 'CourseData',
+-- constructs and returns a 'CourseData' value.
+returnCourse :: T.Text -> IO (Maybe CourseData)
returnCourse lowerStr = runDb $ do
let courseStr = T.toUpper lowerStr
-- TODO: require the client to pass the full course code
let fullCodes = [courseStr, T.append courseStr "H1", T.append courseStr "Y1"]
- sqlCourse :: (Maybe (Entity Courses)) <- selectFirst [CoursesCode <-. fullCodes] []
+ sqlCourse :: (Maybe (Entity Course)) <- selectFirst [CourseCode <-. fullCodes] []
case sqlCourse of
Nothing -> return Nothing
Just course -> do
@@ -44,48 +73,48 @@ getDescriptionD (Just key) = do
maybeDistribution <- get key
return $ fmap distributionDescription maybeDistribution
--- | Builds a Course structure from a tuple from the Courses table.
+-- | Builds a 'CourseData' structure from a tuple from the Course table.
-- Some fields still need to be added in.
-buildCourse :: [MeetTime'] -> Courses -> SqlPersistM Course
+buildCourse :: [MeetTime'] -> Course -> SqlPersistM CourseData
buildCourse allMeetings course = do
- cBreadth <- getDescriptionB (coursesBreadth course)
- cDistribution <- getDescriptionD (coursesDistribution course)
- return $ Course cBreadth
+ cBreadth <- getDescriptionB (courseBreadth course)
+ cDistribution <- getDescriptionD (courseDistribution course)
+ return $ CourseData cBreadth
-- TODO: Remove the filter and allow double-quotes
- (fmap (T.filter (/='\"')) (coursesDescription course))
- (fmap (T.filter (/='\"')) (coursesTitle course))
- (coursesPrereqString course)
+ (fmap (T.filter (/='\"')) (courseDescription course))
+ (fmap (T.filter (/='\"')) (courseTitle course))
+ (coursePrereqString course)
(Just allMeetings)
- (coursesCode course)
- (coursesExclusions course)
+ (courseCode course)
+ (courseExclusions course)
cDistribution
- (coursesCoreqs course)
- (coursesVideoUrls course)
+ (courseCoreqs course)
+ (courseVideoUrls course)
-- | Retrieves the prerequisites for a course (code) as a string.
-- Also retrieves the actual course code in the database in case
-- the one the user inputs doesn't match it exactly
prereqsForCourse :: T.Text -> IO (Either String (T.Text, T.Text))
-prereqsForCourse courseCode = runDb $ do
- let upperCaseCourseCode = T.toUpper courseCode
- course <- selectFirst [CoursesCode <-. [upperCaseCourseCode, upperCaseCourseCode `T.append` "H1", upperCaseCourseCode `T.append` "Y1"]] []
+prereqsForCourse code = runDb $ do
+ let upperCaseCourseCode = T.toUpper code
+ course <- selectFirst [CourseCode <-. [upperCaseCourseCode, upperCaseCourseCode `T.append` "H1", upperCaseCourseCode `T.append` "Y1"]] []
case course of
Nothing -> return (Left "Course not found")
Just courseEntity ->
return (Right
- (coursesCode $ entityVal courseEntity,
- fromMaybe "" $ coursesPrereqString $ entityVal courseEntity)
+ (courseCode $ entityVal courseEntity,
+ fromMaybe "" $ coursePrereqString $ entityVal courseEntity)
) :: SqlPersistM (Either String (T.Text, T.Text))
-getDeptCourses :: MonadIO m => T.Text -> m [Course]
+getDeptCourses :: MonadIO m => T.Text -> m [CourseData]
getDeptCourses dept = liftIO $ runDb $ do
- courses :: [Entity Courses] <- rawSql "SELECT ?? FROM courses WHERE code LIKE ?" [PersistText $ T.snoc dept '%']
+ courses :: [Entity Course] <- rawSql "SELECT ?? FROM course WHERE code LIKE ?" [PersistText $ T.snoc dept '%']
let deptCourses = map entityVal courses
- meetings :: [Entity Meeting] <- selectList [MeetingCode <-. map coursesCode deptCourses] []
+ meetings :: [Entity Meeting] <- selectList [MeetingCode <-. map courseCode deptCourses] []
mapM (processCourse meetings) deptCourses
where
processCourse allMeetings course = do
- let courseMeetings = filter (\m -> meetingCode (entityVal m) == coursesCode course) allMeetings
+ let courseMeetings = filter (\m -> meetingCode (entityVal m) == courseCode course) allMeetings
allTimes <- mapM buildMeetTimes courseMeetings
buildCourse allTimes course
@@ -109,13 +138,13 @@ getBreadthKey description_ = do
[] -> Nothing
(x:_) -> Just x
--- | Inserts course into the Courses table.
-insertCourse :: (Courses, T.Text, T.Text) -> SqlPersistM ()
-insertCourse (course, breadth, distribution) = do
- maybeCourse <- selectFirst [CoursesCode ==. coursesCode course] []
- breadthKey <- getBreadthKey breadth
- distributionKey <- getDistributionKey distribution
+-- | Inserts course into the Course table.
+insertCourse :: (Course, T.Text, T.Text) -> SqlPersistM ()
+insertCourse (course, breadthDesc, distributionDesc) = do
+ maybeCourse <- selectFirst [CourseCode ==. courseCode course] []
+ breadthKey <- getBreadthKey breadthDesc
+ distributionKey <- getDistributionKey distributionDesc
case maybeCourse of
- Nothing -> insert_ $ course {coursesBreadth = breadthKey,
- coursesDistribution = distributionKey}
+ Nothing -> insert_ $ course {courseBreadth = breadthKey,
+ courseDistribution = distributionKey}
Just _ -> return ()
diff --git a/app/Models/Graph.hs b/app/Models/Graph.hs
index 6b611b2f7..0574d6f6c 100644
--- a/app/Models/Graph.hs
+++ b/app/Models/Graph.hs
@@ -1,15 +1,17 @@
module Models.Graph
- (getGraph,
- insertGraph) where
+ (getGraph, insertGraph, insertElements, deleteExistingGraph, parseGraphComponentsJSON) where
import Config (runDb)
-import Data.Aeson (Value, object, toJSON)
+import Data.Aeson (Value, decode, object, toJSON, (.:))
+import Data.Aeson.Types (parseMaybe)
import qualified Data.Text as T (Text)
+import qualified Data.ByteString.Lazy as L
import Database.DataType (ShapeType (BoolNode, Hybrid, Node))
import Database.Persist.Sqlite (Entity, PersistEntity, PersistValue (PersistInt64), SqlPersistM,
- entityKey, entityVal, insert, insertMany_, keyToValues, selectFirst,
- selectList, (<-.), (==.))
-import Database.Tables hiding (paths, shapes, texts)
+ deleteWhere, entityKey, entityVal, insert, insert_, insertMany_, keyToValues,
+ selectFirst, selectList, (<-.), (==.))
+import Database.Tables (EntityField(GraphId, ShapeType_, GraphTitle, TextGraph, ShapeGraph, PathGraph),
+ Key, Path(pathGraph), Shape(shapeGraph), Text(textGraph), Graph(graphWidth, graphHeight, Graph))
import Svg.Builder (buildEllipses, buildPath, buildRect)
import Util.Helpers
@@ -54,9 +56,49 @@ getGraph graphName = runDb $ do
return (Just response)
-insertGraph :: T.Text -> SvgJSON -> SqlPersistM ()
-insertGraph nameStr_ (SvgJSON texts shapes paths) = do
+-- | Insert a new graph into the database, given its SVG JSON.
+-- | Return Nothing.
+insertGraph :: T.Text -- ^ The title of the graph being inserted.
+ -> ([Text], [Shape], [Path]) -- ^ The parsed JSON data of the inserted graph.
+ -> SqlPersistM () -- ^ Return Nothing.
+insertGraph nameStr_ (texts, shapes, paths) = do
gId <- insert $ Graph nameStr_ 256 256 False
insertMany_ $ map (\text -> text {textGraph = gId}) texts
insertMany_ $ map (\shape -> shape {shapeGraph = gId}) shapes
insertMany_ $ map (\path -> path {pathGraph = gId}) paths
+
+-- | Insert graph components into the database.
+insertElements :: ([Path], [Shape], [Text]) -> SqlPersistM ()
+insertElements (paths, shapes, texts) = do
+ mapM_ insert_ shapes
+ mapM_ insert_ paths
+ mapM_ insert_ texts
+
+-- | Delete the graph with the given name from the database, if it exists.
+deleteExistingGraph :: T.Text -> SqlPersistM ()
+deleteExistingGraph graphName = do
+ graphEnt :: (Maybe (Entity Graph)) <- selectFirst [GraphTitle ==. graphName] []
+ case graphEnt of
+ Just graph -> do
+ let gId = entityKey graph
+ deleteGraph gId
+ Nothing -> pure ()
+
+-- | Delete a graph with the given graph ID from the database.
+deleteGraph :: Key Graph -> SqlPersistM ()
+deleteGraph gId = do
+ deleteWhere [TextGraph ==. gId]
+ deleteWhere [ShapeGraph ==. gId]
+ deleteWhere [PathGraph ==. gId]
+ deleteWhere [GraphId ==. gId]
+
+-- | Parse the JSON representation of a graph into its texts, shapes, and paths components.
+parseGraphComponentsJSON :: L.ByteString -> Maybe ([Text], [Shape], [Path])
+parseGraphComponentsJSON jsonStr = do
+ obj <- decode jsonStr
+ parseMaybe (\o -> do
+ texts <- o .: "texts"
+ shapes <- o .: "shapes"
+ paths <- o .: "paths"
+ return (texts, shapes, paths)
+ ) obj
diff --git a/app/Models/Meeting.hs b/app/Models/Meeting.hs
index 05678018b..270fbb72e 100644
--- a/app/Models/Meeting.hs
+++ b/app/Models/Meeting.hs
@@ -10,6 +10,7 @@ import qualified Data.Text as T (Text, append, isPrefixOf, tail, take, toUpper)
import Database.Persist.Sqlite (Entity, SqlPersistM, entityKey, entityVal, selectFirst, selectList,
(<-.), (==.))
import Database.Tables as Tables
+import Models.Time (buildTime)
-- | Queries the database for all matching lectures, tutorials,
meetingQuery :: [T.Text] -> SqlPersistM [MeetTime']
@@ -25,7 +26,7 @@ buildMeetTimes meet = do
return $ Tables.MeetTime' (entityVal meet) parsedTime
-- | Queries the database for all information regarding a specific meeting for
--- a @course@, returns a Meeting.
+-- a course, returns a Meeting.
returnMeeting :: T.Text -> T.Text -> T.Text -> SqlPersistM (Maybe (Entity Meeting))
returnMeeting lowerStr sect session = do
selectFirst [MeetingCode ==. T.toUpper lowerStr,
@@ -34,7 +35,7 @@ returnMeeting lowerStr sect session = do
[]
-- | Queries the database for all times regarding a specific meeting (lecture, tutorial or practial) for
--- a @course@, returns a list of Time.
+-- a course, returns a list of Time.
getMeetingTime :: (T.Text, T.Text, T.Text) -> SqlPersistM [Time]
getMeetingTime (meetingCode_, meetingSection_, meetingSession_) = do
maybeEntityMeetings <- selectFirst [MeetingCode ==. meetingCode_,
diff --git a/app/Models/Time.hs b/app/Models/Time.hs
new file mode 100644
index 000000000..16a8a1b8d
--- /dev/null
+++ b/app/Models/Time.hs
@@ -0,0 +1,25 @@
+module Models.Time
+ (buildTime,
+ buildTimes) where
+import Database.Persist.Sqlite (SqlPersistM)
+import Database.Tables (MeetingId, Time (..), Time' (..), Times (..))
+import Models.Building (getBuilding)
+
+-- | Convert a Times record into a Time by resolving room codes to Buildings
+buildTime :: Times -> SqlPersistM Time
+buildTime t = do
+ location <- getBuilding (timesLocation t)
+ return $ Time (timesSession t)
+ (timesWeekDay t)
+ (timesStartHour t)
+ (timesEndHour t)
+ location
+
+buildTimes :: MeetingId -> Time' -> Times
+buildTimes meetingKey t =
+ Times (timeSession' t)
+ (weekDay' t)
+ (startHour' t)
+ (endHour' t)
+ meetingKey
+ (timeLocation' t)
diff --git a/app/Svg/Builder.hs b/app/Svg/Builder.hs
index aa68ca4ca..6d8f8b6bf 100644
--- a/app/Svg/Builder.hs
+++ b/app/Svg/Builder.hs
@@ -21,8 +21,11 @@ import Data.Char (toLower)
import Data.List (find)
import qualified Data.Text as T
import Database.DataType
-import Database.Tables hiding (shapes, texts)
-import Svg.Parser (matrixPointMultiply)
+import Database.Tables (Matrix, Point,
+ Path(pathTarget, pathIsRegion, pathPoints, pathTransform, pathId_, pathSource),
+ Shape(shapeText, shapeWidth, shapeHeight, shapePos, shapeTransform, shapeType_, shapeId_),
+ Text(textPos, textText, textTransform))
+import Util.Matrix (matrixPointMultiply)
import TextShow (showt)
import Util.Helpers
diff --git a/app/Svg/Database.hs b/app/Svg/Database.hs
deleted file mode 100644
index c36061000..000000000
--- a/app/Svg/Database.hs
+++ /dev/null
@@ -1,40 +0,0 @@
-{-|
-Description: Helpers for interacting with the graph database. Incomplete.
-
-This module is responsible for inserting values associated with the graphs
-into the database. These functions are just helpers for the main function
-in "Svg.Parser", though it is possible to put all of the data retrieval code in
-here as well at some point in the future.
--}
-
-module Svg.Database
- (insertGraph, insertElements, deleteGraph) where
-
-import qualified Data.Text as T
-import Database.Persist.Sqlite
-import Database.Tables hiding (graphDynamic, graphHeight, graphWidth, paths, shapes, texts)
-
--- | Insert a new graph into the database, returning the key of the new graph.
-insertGraph :: T.Text -- ^ The title of the graph that is being inserted.
- -> Double -- ^ The width dimension of the graph
- -> Double -- ^ The height dimension of the graph
- -> Bool -- ^ True if graph is dynamically generated
- -> SqlPersistM GraphId -- ^ The unique identifier of the inserted graph.
-insertGraph graphName graphWidth graphHeight graphDynamic = do
- runMigration migrateAll
- insert (Graph graphName graphWidth graphHeight graphDynamic)
-
--- | Insert graph components into the database.
-insertElements :: ([Path], [Shape], [Text]) -> SqlPersistM ()
-insertElements (paths, shapes, texts) = do
- mapM_ insert_ shapes
- mapM_ insert_ paths
- mapM_ insert_ texts
-
--- | Delete a graph with the given graph ID from the database.
-deleteGraph :: Key Graph -> SqlPersistM ()
-deleteGraph gId = do
- deleteWhere [TextGraph ==. gId]
- deleteWhere [ShapeGraph ==. gId]
- deleteWhere [PathGraph ==. gId]
- deleteWhere [GraphId ==. gId]
diff --git a/app/Svg/Generator.hs b/app/Svg/Generator.hs
index ffd69c94f..509eb81ce 100644
--- a/app/Svg/Generator.hs
+++ b/app/Svg/Generator.hs
@@ -21,7 +21,11 @@ import Data.Maybe (fromMaybe)
import qualified Data.Text as T
import Database.DataType
import Database.Persist.Sqlite
-import Database.Tables hiding (paths, texts)
+import Database.Tables (EntityField(ShapeGraph, GraphTitle, TextGraph, PathGraph, ShapeType_),
+ Path(pathFill, pathIsRegion, pathSource, pathTarget, pathId_, pathPoints, pathTransform),
+ Shape(shapeText, shapeFill, shapeType_, shapeId_, shapeTransform, shapeWidth, shapeHeight, shapePos),
+ Text(textText, textPos, textAlign, textFill, textTransform),
+ Graph(graphHeight, graphWidth))
import Svg.Builder
import System.IO (Handle, hPutStrLn)
import Text.Blaze (toMarkup)
diff --git a/app/Svg/Parser.hs b/app/Svg/Parser.hs
index bfe4ae12d..79b69f5bc 100644
--- a/app/Svg/Parser.hs
+++ b/app/Svg/Parser.hs
@@ -5,7 +5,7 @@ This module is reponsible for parsing the SVG files exported from Inkscape.
It also currently acts as a main driver for the whole graph pipeline:
1. Parsing the raw SVG files
-2. Inserting them into the database (see "Svg.Database")
+2. Inserting them into the database (see "Models.Graph")
3. Retrieving the database values and generating a new SVG file
(See "Svg.Builder" and "Svg.Generator")
@@ -14,19 +14,21 @@ directly to the client when viewing the @/graph@ page.
-}
module Svg.Parser
- (parsePrebuiltSvgs, parseDynamicSvg, matrixPointMultiply) where
+ (parsePrebuiltSvgs, parseDynamicSvg) where
import Config (graphPath, runDb)
import Control.Monad.IO.Class (liftIO)
-import Data.Char (isSpace)
-import Data.List as List
+import Data.Char (isSpace, toLower)
+import qualified Data.List as List
import Data.Maybe (fromMaybe)
import qualified Data.Text as T
import Data.Text.IO as T (readFile)
import Database.DataType
import Database.Persist.Sqlite
-import Database.Tables hiding (graphHeight, graphWidth, paths, shapes, texts)
-import Svg.Database (deleteGraph, insertElements, insertGraph)
+import Database.Tables (Matrix, Point,
+ Path(pathFill, Path), Shape(shapeType_, shapeWidth, shapePos, Shape, shapeFill),
+ Text(Text), Graph(Graph), GraphId)
+import Models.Graph (deleteExistingGraph, insertElements)
import qualified Text.HTML.TagSoup as TS hiding (fromAttrib)
import Text.HTML.TagSoup (Tag)
import qualified Text.Parsec as P
@@ -34,11 +36,12 @@ import Text.Parsec ((<|>))
import Text.Parsec.String (Parser)
import Text.Read (readMaybe)
import Util.Helpers
+import Util.Matrix (matrixMultiply)
parsePrebuiltSvgs :: IO ()
parsePrebuiltSvgs = runDb $ do
- performParse "Computer Science" "csc2025.svg"
+ performParse "Computer Science" "csc2026.svg"
performParse "Statistics" "sta2022.svg"
-- performParse "(unofficial) Mathematics Specialist" "math_specialist2022.svg"
-- performParse "(unofficial) Biochemistry" "bch2015.svg"
@@ -76,22 +79,12 @@ performParse graphName inputFilename = do
graphFile <- liftIO $ T.readFile (gPath ++ inputFilename)
performParseFromMemory graphName graphFile False
--- | Deletes the graph with the given name from the database if it exists.
-deleteExistingGraph :: T.Text -> SqlPersistM ()
-deleteExistingGraph graphName = do
- graphEnt :: (Maybe (Entity Graph)) <- selectFirst [GraphTitle ==. graphName] []
- case graphEnt of
- Just graph -> do
- let gId = entityKey graph
- deleteGraph gId
- Nothing -> pure ()
-
performParseFromMemory :: T.Text -- ^ The title of the graph
-> T.Text -- ^ Filename of the SVG to parse
-> Bool -- ^ True if SVG is dynamically generated
-> SqlPersistM ()
performParseFromMemory graphName graphSvg isDynamic = do
- key <- insertGraph graphName graphWidth graphHeight isDynamic
+ key <- insert (Graph graphName graphWidth graphHeight isDynamic)
let parsedGraph = parseSvg key graphSvg
insertElements parsedGraph
where (graphWidth, graphHeight) = parseSizeFromSvg graphSvg
@@ -303,7 +296,9 @@ parsePathHelper key trans globalTrans (src, dst) pathTag =
isRegion
src
dst
- [a, b, c, d', e, f] | not (T.null d || null realD || (T.last d == 'z' && not isRegion))
+ [a, b, c, d', e, f]
+ -- Ignore empty paths and non-region paths that are loops (these are arrowheads in the raw SVG)
+ | not (T.null d || null realD || (toLower (T.last d) == 'z' && not isRegion))
]
where
-- Remove consecutive duplicated points
@@ -668,23 +663,6 @@ updateShape fill r =
addTuples :: Point -> Point -> Point
addTuples (a,b) (c,d) = (a + c, b + d)
--- | Apply a matrix transformation to a point.
--- The matrix must have dimensions 3x3, representing a transformation for a two-dimensional point,
--- i.e., the transformation in the z-component is ignored, so the third row is expected to be [0,0,1]
-matrixPointMultiply :: Matrix -> Point -> Point
-matrixPointMultiply matrix (x, y) =
- case matrix of
- [[a, b, tx], [c, d, ty], _] -> (a * x + b * y + tx, c * x + d * y + ty)
- _ -> error "Matrix must be 3x3 for point transformation."
-
--- | Multiplies two 3x3 matrices together.
-matrixMultiply :: Matrix -> Matrix -> Matrix
-matrixMultiply m1 m2 = [[dotProduct row col | col <- transpose m2] | row <- m1]
-
--- | Computes the dot product of two vectors.
-dotProduct :: Vector -> Vector -> Double
-dotProduct v1 v2 = sum $ zipWith (*) v1 v2
-
-- | Helper to remove leading and trailing whitespace.
trim :: T.Text -> T.Text
trim = f . f
diff --git a/app/Util/Blaze.hs b/app/Util/Blaze.hs
index 0e1193c25..7084c803f 100644
--- a/app/Util/Blaze.hs
+++ b/app/Util/Blaze.hs
@@ -1,6 +1,6 @@
{-|
- Module : Util.Blaze
- Description : Contains methods for setting various HTML attributes.
+ Module : Util.Blaze
+ Description : Contains functions for setting various HTML attributes.
-}
module Util.Blaze
(toStylesheet,
@@ -15,22 +15,21 @@ import qualified Text.Blaze.Html5 as H
import qualified Text.Blaze.Html5.Attributes as A
import Text.Markdown (def, markdown)
--- |Sets the html attributes to the href of the style sheet.
+-- | Set the HTML attributes to the href of the style sheet.
toStylesheet :: T.Text -> H.Html
toStylesheet href = H.link ! A.rel "stylesheet"
! A.type_ "text/css"
! A.href (H.textValue href)
--- |Sets the script attributes.
+-- | Set the script attributes.
toScript :: T.Text -> H.Html
toScript src = H.script ! A.src (H.textValue src) $ ""
--- |Creates a link by setting the href attribute.
+-- | Create a link by setting the href attribute.
toLink :: T.Text -> T.Text -> H.Html
toLink link content = H.a ! A.href (H.textValue link)
$ H.toHtml content
--- | mdToHTML takes in the contents of a file written in Mark Down and converts it to
--- blaze-HTML.
+-- | Convert the contents of a markdown file to blaze-HTML.
mdToHTML :: Text -> H.Html
mdToHTML = markdown def
diff --git a/app/Util/Matrix.hs b/app/Util/Matrix.hs
new file mode 100644
index 000000000..d289906ad
--- /dev/null
+++ b/app/Util/Matrix.hs
@@ -0,0 +1,26 @@
+{-|
+ Module : Util.Matrix
+ Description : Contains functions for performing matrix operations.
+-}
+
+module Util.Matrix (matrixPointMultiply, matrixMultiply, dotProduct) where
+
+import Database.Tables (Matrix, Point, Vector)
+import Data.List (transpose)
+
+-- | Apply a matrix transformation to a point.
+-- The matrix must have dimensions 3x3, representing a transformation for a two-dimensional point,
+-- i.e., the transformation in the z-component is ignored, so the third row is expected to be [0,0,1]
+matrixPointMultiply :: Matrix -> Point -> Point
+matrixPointMultiply matrix (x, y) =
+ case matrix of
+ [[a, b, tx], [c, d, ty], _] -> (a * x + b * y + tx, c * x + d * y + ty)
+ _ -> error "Matrix must be 3x3 for point transformation."
+
+-- | Multiplies two 3x3 matrices together.
+matrixMultiply :: Matrix -> Matrix -> Matrix
+matrixMultiply m1 m2 = [[dotProduct row col | col <- transpose m2] | row <- m1]
+
+-- | Computes the dot product of two vectors.
+dotProduct :: Vector -> Vector -> Double
+dotProduct v1 v2 = sum $ zipWith (*) v1 v2
diff --git a/app/WebParsing/ArtSciParser.hs b/app/WebParsing/ArtSciParser.hs
index 806a220b8..a9c197f23 100644
--- a/app/WebParsing/ArtSciParser.hs
+++ b/app/WebParsing/ArtSciParser.hs
@@ -3,27 +3,23 @@ module WebParsing.ArtSciParser
import Config (fasCalendarUrl, programsUrl, runDb)
import Control.Monad.IO.Class (liftIO)
-import Data.CSV
import Data.List (findIndex, nubBy)
import Data.Maybe (fromMaybe, mapMaybe)
import qualified Data.Text as T
import Data.Text.Lazy (toStrict)
import Data.Text.Lazy.Encoding (decodeUtf8)
import Database.Persist (insertUnique)
-import Database.Persist.Sqlite (Filter, SqlPersistM, deleteWhere, insertMany_)
-import Database.Tables (Building (..), Courses (..), Department (..))
-import Filesystem.Path.CurrentOS as Path
+import Database.Persist.Sqlite (SqlPersistM)
+import Database.Tables (Course (..), Department (..))
+import Models.Building (parseBuildings)
import Models.Course (insertCourse)
import Network.HTTP.Simple (getResponseBody, httpLBS, parseRequest)
-import System.Directory (getCurrentDirectory)
import qualified Text.HTML.TagSoup as TS
import Text.HTML.TagSoup (Tag)
import Text.HTML.TagSoup.Match (anyAttrValue, tagOpen, tagOpenAttrLit, tagOpenAttrNameLit)
import Text.Parsec (count, many, parse)
import qualified Text.Parsec.Char as P
import Text.Parsec.Text (Parser)
-import Text.ParserCombinators.Parsec (parseFromFile)
-import Util.Helpers
import WebParsing.ParsecCombinators (text)
import WebParsing.PostParser (addPostToDatabase)
import WebParsing.ReqParser (parseReqs)
@@ -33,34 +29,6 @@ parseCalendar = do
parseArtSci
parseBuildings
--- The file name is building.csv and it is in the courseography/db folder
-buildingsCSV :: IO Prelude.FilePath
-buildingsCSV = do
- curDir <- getCurrentDirectory
- return $ Path.encodeString $ Path.append (Path.decodeString curDir) $ Path.append (Path.decodeString "db") (Path.decodeString "building.csv")
-
-parseBuildings :: IO ()
-parseBuildings = do
- buildingInfo <- getBuildingsFromCSV =<< buildingsCSV
- runDb $ do
- liftIO $ putStrLn "Inserting buildings"
- deleteWhere ([] :: [Filter Building]) :: SqlPersistM ()
- insertMany_ buildingInfo :: SqlPersistM ()
-
--- | Extract building names, codes, addresses, postal codes, latitude and longitude from csv file
-getBuildingsFromCSV :: String -> IO [Building]
-getBuildingsFromCSV buildingCSVFile = do
- buildingCSVData <- parseFromFile csvFile buildingCSVFile
- case buildingCSVData of
- Left _ -> error "csv parse error"
- Right buildingData -> do
- return $ map (\b -> Building (T.pack $ safeHead "" b)
- (T.pack (b !! 1))
- (T.pack (b !! 2))
- (T.pack (b !! 3))
- (read (b !! 4) :: Double)
- (read (b !! 5) :: Double)) $ drop 1 buildingData
-
-- | Parses the entire Arts & Science Course Calendar and inserts courses
-- into the database.
parseArtSci :: IO ()
@@ -121,7 +89,7 @@ parsePrograms programs = mapM_ addPostToDatabase $ TS.partitions isAccordionHead
isAccordionHeader = tagOpenAttrNameLit "h3" "class" (T.isInfixOf "js-views-accordion-group-header")
-- | Parse the section of the course calendar listing the courses offered by a department.
-parseCourses :: [Tag T.Text] -> [(Courses, T.Text, T.Text)]
+parseCourses :: [Tag T.Text] -> [(Course, T.Text, T.Text)]
parseCourses tags =
let elems = TS.partitions isAccordion tags
courses = map parseCourse elems
@@ -130,7 +98,7 @@ parseCourses tags =
where
isAccordion = tagOpenAttrNameLit "h3" "class" (T.isInfixOf "js-views-accordion-group-header")
- parseCourse :: [Tag T.Text] -> (Courses, T.Text, T.Text)
+ parseCourse :: [Tag T.Text] -> (Course, T.Text, T.Text)
parseCourse courseTags =
let courseHeader = T.strip . TS.innerText $ takeWhile (not . TS.isTagCloseName "h3") courseTags
(code, title) = either (error . show) id $ parse parseCourseTitle "course title" courseHeader
@@ -148,17 +116,17 @@ parseCourses tags =
distribution = fromMaybe "" $ getValue "Distribution Requirements:" courseContents
breadth = fromMaybe "" $ getValue "Breadth Requirements:" courseContents
in
- (Courses code
- (Just title)
- (Just description)
- (fmap (T.pack . show . parseReqs . T.unpack) prereqString)
- exclusion
- Nothing
- Nothing
- prereqString
- coreq
- [],
- breadth, distribution)
+ (Course code
+ (Just title)
+ (Just description)
+ (fmap (T.pack . show . parseReqs . T.unpack) prereqString)
+ exclusion
+ Nothing
+ Nothing
+ prereqString
+ coreq
+ [],
+ breadth, distribution)
getValue label texts = do
i <- findIndex (T.isPrefixOf label) texts
diff --git a/app/WebParsing/UtsgJsonParser.hs b/app/WebParsing/UtsgJsonParser.hs
index 860f13876..c1b3899d3 100644
--- a/app/WebParsing/UtsgJsonParser.hs
+++ b/app/WebParsing/UtsgJsonParser.hs
@@ -10,7 +10,8 @@ import Data.Default.Class (def)
import qualified Data.Text as T
import Database.Persist.Sqlite (SqlPersistM, Update, deleteWhere, entityKey, insert, insertMany_,
selectFirst, upsert, (=.), (==.))
-import Database.Tables (EntityField (..), MeetTime (..), Meeting (..), buildTimes)
+import Database.Tables (EntityField (..), MeetTime (..), Meeting (..))
+import Models.Time (buildTimes)
import Network.Connection (TLSSettings (TLSSettingsSimple))
import Network.HTTP.Conduit (RequestBody (RequestBodyLBS), httpLbs, method, mkManagerSettings,
newManager, parseRequest, requestBody, requestHeaders, responseBody)
diff --git a/backend-test/Controllers/CourseControllerTests.hs b/backend-test/Controllers/CourseControllerTests.hs
index 674379538..e2c00ed45 100644
--- a/backend-test/Controllers/CourseControllerTests.hs
+++ b/backend-test/Controllers/CourseControllerTests.hs
@@ -18,9 +18,9 @@ import qualified Data.Map as Map
import Data.Maybe (fromMaybe, mapMaybe)
import qualified Data.Text as T
import Database.Persist.Sqlite (SqlPersistM, insert, insertMany_, insert_)
-import Database.Tables (Building (..), Courses (..), MeetTime (..), Meeting (..), Time' (..),
- buildTimes)
+import Database.Tables (Building (..), Course (..), MeetTime (..), Meeting (..), Time' (..))
import Happstack.Server (rsBody, rsCode)
+import Models.Time (buildTimes)
import Test.Tasty (TestTree)
import Test.Tasty.HUnit (assertEqual, testCase)
import TestHelpers (clearDatabase, mockGetRequest, runServerPart, runServerPartWith, withDatabase)
@@ -198,17 +198,17 @@ runRetrieveCourseTest (label, courseName, courseData, meetingTimes, expectedCode
Nothing -> []
let courseToInsert =
- Courses
- { coursesCode = currCourseName
- , coursesTitle = Map.lookup "title" courseData
- , coursesDescription = Map.lookup "description" courseData
- , coursesPrereqs = Map.lookup "prereqs" courseData
- , coursesExclusions = Map.lookup "exclusions" courseData
- , coursesBreadth = Nothing
- , coursesDistribution = Nothing
- , coursesPrereqString = Map.lookup "prereqString" courseData
- , coursesCoreqs = Map.lookup "coreqs" courseData
- , coursesVideoUrls = videoUrls
+ Course
+ { courseCode = currCourseName
+ , courseTitle = Map.lookup "title" courseData
+ , courseDescription = Map.lookup "description" courseData
+ , coursePrereqs = Map.lookup "prereqs" courseData
+ , courseExclusions = Map.lookup "exclusions" courseData
+ , courseBreadth = Nothing
+ , courseDistribution = Nothing
+ , coursePrereqString = Map.lookup "prereqString" courseData
+ , courseCoreqs = Map.lookup "coreqs" courseData
+ , courseVideoUrls = videoUrls
}
let buildingCodes = getUniqueBuildings meetingTimes
@@ -237,7 +237,7 @@ runRetrieveCourseTests = map runRetrieveCourseTest retrieveCourseTestCases
insertCourses :: [T.Text] -> SqlPersistM ()
insertCourses = mapM_ insertCourse
where
- insertCourse code = insert_ (Courses code Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing [])
+ insertCourse code = insert_ (Course code Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing [])
-- | Helper function to insert MeetTimes into the database
insertMeetingTimes :: [MeetTime] -> SqlPersistM ()
@@ -284,7 +284,7 @@ runIndexTests :: [TestTree]
runIndexTests = map runIndexTest indexTestCases
-- | List of test cases as (case, database state, input [dept], expected JSON output) for the courseInfo function
-courseInfoTestCases :: [(String, [Courses], T.Text, String)]
+courseInfoTestCases :: [(String, [Course], T.Text, String)]
courseInfoTestCases =
[ ("Empty Database"
, []
@@ -308,45 +308,45 @@ courseInfoTestCases =
, "[{\"allMeetingTimes\":[],\"breadth\":null,\"coreqs\":null,\"description\":\"Programming in a language such as Python. Elementary data types, lists, maps. Program structure: control flow, functions, classes, objects, methods. Algorithms and problem solving. Searching, sorting, and complexity. Unit testing. Floating-point numbers and numerical computation. No prior programming experience required.\",\"distribution\":null,\"exclusions\":\"CSC110Y1, CSC111H1, CSC120H1, CSC121H1, CSC148H1, CSC108H5, CSC148H5, CSCA08H3, CSCA20H3, CSCA48H3\",\"name\":\"CSC108H1\",\"prereqString\":null,\"title\":\"Introduction to Computer Programming\",\"videoUrls\":[]},{\"allMeetingTimes\":[],\"breadth\":null,\"coreqs\":\"( CSC108H1/ equivalent programming experience)/ CSC110Y1/ CSC148H1 *Note: the corequisite may be completed either concurrently or in advance.\",\"description\":\"An introduction to probability using simulation and mathematical frameworks, with emphasis on the probability needed for more advanced study in statistical practice. Topics covered include probability spaces, random variables, discrete and continuous probability distributions, probability mass, density, and distribution functions, expectation and variance, independence, conditional probability, the law of large numbers, the central limit theorem, sampling distributions. Computer simulation will be taught and used extensively for calculations and to guide the theoretical development.\",\"distribution\":null,\"exclusions\":\"STA247H1, STA201H1, STA255H1, STA257H1, ECO227Y1, MAT370H1, STAB52H3, STA256H5, ECO227Y5\",\"name\":\"STA237H1\",\"prereqString\":\"( MAT135H1, MAT136H1)/ MAT137Y1/ MAT157Y1/ ( MATA30H3, MATA36H3)/ ( MATA31H3, MATA37H3)/ ( MAT135H5, MAT136H5)/ MAT137Y5/ MAT157Y5/ ( MAT137H5, MAT139H5)/ ( MAT157H5, MAT159H5)\",\"title\":\"Probability, Statistics and Data Analysis I\",\"videoUrls\":[]},{\"allMeetingTimes\":[],\"breadth\":null,\"coreqs\":\"CSC108H1/ CSC110Y1/ CSC148H1 *Note: the corequisite may be completed either concurrently or in advance.\",\"description\":\"An introduction to statistical inference and practice. Statistical models and parameters, estimators of parameters and their statistical properties, methods of estimation, confidence intervals, hypothesis testing, likelihood function, the linear model. Use of statistical computation for data analysis and simulation.\",\"distribution\":null,\"exclusions\":\"ECO220Y1/ ECO227Y1/ GGR270H1/ PSY201H1/ SOC300H1/ SOC202H1/ SOC252H1/ STA220H1/ STA221H1/ STA255H1/ STA248H1/ STA261H1/ STA288H1/ EEB225H1/ STAB22H3/ STAB27H3/ STAB57H3/ STA220H5/ STA221H5/ STA258H5/ STA260H5/ ECO220Y5/ ECO227Y5\",\"name\":\"STA238H1\",\"prereqString\":\"STA237H1/ STA247H1/ STA257H1/ STAB52H3/ STA256H5\",\"title\":\"Probability, Statistics and Data Analysis II\",\"videoUrls\":[\"[https://example.com/video1\",\"https://example.com/video2]\"]}]")
]
where
- sta237 = Courses
- { coursesCode = "STA237H1"
- , coursesTitle = Just "Probability, Statistics and Data Analysis I"
- , coursesDescription = Just "An introduction to probability using simulation and mathematical frameworks, with emphasis on the probability needed for more advanced study in statistical practice. Topics covered include probability spaces, random variables, discrete and continuous probability distributions, probability mass, density, and distribution functions, expectation and variance, independence, conditional probability, the law of large numbers, the central limit theorem, sampling distributions. Computer simulation will be taught and used extensively for calculations and to guide the theoretical development."
- , coursesPrereqs = Just "( MAT135H1, MAT136H1)/ MAT137Y1/ MAT157Y1/ ( MATA30H3, MATA36H3)/ ( MATA31H3, MATA37H3)/ ( MAT135H5, MAT136H5)/ MAT137Y5/ MAT157Y5/ ( MAT137H5, MAT139H5)/ ( MAT157H5, MAT159H5)"
- , coursesExclusions = Just "STA247H1, STA201H1, STA255H1, STA257H1, ECO227Y1, MAT370H1, STAB52H3, STA256H5, ECO227Y5"
- , coursesBreadth = Nothing
- , coursesDistribution = Nothing
- , coursesPrereqString = Just "( MAT135H1, MAT136H1)/ MAT137Y1/ MAT157Y1/ ( MATA30H3, MATA36H3)/ ( MATA31H3, MATA37H3)/ ( MAT135H5, MAT136H5)/ MAT137Y5/ MAT157Y5/ ( MAT137H5, MAT139H5)/ ( MAT157H5, MAT159H5)"
- , coursesCoreqs = Just "( CSC108H1/ equivalent programming experience)/ CSC110Y1/ CSC148H1 *Note: the corequisite may be completed either concurrently or in advance."
- , coursesVideoUrls = []
+ sta237 = Course
+ { courseCode = "STA237H1"
+ , courseTitle = Just "Probability, Statistics and Data Analysis I"
+ , courseDescription = Just "An introduction to probability using simulation and mathematical frameworks, with emphasis on the probability needed for more advanced study in statistical practice. Topics covered include probability spaces, random variables, discrete and continuous probability distributions, probability mass, density, and distribution functions, expectation and variance, independence, conditional probability, the law of large numbers, the central limit theorem, sampling distributions. Computer simulation will be taught and used extensively for calculations and to guide the theoretical development."
+ , coursePrereqs = Just "( MAT135H1, MAT136H1)/ MAT137Y1/ MAT157Y1/ ( MATA30H3, MATA36H3)/ ( MATA31H3, MATA37H3)/ ( MAT135H5, MAT136H5)/ MAT137Y5/ MAT157Y5/ ( MAT137H5, MAT139H5)/ ( MAT157H5, MAT159H5)"
+ , courseExclusions = Just "STA247H1, STA201H1, STA255H1, STA257H1, ECO227Y1, MAT370H1, STAB52H3, STA256H5, ECO227Y5"
+ , courseBreadth = Nothing
+ , courseDistribution = Nothing
+ , coursePrereqString = Just "( MAT135H1, MAT136H1)/ MAT137Y1/ MAT157Y1/ ( MATA30H3, MATA36H3)/ ( MATA31H3, MATA37H3)/ ( MAT135H5, MAT136H5)/ MAT137Y5/ MAT157Y5/ ( MAT137H5, MAT139H5)/ ( MAT157H5, MAT159H5)"
+ , courseCoreqs = Just "( CSC108H1/ equivalent programming experience)/ CSC110Y1/ CSC148H1 *Note: the corequisite may be completed either concurrently or in advance."
+ , courseVideoUrls = []
}
- sta238 = Courses
- { coursesCode = "STA238H1"
- , coursesTitle = Just "Probability, Statistics and Data Analysis II"
- , coursesDescription = Just "An introduction to statistical inference and practice. Statistical models and parameters, estimators of parameters and their statistical properties, methods of estimation, confidence intervals, hypothesis testing, likelihood function, the linear model. Use of statistical computation for data analysis and simulation."
- , coursesPrereqs = Just "STA237H1/ STA247H1/ STA257H1/ STAB52H3/ STA256H5"
- , coursesExclusions = Just "ECO220Y1/ ECO227Y1/ GGR270H1/ PSY201H1/ SOC300H1/ SOC202H1/ SOC252H1/ STA220H1/ STA221H1/ STA255H1/ STA248H1/ STA261H1/ STA288H1/ EEB225H1/ STAB22H3/ STAB27H3/ STAB57H3/ STA220H5/ STA221H5/ STA258H5/ STA260H5/ ECO220Y5/ ECO227Y5"
- , coursesBreadth = Nothing
- , coursesDistribution = Nothing
- , coursesPrereqString = Just "STA237H1/ STA247H1/ STA257H1/ STAB52H3/ STA256H5"
- , coursesCoreqs = Just "CSC108H1/ CSC110Y1/ CSC148H1 *Note: the corequisite may be completed either concurrently or in advance."
- , coursesVideoUrls = ["[https://example.com/video1", "https://example.com/video2]"]
+ sta238 = Course
+ { courseCode = "STA238H1"
+ , courseTitle = Just "Probability, Statistics and Data Analysis II"
+ , courseDescription = Just "An introduction to statistical inference and practice. Statistical models and parameters, estimators of parameters and their statistical properties, methods of estimation, confidence intervals, hypothesis testing, likelihood function, the linear model. Use of statistical computation for data analysis and simulation."
+ , coursePrereqs = Just "STA237H1/ STA247H1/ STA257H1/ STAB52H3/ STA256H5"
+ , courseExclusions = Just "ECO220Y1/ ECO227Y1/ GGR270H1/ PSY201H1/ SOC300H1/ SOC202H1/ SOC252H1/ STA220H1/ STA221H1/ STA255H1/ STA248H1/ STA261H1/ STA288H1/ EEB225H1/ STAB22H3/ STAB27H3/ STAB57H3/ STA220H5/ STA221H5/ STA258H5/ STA260H5/ ECO220Y5/ ECO227Y5"
+ , courseBreadth = Nothing
+ , courseDistribution = Nothing
+ , coursePrereqString = Just "STA237H1/ STA247H1/ STA257H1/ STAB52H3/ STA256H5"
+ , courseCoreqs = Just "CSC108H1/ CSC110Y1/ CSC148H1 *Note: the corequisite may be completed either concurrently or in advance."
+ , courseVideoUrls = ["[https://example.com/video1", "https://example.com/video2]"]
}
- csc108 = Courses
- { coursesCode = "CSC108H1"
- , coursesTitle = Just "Introduction to Computer Programming"
- , coursesDescription = Just "Programming in a language such as Python. Elementary data types, lists, maps. Program structure: control flow, functions, classes, objects, methods. Algorithms and problem solving. Searching, sorting, and complexity. Unit testing. Floating-point numbers and numerical computation. No prior programming experience required."
- , coursesPrereqs = Nothing
- , coursesExclusions = Just "CSC110Y1, CSC111H1, CSC120H1, CSC121H1, CSC148H1, CSC108H5, CSC148H5, CSCA08H3, CSCA20H3, CSCA48H3"
- , coursesBreadth = Nothing
- , coursesDistribution = Nothing
- , coursesPrereqString = Nothing
- , coursesCoreqs = Nothing
- , coursesVideoUrls = []
+ csc108 = Course
+ { courseCode = "CSC108H1"
+ , courseTitle = Just "Introduction to Computer Programming"
+ , courseDescription = Just "Programming in a language such as Python. Elementary data types, lists, maps. Program structure: control flow, functions, classes, objects, methods. Algorithms and problem solving. Searching, sorting, and complexity. Unit testing. Floating-point numbers and numerical computation. No prior programming experience required."
+ , coursePrereqs = Nothing
+ , courseExclusions = Just "CSC110Y1, CSC111H1, CSC120H1, CSC121H1, CSC148H1, CSC108H5, CSC148H5, CSCA08H3, CSCA20H3, CSCA48H3"
+ , courseBreadth = Nothing
+ , courseDistribution = Nothing
+ , coursePrereqString = Nothing
+ , courseCoreqs = Nothing
+ , courseVideoUrls = []
}
-- | Run a test case (case, database state, input [dept], expected JSON output) on the courseInfo function
-runCourseInfoTest :: (String, [Courses], T.Text, String) -> TestTree
+runCourseInfoTest :: (String, [Course], T.Text, String) -> TestTree
runCourseInfoTest (label, state, dept, expected) =
testCase label $ do
runDb $ do
diff --git a/backend-test/Controllers/GenerateControllerTests.hs b/backend-test/Controllers/GenerateControllerTests.hs
index 12cea2aed..3091b9345 100644
--- a/backend-test/Controllers/GenerateControllerTests.hs
+++ b/backend-test/Controllers/GenerateControllerTests.hs
@@ -18,7 +18,7 @@ import qualified Data.ByteString.Lazy as BSL
import Data.Foldable (toList)
import qualified Data.Text as T
import Database.Persist.Sqlite (SqlPersistM, insert_)
-import Database.Tables (Courses (..))
+import Database.Tables (Course (..))
import Happstack.Server (rsBody)
import Test.Tasty (TestTree)
import Test.Tasty.HUnit (assertEqual, testCase)
@@ -28,7 +28,7 @@ import TestHelpers (clearDatabase, mockPutRequest, runServerPartWith, withDataba
insertCoursesWithPrerequisites :: [(T.Text, Maybe T.Text)] -> SqlPersistM ()
insertCoursesWithPrerequisites = mapM_ insertCourse
where
- insertCourse (code, prereqString) = insert_ (Courses { coursesCode = code, coursesTitle = Nothing, coursesDescription = Nothing, coursesPrereqs = prereqString, coursesExclusions = Nothing, coursesBreadth = Nothing, coursesDistribution = Nothing, coursesPrereqString = prereqString, coursesCoreqs = Nothing, coursesVideoUrls = [] })
+ insertCourse (code, prereqString) = insert_ (Course { courseCode = code, courseTitle = Nothing, courseDescription = Nothing, coursePrereqs = prereqString, courseExclusions = Nothing, courseBreadth = Nothing, courseDistribution = Nothing, coursePrereqString = prereqString, courseCoreqs = Nothing, courseVideoUrls = [] })
-- | List of test cases as
-- (input course, course/prereq structure, JSON payload, expected # of nodes in prereq graph, expected # of boolean nodes in prereq graph)
diff --git a/backend-test/Controllers/GraphControllerTests.hs b/backend-test/Controllers/GraphControllerTests.hs
index 9910dfb59..46ef7fda1 100644
--- a/backend-test/Controllers/GraphControllerTests.hs
+++ b/backend-test/Controllers/GraphControllerTests.hs
@@ -18,9 +18,9 @@ import qualified Data.Aeson.KeyMap as KeyMap
import qualified Data.ByteString.Lazy.Char8 as BL
import qualified Data.Text as T
import Database.Persist.Sqlite (SqlPersistM, insert_, toSqlKey)
-import Database.Tables (Graph (..), Path (..), Shape (..), Text (..), SvgJSON (..))
+import Database.Tables (Graph(Graph), Path(..), Shape(..), Text(..))
import Happstack.Server (rsBody)
-import Models.Graph (getGraph, insertGraph)
+import Models.Graph (getGraph, insertGraph, parseGraphComponentsJSON)
import Test.Tasty (TestTree)
import Test.Tasty.HUnit (assertEqual, assertFailure, testCase)
import TestHelpers (clearDatabase, mockPutRequest, runServerPart, runServerPartWith, withDatabase, mockGetRequest)
@@ -187,16 +187,16 @@ runGetGraphJSONTest (label, (texts', shapes', paths')) =
let graphName = "Test Graph Name"
runDb $ do
clearDatabase
- insertGraph graphName (SvgJSON texts' shapes' paths')
+ insertGraph graphName (texts', shapes', paths')
response <- runServerPartWith Controllers.Graph.getGraphJSON $ mockGetRequest "/get-json-data" [("graphName", T.unpack graphName)] ""
let body = rsBody response
- let jsonObj = decode body :: Maybe SvgJSON
+ let jsonObj = parseGraphComponentsJSON body
case jsonObj of
- Nothing -> assertFailure ("Maybe SvgJSON returned as Nothing for " ++ label)
- Just svg -> do
- assertEqual ("Texts differ for " ++ label) texts' (map (\text -> text {textGraph = toSqlKey 1}) (texts svg))
- assertEqual ("Shapes differ for " ++ label) shapes' (map (\shape -> shape {shapeGraph = toSqlKey 1}) (shapes svg))
- assertEqual ("Paths differ for " ++ label) paths' (map (\path -> path {pathGraph = toSqlKey 1}) (paths svg))
+ Nothing -> assertFailure ("Maybe ([Text], [Shape], [Path]) returned as Nothing for " ++ label)
+ Just (parsedTexts, parsedShapes, parsedPaths) -> do
+ assertEqual ("Texts differ for " ++ label) texts' (map (\text -> text {textGraph = toSqlKey 1}) parsedTexts)
+ assertEqual ("Shapes differ for " ++ label) shapes' (map (\shape -> shape {shapeGraph = toSqlKey 1}) parsedShapes)
+ assertEqual ("Paths differ for " ++ label) paths' (map (\path -> path {pathGraph = toSqlKey 1}) parsedPaths)
-- | Run all getGraphJSON tests
runGetGraphJSONTests :: [TestTree]
diff --git a/backend-test/Database/BuildingTests.hs b/backend-test/Database/BuildingTests.hs
new file mode 100644
index 000000000..560bfe631
--- /dev/null
+++ b/backend-test/Database/BuildingTests.hs
@@ -0,0 +1,60 @@
+{-|
+Description: Building module tests.
+
+Module that contains the tests for the functions in the Building module.
+
+-}
+
+module Database.BuildingTests
+( test_buildings
+) where
+
+import Config (runDb)
+import Database.Persist.Sqlite (Filter, selectList)
+import Database.Tables (Building)
+import Models.Building (buildingsCSV, getBuildingsFromCSV, parseBuildings)
+import Test.Tasty (TestTree)
+import Test.Tasty.HUnit (assertEqual, testCase)
+import TestHelpers (clearDatabase, withDatabase)
+
+-- | Count the number of buildings currently in the database.
+countBuildings :: IO Int
+countBuildings = do
+ buildings <- runDb $ selectList ([] :: [Filter Building]) []
+ return $ length buildings
+
+-- | Count the number of building rows in the CSV that parseBuildings reads.
+expectedBuildingCount :: IO Int
+expectedBuildingCount = do
+ csvPath <- buildingsCSV
+ buildings <- getBuildingsFromCSV csvPath
+ return $ length buildings
+
+-- | Run test on parseBuildings to check for a non-zero number of buildings
+testParseBuildingsInserts :: TestTree
+testParseBuildingsInserts =
+ testCase "parseBuildings inserts buildings from the CSV" $ do
+ runDb clearDatabase
+ parseBuildings
+ count <- countBuildings
+ expected <- expectedBuildingCount
+ assertEqual "Expected parseBuildings to insert every building row from the CSV" expected count
+
+-- | Run test on parseBuildings to check that calling multiple times does not duplicate entries in the database
+testParseBuildingsIdempotent :: TestTree
+testParseBuildingsIdempotent =
+ testCase "parseBuildings is called multiple times and does not duplicate entries" $ do
+ runDb clearDatabase
+ parseBuildings
+ countAfterFirst <- countBuildings
+ parseBuildings
+ countAfterSecond <- countBuildings
+ expected <- expectedBuildingCount
+ assertEqual "Expected parseBuildings to insert every building row from the CSV" expected countAfterFirst
+ assertEqual "Expected building count to be the same after multiple calls"
+ countAfterFirst countAfterSecond
+
+-- | Test suite for Building module
+test_buildings :: TestTree
+test_buildings =
+ withDatabase "Building tests" [testParseBuildingsInserts, testParseBuildingsIdempotent]
diff --git a/backend-test/Database/TablesTests.hs b/backend-test/Database/TablesTests.hs
new file mode 100644
index 000000000..9f6dcc9c9
--- /dev/null
+++ b/backend-test/Database/TablesTests.hs
@@ -0,0 +1,71 @@
+{-|
+Description: Tables module tests.
+
+Module that contains the tests for the functions in the Tables module.
+
+-}
+
+module Database.TablesTests
+( test_tables
+) where
+
+import Data.Aeson (decode, decodeStrictText)
+import qualified Data.ByteString.Lazy.Char8 as BL
+import qualified Data.Text as T
+import Database.Tables (Meeting (..), Time' (..))
+import Test.Tasty (TestTree, testGroup)
+import Test.Tasty.HUnit (assertEqual, testCase)
+
+-- | List of test cases as (label, input JSON payload, expected output)
+meetingFromJSONTestCases :: [(String, BL.ByteString, Maybe Meeting)]
+meetingFromJSONTestCases =
+ [ ("Invalid meeting (empty JSON), Nothing returned", "{}", Nothing)
+ , ("Valid meeting with valid teachMethod", "{\"teachMethod\":\"LEC\"}", Just (Meeting "" "" "LEC" (-1) "" 0 0 0))
+ , ("Valid meeting with all fields", "{\"teachMethod\":\"LEC\",\"sectionNumber\":\"0101\",\"maxEnrolment\":100,\"currentEnrolment\":77,\"currentWaitlist\":0,\"instructors\":[{\"firstName\":\"Brinda\",\"lastName\":\"Venkataramani\"}]}", Just (Meeting "" "" "LEC0101" 100 "Brinda. Venkataramani" 77 0 0))
+ , ("Valid meeting with no maxEnrolment, default cap returned", "{\"teachMethod\":\"LEC\",\"sectionNumber\":\"0101\"}", Just (Meeting "" "" "LEC0101" (-1) "" 0 0 0))
+ , ("Valid meeting with no currentEnrolment, default enrol returned", "{\"teachMethod\":\"LEC\",\"sectionNumber\":\"0101\",\"maxEnrolment\":100}", Just (Meeting "" "" "LEC0101" 100 "" 0 0 0))
+ , ("Valid meeting with no currentWaitlist, default wait returned", "{\"teachMethod\":\"LEC\",\"sectionNumber\":\"0101\",\"maxEnrolment\":100,\"currentEnrolment\":50}", Just (Meeting "" "" "LEC0101" 100 "" 50 0 0))
+ , ("Valid meeting with multiple instructors", "{\"teachMethod\":\"LEC\",\"sectionNumber\":\"0101\",\"instructors\":[{\"firstName\":\"A\",\"lastName\":\"B\"},{\"firstName\":\"C\",\"lastName\":\"D\"}]}", Just (Meeting "" "" "LEC0101" (-1) "A. B; C. D" 0 0 0))
+ , ("Invalid meeting with no teachMethod, Nothing returned", "{\"sectionNumber\":\"0101\",\"maxEnrolment\":100}", Nothing)
+ , ("Invalid meeting with unknown teachMethod, Nothing returned", "{\"teachMethod\":\"LAB\",\"sectionNumber\":\"0101\"}", Nothing)
+ ]
+
+-- | Run a test case (case, input, expected output) on the FromJSON instance of Meeting.
+runMeetingFromJSONTest :: (String, BL.ByteString, Maybe Meeting) -> TestTree
+runMeetingFromJSONTest (label, meetingJSON, expected) =
+ testCase label $ do
+ let actual = decode meetingJSON :: Maybe Meeting
+ assertEqual ("Unexpected parsing result for " ++ label) expected actual
+
+-- | Run all the meetingFromJSON test cases
+runMeetingFromJSONTests :: [TestTree]
+runMeetingFromJSONTests = map runMeetingFromJSONTest meetingFromJSONTestCases
+
+-- | List of test cases as (label, input JSON string, expected output)
+time'FromJSONTestCases :: [(String, T.Text, Maybe Time')]
+time'FromJSONTestCases =
+ [ ("Empty JSON string, Nothing returned", "", Nothing)
+ , ("Valid JSON string", "{ \"start\": { \"day\": 1, \"millisofday\": 36000000 }, \"end\": { \"millisofday\": 39600000 }, \"building\": { \"buildingCode\": \"BA\", \"buildingRoomNumber\": \"1130\" }, \"sessionCode\": \"20269\" }", Just (Time' {timeSession' = Just "20269", weekDay' = 0.0, startHour' = 10.0, endHour' = 11.0, timeLocation' = Just "BA"}))
+ , ("Valid JSON string with no day, default time values returned", "{ \"start\": { \"millisofday\": 43200000 }, \"end\": { \"millisofday\": 50400000 }, \"building\": { \"buildingCode\": \"MY\", \"buildingRoomNumber\": \"150\" }, \"sessionCode\": \"20271\" }", Just (Time' {timeSession' = Just "20271", weekDay' = 5.0, startHour' = 25.0, endHour' = 25.0, timeLocation' = Just "MY"}))
+ , ("Valid JSON string with no start millisofday, default time values returned", "{ \"start\": { \"day\": 3 }, \"end\": { \"millisofday\": 50400000 }, \"building\": { \"buildingCode\": \"MY\", \"buildingRoomNumber\": \"150\" }, \"sessionCode\": \"20271\" }", Just (Time' {timeSession' = Just "20271", weekDay' = 5.0, startHour' = 25.0, endHour' = 25.0, timeLocation' = Just "MY"}))
+ , ("Valid JSON string with no end millisofday, default time values returned", "{ \"start\": { \"day\": 3, \"millisofday\": 43200000 }, \"end\": { }, \"building\": { \"buildingCode\": \"MY\", \"buildingRoomNumber\": \"150\" }, \"sessionCode\": \"20271\" }", Just (Time' {timeSession' = Just "20271", weekDay' = 5.0, startHour' = 25.0, endHour' = 25.0, timeLocation' = Just "MY"}))
+ , ("Invalid JSON string with no start value, Nothing returned", "{ \"end\": { \"millisofday\": 54000000 }, \"building\": { \"buildingCode\": \"MP\", \"buildingRoomNumber\": \"202\" }, \"sessionCode\": \"20269\" }", Nothing)
+ , ("Invalid JSON string with no end value, Nothing returned", "{ \"start\": { \"day\": 4, \"millisofday\": 50400000 }, \"building\": { \"buildingCode\": \"MP\", \"buildingRoomNumber\": \"202\" }, \"sessionCode\": \"20269\" }", Nothing)
+ , ("Invalid JSON string with no buildingCode value, Nothing returned", "{ \"start\": { \"day\": 4, \"millisofday\": 50400000 }, \"end\": { \"millisofday\": 54000000 }, \"building\": { \"buildingRoomNumber\": \"202\" }, \"sessionCode\": \"20269\" }", Nothing)
+ ]
+
+-- | Run a test case (label, input JSON string, expected output) on the FromJSON instance of Time'.
+runTime'FromJSONTest :: (String, T.Text, Maybe Time') -> TestTree
+runTime'FromJSONTest (label, input, expected) =
+ testCase label $ do
+ let decoded = decodeStrictText input :: Maybe Time'
+ assertEqual ("Unexpected parsing result for " ++ label) expected decoded
+
+-- | Run all the time'FromJSON test cases
+runTime'FromJSONTests :: [TestTree]
+runTime'FromJSONTests = map runTime'FromJSONTest time'FromJSONTestCases
+
+-- | Test suite for Tables Module
+test_tables :: TestTree
+test_tables =
+ testGroup "Tables tests" $ runMeetingFromJSONTests ++ runTime'FromJSONTests
diff --git a/backend-test/TestHelpers.hs b/backend-test/TestHelpers.hs
index 559432001..c3d75894c 100644
--- a/backend-test/TestHelpers.hs
+++ b/backend-test/TestHelpers.hs
@@ -97,7 +97,7 @@ runServerPart sp = runServerPartWith sp (mockGetRequest "/" [] "")
clearDatabase :: SqlPersistM ()
clearDatabase = do
deleteWhere ([] :: [Filter Department])
- deleteWhere ([] :: [Filter Courses])
+ deleteWhere ([] :: [Filter Course])
deleteWhere ([] :: [Filter Times])
deleteWhere ([] :: [Filter Meeting])
deleteWhere ([] :: [Filter Breadth])
diff --git a/config.yaml b/config.yaml
index e378adb03..7f2e22ac2 100644
--- a/config.yaml
+++ b/config.yaml
@@ -17,22 +17,23 @@ fasCalendarUrl: "https://artsci.calendar.utoronto.ca/"
programsUrl: "https://artsci.calendar.utoronto.ca/listing-program-subject-areas"
# Term dates
-fallStartDate: 2025-09-02
-fallEndDate: 2025-12-02
-winterStartDate: 2026-01-05
-winterEndDate: 2026-04-02
-outDay: 2027-01-01
+fallStartDate: 2026-09-08
+fallEndDate: 2026-12-07
+winterStartDate: 2027-01-11
+winterEndDate: 2027-04-09
+outDay: 2028-01-01
# Holidays
holidaysList:
- - 20251013T
- - 20251027T
- - 20251028T
- - 20251029T
- - 20251030T
- - 20251130T
- - 20260216T
- - 20260217T
- - 20260218T
- - 20260219T
- - 20260220T
+ - 20261012T
+ - 20261026T
+ - 20261027T
+ - 20261028T
+ - 20261029T
+ - 20261030T
+ - 20270215T
+ - 20270216T
+ - 20270217T
+ - 20270218T
+ - 20270219T
+ - 20270326T
diff --git a/courseography.cabal b/courseography.cabal
index 653527376..1995b7953 100644
--- a/courseography.cabal
+++ b/courseography.cabal
@@ -1,6 +1,6 @@
cabal-version: 3.0
name: courseography
-version: 0.7.2.0
+version: 0.8.0.0
synopsis: Program and course planning app for the University of Toronto.
description: A web application designed to aid students in planning their courses
at the University of Toronto.
@@ -43,18 +43,20 @@ library
Export.ImageConversion,
Export.TimetableImageCreator,
MasterTemplate,
+ Models.Building,
Models.Course,
Models.Graph,
Models.Meeting,
Models.Program,
+ Models.Time,
Scripts,
Svg.Builder,
- Svg.Database,
Svg.Generator,
Svg.Parser,
Util.Blaze,
Util.Happstack,
Util.Helpers,
+ Util.Matrix,
WebParsing.ArtSciParser,
WebParsing.ParsecCombinators,
WebParsing.PostParser,
@@ -119,7 +121,9 @@ test-suite Tests
Controllers.GenerateControllerTests,
Controllers.GraphControllerTests,
Controllers.ProgramControllerTests,
+ Database.BuildingTests,
Database.CourseQueriesTests,
+ Database.TablesTests,
RequirementTests.ModifierTests,
RequirementTests.PostParserTests,
RequirementTests.PreProcessingTests,
@@ -187,10 +191,12 @@ executable courseography
Export.PdfGenerator,
Export.TimetableImageCreator,
MasterTemplate,
+ Models.Building,
Models.Course,
Models.Graph,
Models.Meeting,
Models.Program,
+ Models.Time,
Response,
Response.About,
Response.Draw,
@@ -200,13 +206,13 @@ executable courseography
Scripts,
Server,
Svg.Builder,
- Svg.Database,
Svg.Generator,
Svg.Parser,
Util.Blaze,
Util.Documentation,
Util.Happstack,
Util.Helpers,
+ Util.Matrix,
WebParsing.ArtSciParser,
WebParsing.Ligature,
WebParsing.ParsecCombinators,
diff --git a/graphs/csc2026.graphml b/graphs/csc2026.graphml
new file mode 100644
index 000000000..99c566119
--- /dev/null
+++ b/graphs/csc2026.graphml
@@ -0,0 +1,2524 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CSC108H1
+
+
+
+
+
+
+
+
+
+
+ CSC148H1
+
+
+
+
+
+
+
+
+
+
+ CSC165H1
+
+
+
+
+
+
+
+
+
+
+ CSC110Y1
+
+
+
+
+
+
+
+
+
+
+ CSC111H1
+
+
+
+
+
+
+
+
+
+
+ CSC236H1
+
+
+
+
+
+
+
+
+
+
+ CSC240H1
+
+
+
+
+
+
+
+
+
+
+ CSC263H1
+
+
+
+
+
+
+
+
+
+
+ CSC265H1
+
+
+
+
+
+
+
+
+
+
+ CSC373H1
+
+
+
+
+
+
+
+
+
+
+ CSC374H1
+
+
+
+
+
+
+
+
+
+
+ CSC473H1
+
+
+
+
+
+
+
+
+
+
+ CSC310H1
+
+
+
+
+
+
+
+
+
+
+ CSC438H1
+
+
+
+
+
+
+
+
+
+
+ CSC463H1
+
+
+
+
+
+
+
+
+
+
+ CSC207H1
+
+
+
+
+
+
+
+
+
+
+ CSC301H1
+
+
+
+
+
+
+
+
+
+
+ CSC302H1
+
+
+
+
+
+
+
+
+
+
+ CSC324H1
+
+
+
+
+
+
+
+
+
+
+ CSC488H1
+
+
+
+
+
+
+
+
+
+
+ CSC465H1
+
+
+
+
+
+
+
+
+
+
+ CSC410H1
+
+
+
+
+
+
+
+
+
+
+ CSC258H1
+
+
+
+
+
+
+
+
+
+
+ CSC209H1
+
+
+
+
+
+
+
+
+
+
+ CSC309H1
+
+
+
+
+
+
+
+
+
+
+ CSC343H1
+
+
+
+
+
+
+
+
+
+
+ CSC369H1
+
+
+
+
+
+
+
+
+
+
+ CSC469H1
+
+
+
+
+
+
+
+
+
+
+ CSC443H1
+
+
+
+
+
+
+
+
+
+
+ CSC385H1
+
+
+
+
+
+
+
+
+
+
+ CSC368H1
+
+
+
+
+
+
+
+
+
+
+ CSC457H1
+
+
+
+
+
+
+
+
+
+
+ CSC458H1
+
+
+
+
+
+
+
+
+
+
+ CSC303H1
+
+
+
+
+
+
+
+
+
+
+ CSC304H1
+
+
+
+
+
+
+
+
+
+
+ CSC300H1
+
+
+
+
+
+
+
+
+
+
+ CSC318H1
+
+
+
+
+
+
+
+
+
+
+ CSC428H1
+
+
+
+
+
+
+
+
+
+
+ CSC316H1
+
+
+
+
+
+
+
+
+
+
+ CSC404H1
+
+
+
+
+
+
+
+
+
+
+ CSC308H1
+
+
+
+
+
+
+
+
+
+
+ CSC454H1
+
+
+
+
+
+
+
+
+
+
+ CSC311H1
+
+
+
+
+
+
+
+
+
+
+ CSC384H1
+
+
+
+
+
+
+
+
+
+
+ CSC486H1
+
+
+
+
+
+
+
+
+
+
+ CSC412H1
+
+
+
+
+
+
+
+
+
+
+ CSC413H1
+
+
+
+
+
+
+
+
+
+
+ CSC401H1
+
+
+
+
+
+
+
+
+
+
+ CSC485H1
+
+
+
+
+
+
+
+
+
+
+ CSC320H1
+
+
+
+
+
+
+
+
+
+
+ CSC420H1
+
+
+
+
+
+
+
+
+
+
+ CSC317H1
+
+
+
+
+
+
+
+
+
+
+ CSC417H1
+
+
+
+
+
+
+
+
+
+
+ CSC419H1
+
+
+
+
+
+
+
+
+
+
+ CSC336H1
+
+
+
+
+
+
+
+
+
+
+ CSC436H1
+
+
+
+
+
+
+
+
+
+
+ CSC446H1
+
+
+
+
+
+
+
+
+
+
+ CSC456H1
+
+
+
+
+
+
+
+
+
+
+ CSC466H1
+
+
+
+
+
+
+
+
+
+
+ CSC194H1
+
+
+
+
+
+
+
+
+
+
+ CSC196H1
+
+
+
+
+
+
+
+
+
+
+ CSC197H1
+
+
+
+
+
+
+
+
+
+
+ CSC199H1
+
+
+
+
+
+
+
+
+
+
+ MAT135H1
+
+
+
+
+
+
+
+
+
+
+ MAT136H1
+
+
+
+
+
+
+
+
+
+
+ MAT223H1
+
+
+
+
+
+
+
+
+
+
+ MAT240H1
+
+
+
+
+
+
+
+
+
+
+ STA237H1/STA247H1/
+STA255H1/STA257H1
+
+
+
+
+
+
+
+
+
+
+
+ (MAT235H1, MAT236H1)/
+MAT237Y1/MAT257Y1
+
+
+
+
+
+
+
+
+
+
+
+ STA237H1/STA247H1/
+STA255H1/STA257H1
+
+
+
+
+
+
+
+
+
+
+
+ and
+
+
+
+
+
+
+
+
+
+
+
+ or
+
+
+
+
+
+
+
+
+
+
+
+ or
+
+
+
+
+
+
+
+
+
+
+
+ or
+
+
+
+
+
+
+
+
+
+
+
+ or
+
+
+
+
+
+
+
+
+
+
+
+ or
+
+
+
+
+
+
+
+
+
+
+
+ or
+
+
+
+
+
+
+
+
+
+
+
+ CSC373H1
+
+
+
+
+
+
+
+
+
+
+
+ or
+
+
+
+
+
+
+
+
+
+
+
+ CSC209H1
+
+
+
+
+
+
+
+
+
+
+
+ CSC263H1/CSC265H1
+
+
+
+
+
+
+
+
+
+
+
+ and
+
+
+
+
+
+
+
+
+
+
+
+ CSC301H1/CSC317H1/CSC318H1/
+CSC384H1/CSC417H1/CSC419H1
+
+
+
+
+
+
+
+
+
+
+
+ CSC111H1/CSC148H1,
+MAT223H1/MAT240H1
+
+
+
+
+
+
+
+
+
+
+
+ CSC207H1
+
+
+
+
+
+
+
+
+
+
+
+ and
+
+
+
+
+
+
+
+
+
+
+ CSC367H1
+
+
+
+
+
+
+
+
+
+
+
+ MAT223H1/
+MAT240H1
+
+
+
+
+
+
+
+
+
+
+ CSC364H1
+
+
+
+
+
+
+
+
+
+
+ CSC448H1
+
+
+
+
+
+
+
+
+
+
+ MAT224H1/
+MAT247H1
+
+
+
+
+
+
+
+
+
+
+ MAT148H1
+
+
+
+
+
+
+
+
+
+
+ MAT149H1
+
+
+
+
+
+
+
+
+
+
+ MAT158H1
+
+
+
+
+
+
+
+
+
+
+ MAT159H1
+
+
+
+
+
+
+
+
+
+
+ MAT235H1
+
+
+
+
+
+
+
+
+
+
+ MAT236H1
+
+
+
+
+
+
+
+
+
+
+ MAT237Y1
+
+
+
+
+
+
+
+
+
+
+ MAT257Y1
+
+
+
+
+
+
+
+
+
+
+
+ or
+
+
+
+
+
+
+
+
+
+
+ CSC491H1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/graphs/csc2026.svg b/graphs/csc2026.svg
new file mode 100644
index 000000000..88af4e4b7
--- /dev/null
+++ b/graphs/csc2026.svg
@@ -0,0 +1,4740 @@
+
+
+
+
diff --git a/package.json b/package.json
index 54d48b04d..5db411f7a 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "courseography",
- "version": "0.7.2",
+ "version": "0.8.0",
"repository": "git@github.com:Courseography/courseography.git",
"author": "David Liu ",
"license": "GPL-3.0",
@@ -25,15 +25,15 @@
]
},
"dependencies": {
- "@babel/runtime": "^7.29.2",
+ "@babel/runtime": "^7.29.7",
"@emotion/react": "^11.14.0",
"@emotion/styled": "^11.14.1",
"@fortawesome/fontawesome-svg-core": "^7.2.0",
"@fortawesome/free-solid-svg-icons": "^7.2.0",
"@fortawesome/react-fontawesome": "^3.3.1",
"@mui/material": "^7.3.1",
- "ag-grid-community": "^35.2.0",
- "ag-grid-react": "^35.2.0",
+ "ag-grid-community": "^35.3.1",
+ "ag-grid-react": "^35.3.1",
"bootstrap": "^5.3.3",
"core-js": "^3.42.0",
"formik": "^2.4.6",
@@ -41,19 +41,19 @@
"jquery": "^3.7.1",
"leaflet": "^1.9.3",
"lodash": "^4.18.1",
- "react": "^19.2.4",
- "react-dom": "^19.2.4",
+ "react": "^19.2.7",
+ "react-dom": "^19.2.7",
"react-error-boundary": "^5.0.0",
"react-leaflet": "^4.2.1",
"react-modal": "^3.16.1",
"react-tooltip": "^5.28.0"
},
"devDependencies": {
- "@babel/core": "^7.29.0",
- "@babel/eslint-parser": "^7.28.6",
+ "@babel/core": "^7.29.7",
+ "@babel/eslint-parser": "^7.29.7",
"@babel/plugin-proposal-class-properties": "^7.18.6",
- "@babel/preset-env": "^7.29.3",
- "@babel/preset-react": "^7.28.5",
+ "@babel/preset-env": "^7.29.7",
+ "@babel/preset-react": "^7.29.7",
"@eslint/compat": "^1.2.9",
"@testing-library/dom": "^10.4.0",
"@testing-library/react": "^16.0.1",
@@ -70,8 +70,8 @@
"globals": "^15.14.0",
"html-loader": "^5.1.0",
"husky": "^9.1.7",
- "jest": "^30.3.0",
- "jest-environment-jsdom": "^30.3.0",
+ "jest": "^30.4.2",
+ "jest-environment-jsdom": "^30.4.1",
"lint-staged": "^16.2.7",
"markdown-loader": "^8.0.0",
"mini-css-extract-plugin": "^2.9.2",
@@ -87,7 +87,7 @@
"stylelint-config-standard-scss": "^17.0.0",
"webpack": "^5.105.3",
"webpack-cli": "^6.0.1",
- "webpack-dev-server": "^5.2.4",
+ "webpack-dev-server": "^5.2.5",
"webpack-merge": "^6.0.1"
},
"packageManager": "yarn@3.3.1",
diff --git a/style/app.scss b/style/app.scss
index 6a3cb4d5c..9918e1b69 100644
--- a/style/app.scss
+++ b/style/app.scss
@@ -65,6 +65,7 @@ html {
}
body {
+ background-color: #f0f8f5;
color: #222;
font-family: "Trebuchet MS", Arial, sans-serif;
font-size: 17pt;
@@ -511,7 +512,7 @@ ol {
#container {
background: #f0f5f8;
- height: calc(100% - 50px);
+ height: 100%;
position: relative;
width: 100%;
}
diff --git a/yarn.lock b/yarn.lock
index be763301a..a70a3048b 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -18,98 +18,50 @@ __metadata:
languageName: node
linkType: hard
-"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.27.1":
- version: 7.27.1
- resolution: "@babel/code-frame@npm:7.27.1"
- dependencies:
- "@babel/helper-validator-identifier": ^7.27.1
- js-tokens: ^4.0.0
- picocolors: ^1.1.1
- checksum: 5874edc5d37406c4a0bb14cf79c8e51ad412fb0423d176775ac14fc0259831be1bf95bdda9c2aa651126990505e09a9f0ed85deaa99893bc316d2682c5115bdc
- languageName: node
- linkType: hard
-
-"@babel/code-frame@npm:^7.28.6, @babel/code-frame@npm:^7.29.0":
- version: 7.29.0
- resolution: "@babel/code-frame@npm:7.29.0"
+"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.27.1, @babel/code-frame@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/code-frame@npm:7.29.7"
dependencies:
- "@babel/helper-validator-identifier": ^7.28.5
+ "@babel/helper-validator-identifier": ^7.29.7
js-tokens: ^4.0.0
picocolors: ^1.1.1
- checksum: 39f5b303757e4d63bbff8133e251094cd4f952b46e3fa9febc7368d907583911d6a1eded6090876dc1feeff5cf6e134fb19b706f8d58d26c5402cd50e5e1aeb2
- languageName: node
- linkType: hard
-
-"@babel/compat-data@npm:^7.27.2":
- version: 7.28.5
- resolution: "@babel/compat-data@npm:7.28.5"
- checksum: d7bcb3ee713752dc27b89800bfb39f9ac5f3edc46b4f5bb9906e1fe6b6110c7b245dd502602ea66f93790480c228605e9a601f27c07016f24b56772e97bedbdf
- languageName: node
- linkType: hard
-
-"@babel/compat-data@npm:^7.28.6":
- version: 7.29.0
- resolution: "@babel/compat-data@npm:7.29.0"
- checksum: ad19db279dfd06cbe91b505d03be00d603c6d3fcc141cfc14f4ace5c558193e9b6aae4788cb01fd209c4c850e52d73c8f3c247680e3c0d84fa17ab8b3d50c808
+ checksum: 21b12fe2356e36f6cc3cd8a3721f878bfeea80ce38356979a0518b47b3aafdcc0bd263da75ccc9d51c64d40b1b6df00e768ce2446acb0b7cbec0ae8f905663ad
languageName: node
linkType: hard
-"@babel/compat-data@npm:^7.29.3":
- version: 7.29.3
- resolution: "@babel/compat-data@npm:7.29.3"
- checksum: 977192bab334f66bc8150026340a33ed318c1a7ce18a9323f4c1b86f8ed1d8645bfe5600242bf682717c05c46a4ff06225242207c1d599f4296914b9b4e3efb5
+"@babel/compat-data@npm:^7.28.6, @babel/compat-data@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/compat-data@npm:7.29.7"
+ checksum: 4424f8fb72f61657c8e811bdf7e5c69af212a15fe362711162b2e00b82f0e0588fb8259ecd9a70c5490562bf51d408b0cb92f277ead71a2390ddddfe7283b35d
languageName: node
linkType: hard
-"@babel/core@npm:^7.0.0, @babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.23.9, @babel/core@npm:^7.27.4":
- version: 7.28.5
- resolution: "@babel/core@npm:7.28.5"
+"@babel/core@npm:^7.0.0, @babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.23.9, @babel/core@npm:^7.27.4, @babel/core@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/core@npm:7.29.7"
dependencies:
- "@babel/code-frame": ^7.27.1
- "@babel/generator": ^7.28.5
- "@babel/helper-compilation-targets": ^7.27.2
- "@babel/helper-module-transforms": ^7.28.3
- "@babel/helpers": ^7.28.4
- "@babel/parser": ^7.28.5
- "@babel/template": ^7.27.2
- "@babel/traverse": ^7.28.5
- "@babel/types": ^7.28.5
+ "@babel/code-frame": ^7.29.7
+ "@babel/generator": ^7.29.7
+ "@babel/helper-compilation-targets": ^7.29.7
+ "@babel/helper-module-transforms": ^7.29.7
+ "@babel/helpers": ^7.29.7
+ "@babel/parser": ^7.29.7
+ "@babel/template": ^7.29.7
+ "@babel/traverse": ^7.29.7
+ "@babel/types": ^7.29.7
"@jridgewell/remapping": ^2.3.5
convert-source-map: ^2.0.0
debug: ^4.1.0
gensync: ^1.0.0-beta.2
json5: ^2.2.3
semver: ^6.3.1
- checksum: 1ee35b20448f73e9d531091ad4f9e8198dc8f0cebb783263fbff1807342209882ddcaf419be04111326b6f0e494222f7055d71da316c437a6a784d230c11ab9f
+ checksum: 95149e98ffde5b9d903459c284fbcf1f9ad8b3a833d69fdfe1aa7185821a102af1925324fe2892caf4b643b151c1dc948510d1e25a5e3c6c6c6f17f6712eb38e
languageName: node
linkType: hard
-"@babel/core@npm:^7.29.0":
- version: 7.29.0
- resolution: "@babel/core@npm:7.29.0"
- dependencies:
- "@babel/code-frame": ^7.29.0
- "@babel/generator": ^7.29.0
- "@babel/helper-compilation-targets": ^7.28.6
- "@babel/helper-module-transforms": ^7.28.6
- "@babel/helpers": ^7.28.6
- "@babel/parser": ^7.29.0
- "@babel/template": ^7.28.6
- "@babel/traverse": ^7.29.0
- "@babel/types": ^7.29.0
- "@jridgewell/remapping": ^2.3.5
- convert-source-map: ^2.0.0
- debug: ^4.1.0
- gensync: ^1.0.0-beta.2
- json5: ^2.2.3
- semver: ^6.3.1
- checksum: 85e1df6e213382c46dee27bcd07ed9202fa108a85bb74eb37be656308fd949349171ad2aa17cc84cf0720c908dc9ea6309d25e64d2a7fcdaa63721ce0c67c10b
- languageName: node
- linkType: hard
-
-"@babel/eslint-parser@npm:^7.28.6":
- version: 7.28.6
- resolution: "@babel/eslint-parser@npm:7.28.6"
+"@babel/eslint-parser@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/eslint-parser@npm:7.29.7"
dependencies:
"@nicolo-ribaudo/eslint-scope-5-internals": 5.1.1-v1
eslint-visitor-keys: ^2.1.0
@@ -117,128 +69,72 @@ __metadata:
peerDependencies:
"@babel/core": ^7.11.0
eslint: ^7.5.0 || ^8.0.0 || ^9.0.0
- checksum: 6d789f16842c6f47a6a15f8159ef822e4bf75e8d15f85be2a813098ca4ba49703590ff2cdd56c78cc8816f5779b687cd6245ada4049c25e923e8e40132ace501
- languageName: node
- linkType: hard
-
-"@babel/generator@npm:^7.27.5, @babel/generator@npm:^7.28.5":
- version: 7.28.5
- resolution: "@babel/generator@npm:7.28.5"
- dependencies:
- "@babel/parser": ^7.28.5
- "@babel/types": ^7.28.5
- "@jridgewell/gen-mapping": ^0.3.12
- "@jridgewell/trace-mapping": ^0.3.28
- jsesc: ^3.0.2
- checksum: 3e86fa0197bb33394a85a73dbbca92bb1b3f250a30294c7e327359c0978ad90f36f3d71c7f2965a3fc349cfa82becc8f87e7421c75796c8bc48dd9010dd866d1
+ checksum: def39180054d2bdf2ab6e119d50e2746a60531a410496e973c08f5f16daa167722d7c8be96d759837a79b3a763d3bf9b188a0c55671e08d0c1e73a81617e9aa1
languageName: node
linkType: hard
-"@babel/generator@npm:^7.29.0":
- version: 7.29.0
- resolution: "@babel/generator@npm:7.29.0"
+"@babel/generator@npm:^7.27.5, @babel/generator@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/generator@npm:7.29.7"
dependencies:
- "@babel/parser": ^7.29.0
- "@babel/types": ^7.29.0
+ "@babel/parser": ^7.29.7
+ "@babel/types": ^7.29.7
"@jridgewell/gen-mapping": ^0.3.12
"@jridgewell/trace-mapping": ^0.3.28
jsesc: ^3.0.2
- checksum: 7d338a9278a401764605fac87f3e223c70b50be15ebd6cf856249db9554133a620cf841ff62e4dfcc46ca59f2c16b62a2ce12891d48e47ed987f19bfbfd5469e
+ checksum: 6bb8f4dc0641dca19e81f5daab37ed1a1f5a78e4d702eb79a4275739f773975134e250090c182cf1eea35d9bd65e634b9d9babf66600ffdcf8ac62fa40f3b980
languageName: node
linkType: hard
-"@babel/helper-annotate-as-pure@npm:^7.27.1, @babel/helper-annotate-as-pure@npm:^7.27.3":
- version: 7.27.3
- resolution: "@babel/helper-annotate-as-pure@npm:7.27.3"
+"@babel/helper-annotate-as-pure@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/helper-annotate-as-pure@npm:7.29.7"
dependencies:
- "@babel/types": ^7.27.3
- checksum: 63863a5c936ef82b546ca289c9d1b18fabfc24da5c4ee382830b124e2e79b68d626207febc8d4bffc720f50b2ee65691d7d12cc0308679dee2cd6bdc926b7190
+ "@babel/types": ^7.29.7
+ checksum: acd9e128de634a5144b5d622357d018fa616de45f64c74e42007c048dd15d0a0be213f4d5a2bf02307bdaddf053791b87900a99d183de828c08dc3b556329009
languageName: node
linkType: hard
-"@babel/helper-compilation-targets@npm:^7.27.1, @babel/helper-compilation-targets@npm:^7.27.2":
- version: 7.27.2
- resolution: "@babel/helper-compilation-targets@npm:7.27.2"
+"@babel/helper-compilation-targets@npm:^7.28.6, @babel/helper-compilation-targets@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/helper-compilation-targets@npm:7.29.7"
dependencies:
- "@babel/compat-data": ^7.27.2
- "@babel/helper-validator-option": ^7.27.1
+ "@babel/compat-data": ^7.29.7
+ "@babel/helper-validator-option": ^7.29.7
browserslist: ^4.24.0
lru-cache: ^5.1.1
semver: ^6.3.1
- checksum: 7b95328237de85d7af1dea010a4daa28e79f961dda48b652860d5893ce9b136fc8b9ea1f126d8e0a24963b09ba5c6631dcb907b4ce109b04452d34a6ae979807
- languageName: node
- linkType: hard
-
-"@babel/helper-compilation-targets@npm:^7.28.6":
- version: 7.28.6
- resolution: "@babel/helper-compilation-targets@npm:7.28.6"
- dependencies:
- "@babel/compat-data": ^7.28.6
- "@babel/helper-validator-option": ^7.27.1
- browserslist: ^4.24.0
- lru-cache: ^5.1.1
- semver: ^6.3.1
- checksum: 8151e36b74eb1c5e414fe945c189436421f7bfa011884de5be3dd7fd77f12f1f733ff7c982581dfa0a49d8af724450243c2409427114b4a6cfeb8333259d001c
- languageName: node
- linkType: hard
-
-"@babel/helper-create-class-features-plugin@npm:^7.18.6":
- version: 7.28.3
- resolution: "@babel/helper-create-class-features-plugin@npm:7.28.3"
- dependencies:
- "@babel/helper-annotate-as-pure": ^7.27.3
- "@babel/helper-member-expression-to-functions": ^7.27.1
- "@babel/helper-optimise-call-expression": ^7.27.1
- "@babel/helper-replace-supers": ^7.27.1
- "@babel/helper-skip-transparent-expression-wrappers": ^7.27.1
- "@babel/traverse": ^7.28.3
- semver: ^6.3.1
- peerDependencies:
- "@babel/core": ^7.0.0
- checksum: 6d918e5e9c88ad1a262ab7b1a3caede1bbf95f8276c96846d8b0c1af251c85a0c868a9f1bbbaebdeb199e44dfd0e10fbe22935e56bedd1aa41ba4a7162bfa86c
- languageName: node
- linkType: hard
-
-"@babel/helper-create-class-features-plugin@npm:^7.28.6":
- version: 7.28.6
- resolution: "@babel/helper-create-class-features-plugin@npm:7.28.6"
- dependencies:
- "@babel/helper-annotate-as-pure": ^7.27.3
- "@babel/helper-member-expression-to-functions": ^7.28.5
- "@babel/helper-optimise-call-expression": ^7.27.1
- "@babel/helper-replace-supers": ^7.28.6
- "@babel/helper-skip-transparent-expression-wrappers": ^7.27.1
- "@babel/traverse": ^7.28.6
- semver: ^6.3.1
- peerDependencies:
- "@babel/core": ^7.0.0
- checksum: f886ab302a83f8e410384aa635806b22374897fd9e3387c737ab9d91d1214bf9f7e57ae92619bd25dea63c9c0a49b25b44eb807873332e0eb9549219adc73639
+ checksum: f60a943937f4eba0e671aa28551cb45569fd081c1e30a52ede167860475dc0417f3dbdf2a0fa3f086965595c7070aa76308da60cc0319860de05db4ed2a431f7
languageName: node
linkType: hard
-"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.27.1":
- version: 7.27.1
- resolution: "@babel/helper-create-regexp-features-plugin@npm:7.27.1"
+"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/helper-create-class-features-plugin@npm:7.29.7"
dependencies:
- "@babel/helper-annotate-as-pure": ^7.27.1
- regexpu-core: ^6.2.0
+ "@babel/helper-annotate-as-pure": ^7.29.7
+ "@babel/helper-member-expression-to-functions": ^7.29.7
+ "@babel/helper-optimise-call-expression": ^7.29.7
+ "@babel/helper-replace-supers": ^7.29.7
+ "@babel/helper-skip-transparent-expression-wrappers": ^7.29.7
+ "@babel/traverse": ^7.29.7
semver: ^6.3.1
peerDependencies:
"@babel/core": ^7.0.0
- checksum: 2ede6bbad0016a9262fd281ce8f1a5d69e6179dcec4ea282830e924c29a29b66b0544ecb92e4ef4acdaf2c4c990931d7dc442dbcd6a8bcec4bad73923ef70934
+ checksum: c954e4bfe423a277cdcbad64344637cf696ddcd80085fce5f284b02a0c700af0d2d7b61468a06d9e296e948de60ece138921b65564aec023a9d9594f5d9fe18d
languageName: node
linkType: hard
-"@babel/helper-create-regexp-features-plugin@npm:^7.28.5":
- version: 7.28.5
- resolution: "@babel/helper-create-regexp-features-plugin@npm:7.28.5"
+"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/helper-create-regexp-features-plugin@npm:7.29.7"
dependencies:
- "@babel/helper-annotate-as-pure": ^7.27.3
+ "@babel/helper-annotate-as-pure": ^7.29.7
regexpu-core: ^6.3.1
semver: ^6.3.1
peerDependencies:
"@babel/core": ^7.0.0
- checksum: de202103e6ff8cd8da0d62eb269fcceb29857f3fa16173f0ff38188fd514e9ad4901aef1d590ff8ba25381644b42eaf70ad9ba91fda59fe7aa6a5e694cdde267
+ checksum: 702a34db6c064a2c26675b717b3af88b8acaeb5341e2285792a873a67a16ec4cbe987ba72e055db198b2e03ead05600d8c9c0c1e7436708e95865bbfb3516026
languageName: node
linkType: hard
@@ -257,293 +153,219 @@ __metadata:
languageName: node
linkType: hard
-"@babel/helper-globals@npm:^7.28.0":
- version: 7.28.0
- resolution: "@babel/helper-globals@npm:7.28.0"
- checksum: d8d7b91c12dad1ee747968af0cb73baf91053b2bcf78634da2c2c4991fb45ede9bd0c8f9b5f3254881242bc0921218fcb7c28ae885477c25177147e978ce4397
- languageName: node
- linkType: hard
-
-"@babel/helper-member-expression-to-functions@npm:^7.27.1":
- version: 7.27.1
- resolution: "@babel/helper-member-expression-to-functions@npm:7.27.1"
- dependencies:
- "@babel/traverse": ^7.27.1
- "@babel/types": ^7.27.1
- checksum: b13a3d120015a6fd2f6e6c2ff789cd12498745ef028710cba612cfb751b91ace700c3f96c1689228d1dcb41e9d4cf83d6dff8627dcb0c8da12d79440e783c6b8
- languageName: node
- linkType: hard
-
-"@babel/helper-member-expression-to-functions@npm:^7.28.5":
- version: 7.28.5
- resolution: "@babel/helper-member-expression-to-functions@npm:7.28.5"
- dependencies:
- "@babel/traverse": ^7.28.5
- "@babel/types": ^7.28.5
- checksum: 447d385233bae2eea713df1785f819b5a5ca272950740da123c42d23f491045120f0fbbb5609c091f7a9bbd40f289a442846dde0cb1bf0c59440fa093690cf7c
+"@babel/helper-globals@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/helper-globals@npm:7.29.7"
+ checksum: 6deaf9846a415c7f110ac153e8c3d81e3543c9b685aa9fd9a59b4235f402e2b760129d3df49466daea9162f0cf73ff98a0ec7f180448a3449ca14ae5e1117b42
languageName: node
linkType: hard
-"@babel/helper-module-imports@npm:^7.16.7, @babel/helper-module-imports@npm:^7.27.1":
- version: 7.27.1
- resolution: "@babel/helper-module-imports@npm:7.27.1"
+"@babel/helper-member-expression-to-functions@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/helper-member-expression-to-functions@npm:7.29.7"
dependencies:
- "@babel/traverse": ^7.27.1
- "@babel/types": ^7.27.1
- checksum: 92d01c71c0e4aacdc2babce418a9a1a27a8f7d770a210ffa0f3933f321befab18b655bc1241bebc40767516731de0b85639140c42e45a8210abe1e792f115b28
+ "@babel/traverse": ^7.29.7
+ "@babel/types": ^7.29.7
+ checksum: 79d5f095b4bafadff3d1ec316d9f17ec85940fece957db62dd523b08e142da73c53180d1bce2fdc4d523e3889bb01b39bea70ad968b6e2f4dbdc66ebd1055b8a
languageName: node
linkType: hard
-"@babel/helper-module-imports@npm:^7.28.6":
- version: 7.28.6
- resolution: "@babel/helper-module-imports@npm:7.28.6"
+"@babel/helper-module-imports@npm:^7.16.7, @babel/helper-module-imports@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/helper-module-imports@npm:7.29.7"
dependencies:
- "@babel/traverse": ^7.28.6
- "@babel/types": ^7.28.6
- checksum: 437513aa029898b588a38f7991d7656c539b22f595207d85d0c407240c9e3f2aff8b9d0d7115fdedc91e7fdce4465100549a052024e2fba6a810bcbb7584296b
+ "@babel/traverse": ^7.29.7
+ "@babel/types": ^7.29.7
+ checksum: ad5a768fc9c162620b7f5b7645c6c2efee1e6f9df432bb79651888661a7e4cd91dac7192f3ddcfd6de4778a089e9fb30fafae768156aa73a07eeca425f64e849
languageName: node
linkType: hard
-"@babel/helper-module-transforms@npm:^7.27.1, @babel/helper-module-transforms@npm:^7.28.3":
- version: 7.28.3
- resolution: "@babel/helper-module-transforms@npm:7.28.3"
+"@babel/helper-module-transforms@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/helper-module-transforms@npm:7.29.7"
dependencies:
- "@babel/helper-module-imports": ^7.27.1
- "@babel/helper-validator-identifier": ^7.27.1
- "@babel/traverse": ^7.28.3
+ "@babel/helper-module-imports": ^7.29.7
+ "@babel/helper-validator-identifier": ^7.29.7
+ "@babel/traverse": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0
- checksum: 7cf7b79da0fa626d6c84bfc7b35c079a2559caecaa2ff645b0f1db0d741507aa4df6b5b98a3283e8ac4e89094af271d805bf5701e5c4f916e622797b7c8cbb18
+ checksum: 484f6d02975d304f680d44e331d4b832d67e51917483985eab7b853664452b5a627366e7a9d421200ec772a123213a591e28b40636566afeac189411ba3f45a8
languageName: node
linkType: hard
-"@babel/helper-module-transforms@npm:^7.28.6":
- version: 7.28.6
- resolution: "@babel/helper-module-transforms@npm:7.28.6"
+"@babel/helper-optimise-call-expression@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/helper-optimise-call-expression@npm:7.29.7"
dependencies:
- "@babel/helper-module-imports": ^7.28.6
- "@babel/helper-validator-identifier": ^7.28.5
- "@babel/traverse": ^7.28.6
- peerDependencies:
- "@babel/core": ^7.0.0
- checksum: 522f7d1d08b5e2ccd4ec912aca879bd1506af78d1fb30f46e3e6b4bb69c6ae6ab4e379a879723844230d27dc6d04a55b03f5215cd3141b7a2b40bb4a02f71a9f
+ "@babel/types": ^7.29.7
+ checksum: 6b477e01b403fd48349336cb1d94722bff4fa54af2841b5fa950c557b796f4ecc14724052252ed1362ccfc23d1c09c54dc03e182fea59d3dc5bd69f8c626ba25
languageName: node
linkType: hard
-"@babel/helper-optimise-call-expression@npm:^7.27.1":
- version: 7.27.1
- resolution: "@babel/helper-optimise-call-expression@npm:7.27.1"
- dependencies:
- "@babel/types": ^7.27.1
- checksum: 0fb7ee824a384529d6b74f8a58279f9b56bfe3cce332168067dddeab2552d8eeb56dc8eaf86c04a3a09166a316cb92dfc79c4c623cd034ad4c563952c98b464f
+"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.27.1, @babel/helper-plugin-utils@npm:^7.28.6, @babel/helper-plugin-utils@npm:^7.29.7, @babel/helper-plugin-utils@npm:^7.8.0":
+ version: 7.29.7
+ resolution: "@babel/helper-plugin-utils@npm:7.29.7"
+ checksum: b0a183abcc6670afa4861425fa428217d8ebadce062d5b43117919e8715f820080fd63bbfcf0e43c6e0e7d21a96b21f635c46dda80bdb0ce7e8a762ebee1d8d9
languageName: node
linkType: hard
-"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.27.1, @babel/helper-plugin-utils@npm:^7.8.0":
- version: 7.27.1
- resolution: "@babel/helper-plugin-utils@npm:7.27.1"
- checksum: 5d715055301badab62bdb2336075a77f8dc8bd290cad2bc1b37ea3bf1b3efc40594d308082229f239deb4d6b5b80b0a73bce000e595ea74416e0339c11037047
- languageName: node
- linkType: hard
-
-"@babel/helper-plugin-utils@npm:^7.28.6":
- version: 7.28.6
- resolution: "@babel/helper-plugin-utils@npm:7.28.6"
- checksum: a0b4caab5e2180b215faa4d141ceac9e82fad9d446b8023eaeb8d82a6e62024726675b07fe8e616dd12f34e2bb59747e8d57aa8adab3e0717d1b8d691b118379
- languageName: node
- linkType: hard
-
-"@babel/helper-remap-async-to-generator@npm:^7.27.1":
- version: 7.27.1
- resolution: "@babel/helper-remap-async-to-generator@npm:7.27.1"
+"@babel/helper-remap-async-to-generator@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/helper-remap-async-to-generator@npm:7.29.7"
dependencies:
- "@babel/helper-annotate-as-pure": ^7.27.1
- "@babel/helper-wrap-function": ^7.27.1
- "@babel/traverse": ^7.27.1
+ "@babel/helper-annotate-as-pure": ^7.29.7
+ "@babel/helper-wrap-function": ^7.29.7
+ "@babel/traverse": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0
- checksum: 0747397ba013f87dbf575454a76c18210d61c7c9af0f697546b4bcac670b54ddc156330234407b397f0c948738c304c228e0223039bc45eab4fbf46966a5e8cc
+ checksum: 98338ad6e34ebb4be2dc23f8d9199d28d6d8ac6a2ce8b90fe9efdf3595b39748321528d9f2540ec0586a6e45f7c84f5f623fbf980c5efa7fa9ba7ce837ea4b20
languageName: node
linkType: hard
-"@babel/helper-replace-supers@npm:^7.27.1":
- version: 7.27.1
- resolution: "@babel/helper-replace-supers@npm:7.27.1"
+"@babel/helper-replace-supers@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/helper-replace-supers@npm:7.29.7"
dependencies:
- "@babel/helper-member-expression-to-functions": ^7.27.1
- "@babel/helper-optimise-call-expression": ^7.27.1
- "@babel/traverse": ^7.27.1
+ "@babel/helper-member-expression-to-functions": ^7.29.7
+ "@babel/helper-optimise-call-expression": ^7.29.7
+ "@babel/traverse": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0
- checksum: 3690266c304f21008690ba68062f889a363583cabc13c3d033b94513953147af3e0a3fdb48fa1bb9fa3734b64e221fc65e5222ab70837f02321b7225f487c6ef
+ checksum: f7eb9a6b035d9d45250c880eb09605f95998998e828ec90759ed45764fe0abeee583419969de8b8dee551163dff914c9fc6ace90c1d819c56c23146f8df525db
languageName: node
linkType: hard
-"@babel/helper-replace-supers@npm:^7.28.6":
- version: 7.28.6
- resolution: "@babel/helper-replace-supers@npm:7.28.6"
+"@babel/helper-skip-transparent-expression-wrappers@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.29.7"
dependencies:
- "@babel/helper-member-expression-to-functions": ^7.28.5
- "@babel/helper-optimise-call-expression": ^7.27.1
- "@babel/traverse": ^7.28.6
- peerDependencies:
- "@babel/core": ^7.0.0
- checksum: aa6530a52010883b6be88465e3b9e789509786a40203650a23a51c315f7442b196e5925fb8e2d66d1e3dc2c604cdc817bd8c5c170dbb322ab5ebc7486fd8a022
- languageName: node
- linkType: hard
-
-"@babel/helper-skip-transparent-expression-wrappers@npm:^7.27.1":
- version: 7.27.1
- resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.27.1"
- dependencies:
- "@babel/traverse": ^7.27.1
- "@babel/types": ^7.27.1
- checksum: 4f380c5d0e0769fa6942a468b0c2d7c8f0c438f941aaa88f785f8752c103631d0904c7b4e76207a3b0e6588b2dec376595370d92ca8f8f1b422c14a69aa146d4
- languageName: node
- linkType: hard
-
-"@babel/helper-string-parser@npm:^7.27.1":
- version: 7.27.1
- resolution: "@babel/helper-string-parser@npm:7.27.1"
- checksum: 0a8464adc4b39b138aedcb443b09f4005d86207d7126e5e079177e05c3116107d856ec08282b365e9a79a9872f40f4092a6127f8d74c8a01c1ef789dacfc25d6
- languageName: node
- linkType: hard
-
-"@babel/helper-validator-identifier@npm:^7.27.1, @babel/helper-validator-identifier@npm:^7.28.5":
- version: 7.28.5
- resolution: "@babel/helper-validator-identifier@npm:7.28.5"
- checksum: 5a251a6848e9712aea0338f659a1a3bd334d26219d5511164544ca8ec20774f098c3a6661e9da65a0d085c745c00bb62c8fada38a62f08fa1f8053bc0aeb57e4
+ "@babel/traverse": ^7.29.7
+ "@babel/types": ^7.29.7
+ checksum: a5800bfcdca6cef7f6fe33ac02a0f05ff33da9746f97806553f249733f7ba8400290a17f3831d7faa5d91656f254ab749931f53c8a29f301d958d7dd00499637
languageName: node
linkType: hard
-"@babel/helper-validator-option@npm:^7.27.1":
- version: 7.27.1
- resolution: "@babel/helper-validator-option@npm:7.27.1"
- checksum: db73e6a308092531c629ee5de7f0d04390835b21a263be2644276cb27da2384b64676cab9f22cd8d8dbd854c92b1d7d56fc8517cf0070c35d1c14a8c828b0903
+"@babel/helper-string-parser@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/helper-string-parser@npm:7.29.7"
+ checksum: 4c229d2c2296b6c94439e87ecddf3a93cee3ffd2d4cee0b4c28079275bed3de4e02cd943e4cb06036d1d9407549c4e3423006b61a46215c482fce902ee02bc0b
languageName: node
linkType: hard
-"@babel/helper-wrap-function@npm:^7.27.1":
- version: 7.28.3
- resolution: "@babel/helper-wrap-function@npm:7.28.3"
- dependencies:
- "@babel/template": ^7.27.2
- "@babel/traverse": ^7.28.3
- "@babel/types": ^7.28.2
- checksum: 0ebdfdc918fdd0c1cf6ff15ba4c664974d0cdf21a017af560d58b00c379df3bf2e55f13a44fe3225668bca169da174f6cb97a96c4e987fb728fdb8f9a39db302
+"@babel/helper-validator-identifier@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/helper-validator-identifier@npm:7.29.7"
+ checksum: cc7779e96fe9c9478c96ca4bf04fc338b95b501aa5abe78178307dea282d4a5dc23d443efb12dde8e8c5636d03dd00e443532e6ed7f15fa7977349af1f87ba4d
languageName: node
linkType: hard
-"@babel/helpers@npm:^7.28.4":
- version: 7.28.4
- resolution: "@babel/helpers@npm:7.28.4"
- dependencies:
- "@babel/template": ^7.27.2
- "@babel/types": ^7.28.4
- checksum: a8706219e0bd60c18bbb8e010aa122e9b14e7e7e67c21cc101e6f1b5e79dcb9a18d674f655997f85daaf421aa138cf284710bb04371a2255a0a3137f097430b4
+"@babel/helper-validator-option@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/helper-validator-option@npm:7.29.7"
+ checksum: aeb6aa966f59300d3cc2fea7c68e1dfd7ad011fc10e535c8e2b2de3094b27c859428dc7220f16420350f8b1cde99da120b673be04bcb0c2f37b56258c96bed58
languageName: node
linkType: hard
-"@babel/helpers@npm:^7.28.6":
- version: 7.28.6
- resolution: "@babel/helpers@npm:7.28.6"
+"@babel/helper-wrap-function@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/helper-wrap-function@npm:7.29.7"
dependencies:
- "@babel/template": ^7.28.6
- "@babel/types": ^7.28.6
- checksum: 4f3d555ec20dde40a2fcb244c86bfd9ec007b57ec9b30a9d04334c1ea2c1670bb82c151024124e1ab27ccf0b1f5ad30167633457a7c9ffbf4064fad2643f12fc
+ "@babel/template": ^7.29.7
+ "@babel/traverse": ^7.29.7
+ "@babel/types": ^7.29.7
+ checksum: 2e6dfca94a10a3672a6b0ff337c80f27d7c66f3ea110969e833529a2d5bfbb5e53ab40abf6fad4657b8f810fcab2e3d56998f8da89bfe82a58267c5e8bc06e9a
languageName: node
linkType: hard
-"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.27.2, @babel/parser@npm:^7.28.5":
- version: 7.28.5
- resolution: "@babel/parser@npm:7.28.5"
+"@babel/helpers@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/helpers@npm:7.29.7"
dependencies:
- "@babel/types": ^7.28.5
- bin:
- parser: ./bin/babel-parser.js
- checksum: 5c2456e3f26c70d4a3ce1a220b529a91a2df26c54a2894fd0dea2342699ea1067ffdda9f0715eeab61da46ff546fd5661bc70be6d8d11977cbe21f5f0478819a
+ "@babel/template": ^7.29.7
+ "@babel/types": ^7.29.7
+ checksum: b5c4ed0ce5983c5599cd01b3948444b77ba2fa47bf6282a82afdcbe45eb8cc5b7986194e3920ef2760f533c6a775504e6b00a66960c0a3bc52909920b8433908
languageName: node
linkType: hard
-"@babel/parser@npm:^7.28.6, @babel/parser@npm:^7.29.0":
- version: 7.29.0
- resolution: "@babel/parser@npm:7.29.0"
+"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/parser@npm:7.29.7"
dependencies:
- "@babel/types": ^7.29.0
+ "@babel/types": ^7.29.7
bin:
parser: ./bin/babel-parser.js
- checksum: b4a1bd3cf46712e439286db9a4105dfa741b5a7720fa1f38f33719cf4f1da9df9fc5b6686128890bd6a62debba287d8d472af153dd629fd4a0a44fe55413cd68
+ checksum: 56f4c32a371004d3becd0a960a85a3bba4ec4df73d5e202aa3fe6473328b243162c6be9a510be1c12ed1825f5ce9ff1ea5cc357298631e8acf2e5b8da9f5a961
languageName: node
linkType: hard
-"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.28.5":
- version: 7.28.5
- resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.28.5"
+"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.29.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.27.1
- "@babel/traverse": ^7.28.5
+ "@babel/helper-plugin-utils": ^7.29.7
+ "@babel/traverse": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0
- checksum: 749b40a963d5633f554cad0336245cb6c1c1393c70a3fddcf302d86a1a42b35efdd2ed62056b88db66f3900887ae1cee9a3eeec89799c22e0cf65059f0dfd142
+ checksum: 83cca77d175f3e66460a004648c8a645da880d5a9db96b03abd433e05bc4357aec0418d17b05fbfecfa679438b8eb8d8adc71b8f4db86cfaf6e6b0373b39a05e
languageName: node
linkType: hard
-"@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:^7.27.1":
- version: 7.27.1
- resolution: "@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:7.27.1"
+"@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:7.29.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.27.1
+ "@babel/helper-plugin-utils": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0
- checksum: eb7f4146dc01f1198ce559a90b077e58b951a07521ec414e3c7d4593bf6c4ab5c2af22242a7e9fec085e20299e0ba6ea97f44a45e84ab148141bf9eb959ad25e
+ checksum: ad06de66ccfb19f0f04e6124d144f3fef72fa5191861b1d04bc32cab87ce43958810d9632eac5881ef991a78b33e68588e3d90e76a63d917bd5a7ff4c96618f8
languageName: node
linkType: hard
-"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.27.1":
- version: 7.27.1
- resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.27.1"
+"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.29.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.27.1
+ "@babel/helper-plugin-utils": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0
- checksum: 621cfddfcc99a81e74f8b6f9101fd260b27500cb1a568e3ceae9cc8afe9aee45ac3bca3900a2b66c612b1a2366d29ef67d4df5a1c975be727eaad6906f98c2c6
+ checksum: 2189a2a648948107c59ad3bf028e5b71a85b28c840facfead769a33c5f63ae4ec0f147e6a2e664a91a506d4405f5a8972d2ca628f3b64d03edd7620d770761fb
languageName: node
linkType: hard
-"@babel/plugin-bugfix-safari-rest-destructuring-rhs-array@npm:^7.29.3":
- version: 7.29.3
- resolution: "@babel/plugin-bugfix-safari-rest-destructuring-rhs-array@npm:7.29.3"
+"@babel/plugin-bugfix-safari-rest-destructuring-rhs-array@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-bugfix-safari-rest-destructuring-rhs-array@npm:7.29.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.28.6
- "@babel/helper-skip-transparent-expression-wrappers": ^7.27.1
+ "@babel/helper-plugin-utils": ^7.29.7
+ "@babel/helper-skip-transparent-expression-wrappers": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0
- checksum: fd13198afc9b72c6a4e4868f1592fc8010f390e7601148a71d2d6111664c0242d6d5ff27d8eb77ca4c35ef47f8416daf5dbc8d46a498ac706d69c6b3a0988cd7
+ checksum: a9bd13c2600bdfcb5b35590e210bcb30f009fda9bd1556567757ea4fcb8ca247750331d6d10774d68127cae4e529bc79abd86a28fe5e2a1cc2cc00e75964ac52
languageName: node
linkType: hard
-"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.27.1":
- version: 7.27.1
- resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.27.1"
+"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.29.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.27.1
- "@babel/helper-skip-transparent-expression-wrappers": ^7.27.1
- "@babel/plugin-transform-optional-chaining": ^7.27.1
+ "@babel/helper-plugin-utils": ^7.29.7
+ "@babel/helper-skip-transparent-expression-wrappers": ^7.29.7
+ "@babel/plugin-transform-optional-chaining": ^7.29.7
peerDependencies:
"@babel/core": ^7.13.0
- checksum: f07aa80272bd7a46b7ba11a4644da6c9b6a5a64e848dfaffdad6f02663adefd512e1aaebe664c4dd95f7ed4f80c872c7f8db8d8e34b47aae0930b412a28711a0
+ checksum: 76a494ec4f52a127b0208c4574a6da36f6ff5f30484306921762db549fa7d9d9183c837759eb68c0c9e5a56013aa247e6e02e02263384d2a103240353ae0ceb6
languageName: node
linkType: hard
-"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.28.6":
- version: 7.28.6
- resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.28.6"
+"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.29.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.28.6
- "@babel/traverse": ^7.28.6
+ "@babel/helper-plugin-utils": ^7.29.7
+ "@babel/traverse": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0
- checksum: f1341f829f809c8685d839669953a478f8a40d1d53f4f5e1972bf39ff4e1ece148319340292d6e0c3641157268b435cbb99b3ac2f3cefe9fca9e81b8f62d6d71
+ checksum: 7a58b4b32f4c04b86160dc7900612904e2b88d42c8b89d59a89d3c343f320ad096d73fb453a2e8bf8e97c9d4af3563043bc6d1e3def53c819812cb03f3f873c8
languageName: node
linkType: hard
@@ -612,36 +434,25 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-syntax-import-assertions@npm:^7.28.6":
- version: 7.28.6
- resolution: "@babel/plugin-syntax-import-assertions@npm:7.28.6"
+"@babel/plugin-syntax-import-assertions@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-syntax-import-assertions@npm:7.29.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.28.6
+ "@babel/helper-plugin-utils": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 25017235e1e2c4ed892aa327a3fa10f4209cc618c6dd7806fc40c07d8d7d24a39743d3d5568b8d1c8f416cffe03c174e78874ded513c9338b07a7ab1dcbab050
+ checksum: a7f24858e7e833c2ee25779a355b5eff46e4bc93c98b06bda7ea0fd12faf99c4954e0f71074485512045920432790e0269aa562dd4d2085c3f8660ed1cfde8a1
languageName: node
linkType: hard
-"@babel/plugin-syntax-import-attributes@npm:^7.24.7":
- version: 7.27.1
- resolution: "@babel/plugin-syntax-import-attributes@npm:7.27.1"
+"@babel/plugin-syntax-import-attributes@npm:^7.24.7, @babel/plugin-syntax-import-attributes@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-syntax-import-attributes@npm:7.29.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.27.1
+ "@babel/helper-plugin-utils": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 97973982fff1bbf86b3d1df13380567042887c50e2ae13a400d02a8ff2c9742a60a75e279bfb73019e1cd9710f04be5e6ab81f896e6678dcfcec8b135e8896cf
- languageName: node
- linkType: hard
-
-"@babel/plugin-syntax-import-attributes@npm:^7.28.6":
- version: 7.28.6
- resolution: "@babel/plugin-syntax-import-attributes@npm:7.28.6"
- dependencies:
- "@babel/helper-plugin-utils": ^7.28.6
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: 6c8c6a5988dbb9799d6027360d1a5ba64faabf551f2ef11ba4eade0c62253b5c85d44ddc8eb643c74b9acb2bcaa664a950bd5de9a5d4aef291c4f2a48223bb4b
+ checksum: 9f47345d09aae16b7ab52ecaf541cde3e3ae1e57e3eb2d4088e062b29dfbd67db55d42d529840557583d66121e2a98788df7a455401cc6d635c8b7700a02efc9
languageName: node
linkType: hard
@@ -667,14 +478,14 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-syntax-jsx@npm:^7.27.1":
- version: 7.27.1
- resolution: "@babel/plugin-syntax-jsx@npm:7.27.1"
+"@babel/plugin-syntax-jsx@npm:^7.27.1, @babel/plugin-syntax-jsx@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-syntax-jsx@npm:7.29.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.27.1
+ "@babel/helper-plugin-utils": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: c6d1324cff286a369aa95d99b8abd21dd07821b5d3affd5fe7d6058c84cff9190743287826463ee57a7beecd10fa1e4bc99061df532ee14e188c1c8937b13e3a
+ checksum: 84150d27c553a1d3d921354437f6725ca1d63b49514c25591bfcaaafa6ea4d6c10715b66fe7245e4ad7ab7c6cf4b6e1de7373defd3df00877ab12638170d7772
languageName: node
linkType: hard
@@ -789,737 +600,725 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-arrow-functions@npm:^7.27.1":
- version: 7.27.1
- resolution: "@babel/plugin-transform-arrow-functions@npm:7.27.1"
+"@babel/plugin-transform-arrow-functions@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-arrow-functions@npm:7.29.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.27.1
+ "@babel/helper-plugin-utils": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 62c2cc0ae2093336b1aa1376741c5ed245c0987d9e4b4c5313da4a38155509a7098b5acce582b6781cc0699381420010da2e3086353344abe0a6a0ec38961eb7
+ checksum: 0037fd7563c7c91cddb8ce104e270bc260190d29c7a297df65e4306471010b4343366de13fab4602cf8ee6c672d3b313b34a01b62f27a333cad16908c83368d8
languageName: node
linkType: hard
-"@babel/plugin-transform-async-generator-functions@npm:^7.29.0":
- version: 7.29.0
- resolution: "@babel/plugin-transform-async-generator-functions@npm:7.29.0"
+"@babel/plugin-transform-async-generator-functions@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-async-generator-functions@npm:7.29.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.28.6
- "@babel/helper-remap-async-to-generator": ^7.27.1
- "@babel/traverse": ^7.29.0
+ "@babel/helper-plugin-utils": ^7.29.7
+ "@babel/helper-remap-async-to-generator": ^7.29.7
+ "@babel/traverse": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: bd549b54283034dd3e2f6c4b41b99a0caba0ddc8e9418490a611136ddb01e62235f14b233fcc172902fd1d18eec6e029245d22212566ea5cb5e24c7450d6005d
+ checksum: d8239f43b4051b12cd7a5581367bd2b13ac26235da39d79f182999879f010124341ac500f480140b0961a62ec451a0a963b421c509f9c1a306c313f10fc60451
languageName: node
linkType: hard
-"@babel/plugin-transform-async-to-generator@npm:^7.28.6":
- version: 7.28.6
- resolution: "@babel/plugin-transform-async-to-generator@npm:7.28.6"
+"@babel/plugin-transform-async-to-generator@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-async-to-generator@npm:7.29.7"
dependencies:
- "@babel/helper-module-imports": ^7.28.6
- "@babel/helper-plugin-utils": ^7.28.6
- "@babel/helper-remap-async-to-generator": ^7.27.1
+ "@babel/helper-module-imports": ^7.29.7
+ "@babel/helper-plugin-utils": ^7.29.7
+ "@babel/helper-remap-async-to-generator": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: bca5774263ec01dd2bf71c74bbaf7baa183bf03576636b7826c3346be70c8c8cb15cff549112f2983c36885131a0afde6c443591278c281f733ee17f455aa9b1
+ checksum: e24db9c4c69121daab25883f9a96e6849fa664c78c6bbcfb77fe0a0c6ab29b81ba39e8497985367463d3a88deac3b5bbe15dd1c5d0e5dd492cfccf8efdd27452
languageName: node
linkType: hard
-"@babel/plugin-transform-block-scoped-functions@npm:^7.27.1":
- version: 7.27.1
- resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.27.1"
+"@babel/plugin-transform-block-scoped-functions@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.29.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.27.1
+ "@babel/helper-plugin-utils": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 7fb4988ca80cf1fc8345310d5edfe38e86b3a72a302675cdd09404d5064fe1d1fe1283ebe658ad2b71445ecef857bfb29a748064306b5f6c628e0084759c2201
+ checksum: 24f9712ade98061cd22088709b86b8e3e19ea416dbe5a69ad504fc3f8f2179af5bdeb32fcb9c24fc861bef515e41ae5ef72cd909e0e42bb0cf15838c4e737149
languageName: node
linkType: hard
-"@babel/plugin-transform-block-scoping@npm:^7.28.6":
- version: 7.28.6
- resolution: "@babel/plugin-transform-block-scoping@npm:7.28.6"
+"@babel/plugin-transform-block-scoping@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-block-scoping@npm:7.29.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.28.6
+ "@babel/helper-plugin-utils": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: cb4f71ac4fc7b32c2e3cc167eb9e7a1a11562127d702e3b5093567750e9a4eb11a29ae5a917f62741bf9d5792bfe3022cbcdcc7bb927ddb6f627b6749a38c118
+ checksum: a17c02f8dfcaf2c26c0c323aaa8e3a1616f2de3ea0a4947e16789bb64cb0f177deff388eb1390c100c82d7e6fecd4d583646bb9305fb3df3ca824b1bdbebdc8e
languageName: node
linkType: hard
-"@babel/plugin-transform-class-properties@npm:^7.28.6":
- version: 7.28.6
- resolution: "@babel/plugin-transform-class-properties@npm:7.28.6"
+"@babel/plugin-transform-class-properties@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-class-properties@npm:7.29.7"
dependencies:
- "@babel/helper-create-class-features-plugin": ^7.28.6
- "@babel/helper-plugin-utils": ^7.28.6
+ "@babel/helper-create-class-features-plugin": ^7.29.7
+ "@babel/helper-plugin-utils": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 200f30d44b36a768fa3a8cf690db9e333996af2ad14d9fa1b4c91a427ed9302907873b219b4ce87517ca1014a810eb2e929a6a66be68473f72b546fc64d04fbc
+ checksum: 0cc5e7a882e29eead360f02ef79f6b2ec3b3813213b1513d8fdaa931d1d1361fccc92fbacc9b399e42495953d9d6fc722f283b5f3aa272fe016a0b5fe1e6a130
languageName: node
linkType: hard
-"@babel/plugin-transform-class-static-block@npm:^7.28.6":
- version: 7.28.6
- resolution: "@babel/plugin-transform-class-static-block@npm:7.28.6"
+"@babel/plugin-transform-class-static-block@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-class-static-block@npm:7.29.7"
dependencies:
- "@babel/helper-create-class-features-plugin": ^7.28.6
- "@babel/helper-plugin-utils": ^7.28.6
+ "@babel/helper-create-class-features-plugin": ^7.29.7
+ "@babel/helper-plugin-utils": ^7.29.7
peerDependencies:
"@babel/core": ^7.12.0
- checksum: 3db326156f73a0c0d1e2ea4d73e082b9ace2f6a9c965db1c2e51f3a186751b8b91bafb184d05e046bf970b50ecfde1f74862dd895f9a5ea0fad328369d74cfc4
+ checksum: fe94eb94d8417de753a26f06a3c50780cdfc3f07e10bcd09dde2fe61dcd9a2714b83b1b2d36733328a3ad09b02e84fa06197f757644ffbcca1673e87c64ecb76
languageName: node
linkType: hard
-"@babel/plugin-transform-classes@npm:^7.28.6":
- version: 7.28.6
- resolution: "@babel/plugin-transform-classes@npm:7.28.6"
+"@babel/plugin-transform-classes@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-classes@npm:7.29.7"
dependencies:
- "@babel/helper-annotate-as-pure": ^7.27.3
- "@babel/helper-compilation-targets": ^7.28.6
- "@babel/helper-globals": ^7.28.0
- "@babel/helper-plugin-utils": ^7.28.6
- "@babel/helper-replace-supers": ^7.28.6
- "@babel/traverse": ^7.28.6
+ "@babel/helper-annotate-as-pure": ^7.29.7
+ "@babel/helper-compilation-targets": ^7.29.7
+ "@babel/helper-globals": ^7.29.7
+ "@babel/helper-plugin-utils": ^7.29.7
+ "@babel/helper-replace-supers": ^7.29.7
+ "@babel/traverse": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: bddeefbfd1966272e5da6a0844d68369a0f43c286816c8b379dfd576cf835b8bc652089ef337b0334ff3ae6c9652d56d8332b78a7d29176534265c39856e4822
+ checksum: cc45ff5b5b063339131cd701266af90506db8640e56494de0c78f882da6317f057951bf6507c5b48a0278cf5dad21691baf2af05e24b8c26b0725d677088edbf
languageName: node
linkType: hard
-"@babel/plugin-transform-computed-properties@npm:^7.28.6":
- version: 7.28.6
- resolution: "@babel/plugin-transform-computed-properties@npm:7.28.6"
+"@babel/plugin-transform-computed-properties@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-computed-properties@npm:7.29.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.28.6
- "@babel/template": ^7.28.6
+ "@babel/helper-plugin-utils": ^7.29.7
+ "@babel/template": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: fd1fcc55003a2584c7461bf214ae9e9fce370ad09339319e99e29e5e55a8a3bd485d10805b3d69636a738208761b3a5b0dafdd023534396be45a36409082b014
+ checksum: ad945a48e6826c3b34f825e780ab33bf91e18c7924dd263e44bef8d8a6350636305b22af8f00793d3767482004651f4bfb9fed0c92f05c01b99ae80d79956e67
languageName: node
linkType: hard
-"@babel/plugin-transform-destructuring@npm:^7.28.5":
- version: 7.28.5
- resolution: "@babel/plugin-transform-destructuring@npm:7.28.5"
+"@babel/plugin-transform-destructuring@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-destructuring@npm:7.29.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.27.1
- "@babel/traverse": ^7.28.5
+ "@babel/helper-plugin-utils": ^7.29.7
+ "@babel/traverse": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 74a06e55e715cfda0fdd8be53d2655d64dfdc28dffaede329d42548fd5b1449ad26a4ce43a24c3fd277b96f8b2010c7b3915afa8297911cda740cc5cc3a81f38
+ checksum: 5f56c030beec2ae1640909eb5213fc655f0062046b28699d049cc8b00fb7d9aa1c5ba1dc1c7ee41c8bae97be778066f1f9ea2ecd8fff872a1e8f10fd3addf18c
languageName: node
linkType: hard
-"@babel/plugin-transform-dotall-regex@npm:^7.28.6":
- version: 7.28.6
- resolution: "@babel/plugin-transform-dotall-regex@npm:7.28.6"
+"@babel/plugin-transform-dotall-regex@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-dotall-regex@npm:7.29.7"
dependencies:
- "@babel/helper-create-regexp-features-plugin": ^7.28.5
- "@babel/helper-plugin-utils": ^7.28.6
+ "@babel/helper-create-regexp-features-plugin": ^7.29.7
+ "@babel/helper-plugin-utils": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 866ffbbdee77fa955063b37c75593db8dbbe46b1ebb64cc788ea437e3a9aa41cb7b9afcee617c678a32b6705baa0892ec8e5d4b8af3bbb0ab1b254514ccdbd37
+ checksum: 537df0fb915a420df715a2f4da16ab6c08ce2370521edef9a8a59af23a533314109f6abd836c5e127c8cea4a46bc4a05692670cf7ad64868c286075fa2d7848c
languageName: node
linkType: hard
-"@babel/plugin-transform-duplicate-keys@npm:^7.27.1":
- version: 7.27.1
- resolution: "@babel/plugin-transform-duplicate-keys@npm:7.27.1"
+"@babel/plugin-transform-duplicate-keys@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-duplicate-keys@npm:7.29.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.27.1
+ "@babel/helper-plugin-utils": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: ef2112d658338e3ff0827f39a53c0cfa211f1cbbe60363bca833a5269df389598ec965e7283600b46533c39cdca82307d0d69c0f518290ec5b00bb713044715b
+ checksum: 39bf312a798792e361d2afa9e900eb7d7fd853239a776912bafc5bb3799886374d54a0882d21517296086abdd3e5458405f6f3a7da5dcb493bc86c5a32576bab
languageName: node
linkType: hard
-"@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:^7.29.0":
- version: 7.29.0
- resolution: "@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:7.29.0"
+"@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:7.29.7"
dependencies:
- "@babel/helper-create-regexp-features-plugin": ^7.28.5
- "@babel/helper-plugin-utils": ^7.28.6
+ "@babel/helper-create-regexp-features-plugin": ^7.29.7
+ "@babel/helper-plugin-utils": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0
- checksum: 7fa7b773259a578c9e01c80946f75ecc074520064aa7a87a65db06c7df70766e2fa6be78cda55fa9418a14e30b2b9d595484a46db48074d495d9f877a4276065
+ checksum: fa7fcdbede10dbc06fe4f861e90286f7f599d3f3c43e69445e63c3f48422fd34db0b0dd9bbebccd1dbd04a50fca4ab22fd82d28e7bc8fe9b6d5790c9e694d380
languageName: node
linkType: hard
-"@babel/plugin-transform-dynamic-import@npm:^7.27.1":
- version: 7.27.1
- resolution: "@babel/plugin-transform-dynamic-import@npm:7.27.1"
+"@babel/plugin-transform-dynamic-import@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-dynamic-import@npm:7.29.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.27.1
+ "@babel/helper-plugin-utils": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 7a9fbc8d17148b7f11a1d1ca3990d2c2cd44bd08a45dcaf14f20a017721235b9044b20e6168b6940282bb1b48fb78e6afbdfb9dd9d82fde614e15baa7d579932
+ checksum: 58c035e6b9103c225f3d181671d9b3dec140351c3ecf12bc3a66b8653be41161f20135ada00a703244c2bfc9dd57b62fc54f77f2f6fe43df6c598358f377e6fa
languageName: node
linkType: hard
-"@babel/plugin-transform-explicit-resource-management@npm:^7.28.6":
- version: 7.28.6
- resolution: "@babel/plugin-transform-explicit-resource-management@npm:7.28.6"
+"@babel/plugin-transform-explicit-resource-management@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-explicit-resource-management@npm:7.29.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.28.6
- "@babel/plugin-transform-destructuring": ^7.28.5
+ "@babel/helper-plugin-utils": ^7.29.7
+ "@babel/plugin-transform-destructuring": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: be65403694d360793b1b626ac0dfa7c120cfe4dd1c95a81a30b6e7426dc317643e60a486d642e318a4d3d9a7193e72fdb36e2ec140c25c773dcb9c3b1e2854ef
+ checksum: 28ff30f46d97b91ba5f57ae63499a489fa1ec3dcc427ec851c2aacb34106b573c58eba4be000bc4c28223ba767cfadc008cdfa9f833ed12996e2f014e0a06373
languageName: node
linkType: hard
-"@babel/plugin-transform-exponentiation-operator@npm:^7.28.6":
- version: 7.28.6
- resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.28.6"
+"@babel/plugin-transform-exponentiation-operator@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.29.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.28.6
+ "@babel/helper-plugin-utils": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: b232152499370435c7cd4bf3321f58e189150e35ca3722ea16533d33434b97294df1342f5499671ec48e62b71c34cdea0ca8cf317ad12594a10f6fc670315e62
+ checksum: bf0366d77d318d4b6eae6880217e3fdfcb6e5f7913f658583de9537fd4fca1f05f9ac4083d8f946a84eaefec068cbba948be90f4a39484c85bc69082def3162d
languageName: node
linkType: hard
-"@babel/plugin-transform-export-namespace-from@npm:^7.27.1":
- version: 7.27.1
- resolution: "@babel/plugin-transform-export-namespace-from@npm:7.27.1"
+"@babel/plugin-transform-export-namespace-from@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-export-namespace-from@npm:7.29.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.27.1
+ "@babel/helper-plugin-utils": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 85082923eca317094f08f4953d8ea2a6558b3117826c0b740676983902b7236df1f4213ad844cb38c2dae104753dbe8f1cc51f01567835d476d32f5f544a4385
+ checksum: d157d62b144d1626b801e557dcede914db33e78f3f4230f487e5709c21efd40648f7f3a47a44a7fce694ad9cd117d2ac3ed796da0102275fd02b4fdb317d906b
languageName: node
linkType: hard
-"@babel/plugin-transform-for-of@npm:^7.27.1":
- version: 7.27.1
- resolution: "@babel/plugin-transform-for-of@npm:7.27.1"
+"@babel/plugin-transform-for-of@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-for-of@npm:7.29.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.27.1
- "@babel/helper-skip-transparent-expression-wrappers": ^7.27.1
+ "@babel/helper-plugin-utils": ^7.29.7
+ "@babel/helper-skip-transparent-expression-wrappers": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: c9224e08de5d80b2c834383d4359aa9e519db434291711434dd996a4f86b7b664ad67b45d65459b7ec11fa582e3e11a3c769b8a8ca71594bdd4e2f0503f84126
+ checksum: 7641d5eb4ef268df2f7d8736691a565646f42c55fdc2c86a65ed027276415a19ac6cafab2fc386621894c5d3202baacc9f222424bda37fa2ab9a20d7fec921f9
languageName: node
linkType: hard
-"@babel/plugin-transform-function-name@npm:^7.27.1":
- version: 7.27.1
- resolution: "@babel/plugin-transform-function-name@npm:7.27.1"
+"@babel/plugin-transform-function-name@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-function-name@npm:7.29.7"
dependencies:
- "@babel/helper-compilation-targets": ^7.27.1
- "@babel/helper-plugin-utils": ^7.27.1
- "@babel/traverse": ^7.27.1
+ "@babel/helper-compilation-targets": ^7.29.7
+ "@babel/helper-plugin-utils": ^7.29.7
+ "@babel/traverse": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 26a2a183c3c52a96495967420a64afc5a09f743a230272a131668abf23001e393afa6371e6f8e6c60f4182bea210ed31d1caf866452d91009c1daac345a52f23
+ checksum: 87a6329442ef8085fbc160e659f64562f0f5b63be65403b8bbb8e18c67dd7d03b82fb2e1371fdde734e2f05b13a72f88ed8d8cb03807150063954b9604d082cf
languageName: node
linkType: hard
-"@babel/plugin-transform-json-strings@npm:^7.28.6":
- version: 7.28.6
- resolution: "@babel/plugin-transform-json-strings@npm:7.28.6"
+"@babel/plugin-transform-json-strings@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-json-strings@npm:7.29.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.28.6
+ "@babel/helper-plugin-utils": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 69d82a1a0a72ed6e6f7969e09cf330516599d79b2b4e680e9dd3c57616a8c6af049b5103456e370ab56642815e80e46ed88bb81e9e059304a85c5fe0bf137c29
+ checksum: 3af97e144e0d986522f01803ffa0f90741530d1610952ac6a92511c356ecbf5616092ab1d21401d25bc7cb8ac90d73c2c7ff35e41766df2708c29d7e588cfa7f
languageName: node
linkType: hard
-"@babel/plugin-transform-literals@npm:^7.27.1":
- version: 7.27.1
- resolution: "@babel/plugin-transform-literals@npm:7.27.1"
+"@babel/plugin-transform-literals@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-literals@npm:7.29.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.27.1
+ "@babel/helper-plugin-utils": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 0a76d12ab19f32dd139964aea7da48cecdb7de0b75e207e576f0f700121fe92367d788f328bf4fb44b8261a0f605c97b44e62ae61cddbb67b14e94c88b411f95
+ checksum: aadb2b3fe85186c274a07d5486aeef9496ce374e534fbc7b54f77985c75513422d9acec4c532f67b027e939644d93a69c00505b8909e259184c3ee5c5c62c46b
languageName: node
linkType: hard
-"@babel/plugin-transform-logical-assignment-operators@npm:^7.28.6":
- version: 7.28.6
- resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.28.6"
+"@babel/plugin-transform-logical-assignment-operators@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.29.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.28.6
+ "@babel/helper-plugin-utils": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 36095d5d1cfc680e95298b5389a16016da800ae3379b130dabf557e94652c47b06610407e9fa44aaa03e9b0a5aa7b4b93348123985d44a45e369bf5f3497d149
+ checksum: 374d83dfbb2de5e339d2966487c0f0d766cd67422addbd0172104ff2788b60317858172a7ab2cb6ee7d5bffad72ce07120fec009a2ef3b35551013fce4908686
languageName: node
linkType: hard
-"@babel/plugin-transform-member-expression-literals@npm:^7.27.1":
- version: 7.27.1
- resolution: "@babel/plugin-transform-member-expression-literals@npm:7.27.1"
+"@babel/plugin-transform-member-expression-literals@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-member-expression-literals@npm:7.29.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.27.1
+ "@babel/helper-plugin-utils": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 804121430a6dcd431e6ffe99c6d1fbbc44b43478113b79c677629e7f877b4f78a06b69c6bfb2747fd84ee91879fe2eb32e4620b53124603086cf5b727593ebe8
+ checksum: 698cbc9500e8caea1d36b48248112d60e023cea9d0772ac1ecf1639b38b662d9352043747dbe617fe1f6f17709bc17601534f7bf2f22c791fb86f7e2ab43e39f
languageName: node
linkType: hard
-"@babel/plugin-transform-modules-amd@npm:^7.27.1":
- version: 7.27.1
- resolution: "@babel/plugin-transform-modules-amd@npm:7.27.1"
+"@babel/plugin-transform-modules-amd@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-modules-amd@npm:7.29.7"
dependencies:
- "@babel/helper-module-transforms": ^7.27.1
- "@babel/helper-plugin-utils": ^7.27.1
+ "@babel/helper-module-transforms": ^7.29.7
+ "@babel/helper-plugin-utils": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 8bb36d448e438d5d30f4faf19120e8c18aa87730269e65d805bf6032824d175ed738057cc392c2c8a650028f1ae0f346cad8d6b723f31a037b586e2092a7be18
+ checksum: 6fce7d329230e3be0389b1135b6ffa1224c3f060294409137c5bb7f26d81ac47b6d91651deaef93b17f5e6f99e5ca7edb80b6b855b562b65ad00b3d7f717da40
languageName: node
linkType: hard
-"@babel/plugin-transform-modules-commonjs@npm:^7.28.6":
- version: 7.28.6
- resolution: "@babel/plugin-transform-modules-commonjs@npm:7.28.6"
+"@babel/plugin-transform-modules-commonjs@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-modules-commonjs@npm:7.29.7"
dependencies:
- "@babel/helper-module-transforms": ^7.28.6
- "@babel/helper-plugin-utils": ^7.28.6
+ "@babel/helper-module-transforms": ^7.29.7
+ "@babel/helper-plugin-utils": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: b48cab26fda72894c7002a9c783befbc8a643d827c52bdcc5adf83e418ca93224a15aaf7ed2d1e6284627be55913696cfa2119242686cfa77a473bf79314df26
+ checksum: e9d8102deca4c2f06507a8d071ca0e161f01cec0e108151142edb39995bd830e312d55d21fac0ceb390ac79a1fee5fb768b719413b8fc5adda5f06ecd8845cd6
languageName: node
linkType: hard
-"@babel/plugin-transform-modules-systemjs@npm:^7.29.0":
- version: 7.29.4
- resolution: "@babel/plugin-transform-modules-systemjs@npm:7.29.4"
+"@babel/plugin-transform-modules-systemjs@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-modules-systemjs@npm:7.29.7"
dependencies:
- "@babel/helper-module-transforms": ^7.28.6
- "@babel/helper-plugin-utils": ^7.28.6
- "@babel/helper-validator-identifier": ^7.28.5
- "@babel/traverse": ^7.29.0
+ "@babel/helper-module-transforms": ^7.29.7
+ "@babel/helper-plugin-utils": ^7.29.7
+ "@babel/helper-validator-identifier": ^7.29.7
+ "@babel/traverse": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: d9cbb30669077756048af990a08ad1ba149785c336024affa49848dc4ffc5948bfaaf52d90bbec711a1f320e19e2c60182dbeff40d81cc5b9a09a87919abe07d
+ checksum: 185d26d1f20fabdb120cb0bacdb2d245a8fbe628778cc2cd096a804c1169e21ae555e482b76fcc04a585edd70d9758a456794ae4d69cd41e638e10f620d65058
languageName: node
linkType: hard
-"@babel/plugin-transform-modules-umd@npm:^7.27.1":
- version: 7.27.1
- resolution: "@babel/plugin-transform-modules-umd@npm:7.27.1"
+"@babel/plugin-transform-modules-umd@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-modules-umd@npm:7.29.7"
dependencies:
- "@babel/helper-module-transforms": ^7.27.1
- "@babel/helper-plugin-utils": ^7.27.1
+ "@babel/helper-module-transforms": ^7.29.7
+ "@babel/helper-plugin-utils": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: b007dd89231f2eeccf1c71a85629bcb692573303977a4b1c5f19a835ea6b5142c18ef07849bc6d752b874a11bc0ddf3c67468b77c8ee8310290b688a4f01ef31
+ checksum: 589f5c30a906587d039e2f3bf8267652be272d93d3056667b479f450318c91e55d1674631239ac25e0e9591f4abb7ff225bb0fc8af58e5bfb703d3385ec02082
languageName: node
linkType: hard
-"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.29.0":
- version: 7.29.0
- resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.29.0"
+"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.29.7"
dependencies:
- "@babel/helper-create-regexp-features-plugin": ^7.28.5
- "@babel/helper-plugin-utils": ^7.28.6
+ "@babel/helper-create-regexp-features-plugin": ^7.29.7
+ "@babel/helper-plugin-utils": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0
- checksum: ed8c27699ca82a6c01cbfd39f3de16b90cfea4f8146a358057f76df290d308a66a8bd2e6734e6a87f68c18576e15d2d70548a84cd474d26fdf256c3f5ae44d8c
+ checksum: 3a481be133e9ca5d25570b5ed62daae323a51663bacf30fed0d1980e912047ebd34d6326533182db625fc0bbd086d1a23ed68ebb6108e7a68a8650c228afc084
languageName: node
linkType: hard
-"@babel/plugin-transform-new-target@npm:^7.27.1":
- version: 7.27.1
- resolution: "@babel/plugin-transform-new-target@npm:7.27.1"
+"@babel/plugin-transform-new-target@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-new-target@npm:7.29.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.27.1
+ "@babel/helper-plugin-utils": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 32c8078d843bda001244509442d68fd3af088d7348ba883f45c262b2c817a27ffc553b0d78e7f7a763271b2ece7fac56151baad7a91fb21f5bb1d2f38e5acad7
+ checksum: 35b4c295348d17c9c00cf772663a6e705fd48f5a9a5378d7b548ab4cb71d5f183ca9446d2a86c77f16b037cfe64c621c00e93219aefab43bfd39d8dd2c8b56bb
languageName: node
linkType: hard
-"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.28.6":
- version: 7.28.6
- resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.28.6"
+"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.29.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.28.6
+ "@babel/helper-plugin-utils": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 1cdd3ca48a8fffa13dbb9949748d3dd2183cf24110cd55d702da4549205611fc12978b49886be809ec1929ff6304ac4eecc747a33dca2484f9dc655928ab5a89
+ checksum: f486e737ddcec3a88e2e0dc004c28e15156dd255f3b2d944903f3d75666257c96ee7ebf57d80d2cf42eda2bee497db8134a26d657ddc3defcc34b9583ecbd119
languageName: node
linkType: hard
-"@babel/plugin-transform-numeric-separator@npm:^7.28.6":
- version: 7.28.6
- resolution: "@babel/plugin-transform-numeric-separator@npm:7.28.6"
+"@babel/plugin-transform-numeric-separator@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-numeric-separator@npm:7.29.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.28.6
+ "@babel/helper-plugin-utils": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 4b5ca60e481e22f0842761a3badca17376a230b5a7e5482338604eb95836c2d0c9c9bde53bdc5c2de1c6a12ae6c12de7464d098bf74b0943f85905ca358f0b68
+ checksum: 6177df9e1a8a190bf4a360f8cbcfa614b70ededba61201bd0a38929770b6d00a8a54a19f8fda82cf60688d9bab938427a9fe5dae0a9e8cd8ed79c88a3b2dbcd7
languageName: node
linkType: hard
-"@babel/plugin-transform-object-rest-spread@npm:^7.28.6":
- version: 7.28.6
- resolution: "@babel/plugin-transform-object-rest-spread@npm:7.28.6"
+"@babel/plugin-transform-object-rest-spread@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-object-rest-spread@npm:7.29.7"
dependencies:
- "@babel/helper-compilation-targets": ^7.28.6
- "@babel/helper-plugin-utils": ^7.28.6
- "@babel/plugin-transform-destructuring": ^7.28.5
- "@babel/plugin-transform-parameters": ^7.27.7
- "@babel/traverse": ^7.28.6
+ "@babel/helper-compilation-targets": ^7.29.7
+ "@babel/helper-plugin-utils": ^7.29.7
+ "@babel/plugin-transform-destructuring": ^7.29.7
+ "@babel/plugin-transform-parameters": ^7.29.7
+ "@babel/traverse": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: ab85b1321f86db91aba22ad9d8e6ab65448c983214998012229f5302468527d27b908ad6b14755991c317e35d2f54ec8459a2a094a755999651fe0ac9bd2e9a6
+ checksum: e09bcc8800cf374962ab98bce5ccceb900266278a3a1e4a68391abec440fdf7371c8059f9091f407a1b167f3acf624c34c9b92188674fdcb7797e3f02509216b
languageName: node
linkType: hard
-"@babel/plugin-transform-object-super@npm:^7.27.1":
- version: 7.27.1
- resolution: "@babel/plugin-transform-object-super@npm:7.27.1"
+"@babel/plugin-transform-object-super@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-object-super@npm:7.29.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.27.1
- "@babel/helper-replace-supers": ^7.27.1
+ "@babel/helper-plugin-utils": ^7.29.7
+ "@babel/helper-replace-supers": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 46b819cb9a6cd3cfefe42d07875fee414f18d5e66040366ae856116db560ad4e16f3899a0a7fddd6773e0d1458444f94b208b67c0e3b6977a27ea17a5c13dbf6
+ checksum: 65ed8719563572c4917f19b32c476c9a9062fccf89bfd44a418bb734cd866034d66049499cace58e2bb4589da779983f534078bd989333f36268b9da08d4b33c
languageName: node
linkType: hard
-"@babel/plugin-transform-optional-catch-binding@npm:^7.28.6":
- version: 7.28.6
- resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.28.6"
+"@babel/plugin-transform-optional-catch-binding@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.29.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.28.6
+ "@babel/helper-plugin-utils": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: ee24a17defec056eb9ef01824d7e4a1f65d531af6b4b79acfd0bcb95ce0b47926e80c61897f36f8c01ce733b069c9acdb1c9ce5ec07a729d0dbf9e8d859fe992
+ checksum: 4b6e41e1dc5dbd02cfe0b96214130cca5fd3bd879551fc82188bb3d9a2782af9bab50f2140af9ff946a8ee23b9478ee42810641fb99aa3e033884d7c6103d138
languageName: node
linkType: hard
-"@babel/plugin-transform-optional-chaining@npm:^7.27.1":
- version: 7.28.5
- resolution: "@babel/plugin-transform-optional-chaining@npm:7.28.5"
+"@babel/plugin-transform-optional-chaining@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-optional-chaining@npm:7.29.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.27.1
- "@babel/helper-skip-transparent-expression-wrappers": ^7.27.1
+ "@babel/helper-plugin-utils": ^7.29.7
+ "@babel/helper-skip-transparent-expression-wrappers": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 78c2be52b32e893c992aca52ef84130b3540e2ca0e1ff0e45f8d2ccc213b3c6e2b43f8dd2c86a0976acf3cdff97d4488c23b86d7a3e67daa517013089f44af1d
+ checksum: 6255d259bb0143f7938278ebb382aba22311c260919d3f08476509c76335a111b479b3ad7363e86de064f87af85ca4d7f03f08195f0646c525ea70fb587c0a2d
languageName: node
linkType: hard
-"@babel/plugin-transform-optional-chaining@npm:^7.28.6":
- version: 7.28.6
- resolution: "@babel/plugin-transform-optional-chaining@npm:7.28.6"
+"@babel/plugin-transform-parameters@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-parameters@npm:7.29.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.28.6
- "@babel/helper-skip-transparent-expression-wrappers": ^7.27.1
+ "@babel/helper-plugin-utils": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: a40dbe709671a436bb69e14524805e10af81b44c422e4fc5dc905cb91adb92d650c9d266c3c2c0da0d410dea89ce784995d4118b7ab6a7544f4923e61590b386
+ checksum: 615cdd72dc2d08051e6d4e7f0539661e40029257a047ce15c5da5f4394a372a53f6f6d6aece72ad15ccf0590e448c9a742f8576564321c9dcc16262ec6197c9b
languageName: node
linkType: hard
-"@babel/plugin-transform-parameters@npm:^7.27.7":
- version: 7.27.7
- resolution: "@babel/plugin-transform-parameters@npm:7.27.7"
+"@babel/plugin-transform-private-methods@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-private-methods@npm:7.29.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.27.1
+ "@babel/helper-create-class-features-plugin": ^7.29.7
+ "@babel/helper-plugin-utils": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: d51f195e1d6ac5d9fce583e9a70a5bfe403e62386e5eb06db9fbc6533f895a98ff7e7c3dcaa311a8e6fa7a9794466e81cdabcba6af9f59d787fb767bfe7868b4
+ checksum: 5055af2b86a95acbf6bd1a14256edf439ba4f214707f6aa9f6a29d1168c882e5709853c4ff225f55575f88d3a58effbed952d25c5cd70f93785106541f992cdd
languageName: node
linkType: hard
-"@babel/plugin-transform-private-methods@npm:^7.28.6":
- version: 7.28.6
- resolution: "@babel/plugin-transform-private-methods@npm:7.28.6"
+"@babel/plugin-transform-private-property-in-object@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-private-property-in-object@npm:7.29.7"
dependencies:
- "@babel/helper-create-class-features-plugin": ^7.28.6
- "@babel/helper-plugin-utils": ^7.28.6
+ "@babel/helper-annotate-as-pure": ^7.29.7
+ "@babel/helper-create-class-features-plugin": ^7.29.7
+ "@babel/helper-plugin-utils": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: b80179b28f6a165674d0b0d6c6349b13a01dd282b18f56933423c0a33c23fc0626c8f011f859fc20737d021fe966eb8474a5233e4596401482e9ee7fb00e2aa2
+ checksum: 068ff9e35e103b269c707d16f50384646295a6613c5abfdebea24f0430bb18ea4ef40a299e1dcc915bb22f65e2217c3428c20bcd4a3fe5f8ac60ec212835646d
languageName: node
linkType: hard
-"@babel/plugin-transform-private-property-in-object@npm:^7.28.6":
- version: 7.28.6
- resolution: "@babel/plugin-transform-private-property-in-object@npm:7.28.6"
+"@babel/plugin-transform-property-literals@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-property-literals@npm:7.29.7"
dependencies:
- "@babel/helper-annotate-as-pure": ^7.27.3
- "@babel/helper-create-class-features-plugin": ^7.28.6
- "@babel/helper-plugin-utils": ^7.28.6
+ "@babel/helper-plugin-utils": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 32a935e44872e90607851be5bc2cd3365f29c0e0e3853ef3e2b6a7da4d08c647379bf2f2dc4f14a9064d7d72e2cf75da85e55baeeec1ffc25cf6088fe24422f7
+ checksum: 7e7a557df8feb50cd6913158c6d12df0e8a9da58e3f73e7cbfc08af399055b03e77a22b12c73d5bf6bb49239617d6189ccb6021ab03f0225bc54f9c74a880b62
languageName: node
linkType: hard
-"@babel/plugin-transform-property-literals@npm:^7.27.1":
- version: 7.27.1
- resolution: "@babel/plugin-transform-property-literals@npm:7.27.1"
+"@babel/plugin-transform-react-display-name@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-react-display-name@npm:7.29.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.27.1
+ "@babel/helper-plugin-utils": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 7caec27d5ed8870895c9faf4f71def72745d69da0d8e77903146a4e135fd7bed5778f5f9cebb36c5fba86338e6194dd67a08c033fc84b4299b7eceab6d9630cb
+ checksum: ded95cce1816f800db43e8f4e1f7fbb928091bf036438617b8ca7e9ce776079606045a0ca482904bfeff801c4fc726de633153843c441ef31980b8c41ace04c9
languageName: node
linkType: hard
-"@babel/plugin-transform-react-display-name@npm:^7.28.0":
- version: 7.28.0
- resolution: "@babel/plugin-transform-react-display-name@npm:7.28.0"
+"@babel/plugin-transform-react-jsx-development@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-react-jsx-development@npm:7.29.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.27.1
+ "@babel/plugin-transform-react-jsx": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 268b1a9192974439d17949e170b01cac2a2aa003c844e2fe3b8361146f42f66487178cffdfa8ce862aa9e6c814bc37f879a70300cb3f067815d15fa6aad04e6d
+ checksum: c535bb5ee09e07839a422f7a8e55849cd30525af57021888eceb84d33391290f6250207319bb4fbb4d4cbdcdb894b2a2b963f0769a3e95536370159b4b505855
languageName: node
linkType: hard
-"@babel/plugin-transform-react-jsx-development@npm:^7.27.1":
- version: 7.27.1
- resolution: "@babel/plugin-transform-react-jsx-development@npm:7.27.1"
+"@babel/plugin-transform-react-jsx@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-react-jsx@npm:7.29.7"
dependencies:
- "@babel/plugin-transform-react-jsx": ^7.27.1
+ "@babel/helper-annotate-as-pure": ^7.29.7
+ "@babel/helper-module-imports": ^7.29.7
+ "@babel/helper-plugin-utils": ^7.29.7
+ "@babel/plugin-syntax-jsx": ^7.29.7
+ "@babel/types": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: b88865d5b8c018992f2332da939faa15c4d4a864c9435a5937beaff3fe43781432cc42e0a5d5631098e0bd4066fc33f5fa72203b388b074c3545fe7aaa21e474
+ checksum: d50e5d6f12051c688280b118fc0cdc49f617f7c1f2c41b25733b606aa9a14d2dc84bc544163d115226b9d2cde9f147f49568350b9d100cb47988e5e76cf495c7
languageName: node
linkType: hard
-"@babel/plugin-transform-react-jsx@npm:^7.27.1":
- version: 7.27.1
- resolution: "@babel/plugin-transform-react-jsx@npm:7.27.1"
+"@babel/plugin-transform-react-pure-annotations@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.29.7"
dependencies:
- "@babel/helper-annotate-as-pure": ^7.27.1
- "@babel/helper-module-imports": ^7.27.1
- "@babel/helper-plugin-utils": ^7.27.1
- "@babel/plugin-syntax-jsx": ^7.27.1
- "@babel/types": ^7.27.1
+ "@babel/helper-annotate-as-pure": ^7.29.7
+ "@babel/helper-plugin-utils": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 960d36e5d11ba68e4fbf1e2b935c153cb6ea7b0004f838aaee8baf7de30462b8f0562743a39ce3c370cc70b8f79d3c549104a415a615b2b0055b71fd025df0f3
+ checksum: 7b6bc9e9db06f2c40685b4f0a043af17a98a8bee833831aa28f70c89876dc649fdd682ae572445143b53fe091258964107bae9d3583480eb1c4f1d9c22780b38
languageName: node
linkType: hard
-"@babel/plugin-transform-react-pure-annotations@npm:^7.27.1":
- version: 7.27.1
- resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.27.1"
+"@babel/plugin-transform-regenerator@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-regenerator@npm:7.29.7"
dependencies:
- "@babel/helper-annotate-as-pure": ^7.27.1
- "@babel/helper-plugin-utils": ^7.27.1
+ "@babel/helper-plugin-utils": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: a6f591c5e85a1ab0685d4a25afe591fe8d11dc0b73c677cf9560ff8d540d036a1cce9efcb729fc9092def4d854dc304ffdc063a89a9247900b69c516bf971a4c
+ checksum: 1a136712ba92693402d7fafb96624d1a833e888cd59029a84ed24d8ff083304a3f1d101d8d5013d0400229041c8a1e4ddf08027268f3c876ea226e86734acd25
languageName: node
linkType: hard
-"@babel/plugin-transform-regenerator@npm:^7.29.0":
- version: 7.29.0
- resolution: "@babel/plugin-transform-regenerator@npm:7.29.0"
+"@babel/plugin-transform-regexp-modifiers@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-regexp-modifiers@npm:7.29.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.28.6
- peerDependencies:
- "@babel/core": ^7.0.0-0
- checksum: f48bc814f11239f2bfe010a6e29d5ac2443e7b1d8004e7c022effa111b743491127acf8644cfef475edb86b91f123829585867bc13762652aabd9b85ed6ce61e
- languageName: node
- linkType: hard
-
-"@babel/plugin-transform-regexp-modifiers@npm:^7.28.6":
- version: 7.28.6
- resolution: "@babel/plugin-transform-regexp-modifiers@npm:7.28.6"
- dependencies:
- "@babel/helper-create-regexp-features-plugin": ^7.28.5
- "@babel/helper-plugin-utils": ^7.28.6
+ "@babel/helper-create-regexp-features-plugin": ^7.29.7
+ "@babel/helper-plugin-utils": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0
- checksum: 5aacc570034c085afa0165137bb9a04cd4299b86eb9092933a96dcc1132c8f591d9d534419988f5f762b2f70d43a3c719a6b8fa05fdd3b2b1820d01cf85500da
+ checksum: bfbc6b898ace99b8412eb6e902b90856188c692e69672d42d48c5e22a5bf9b0d15d35424fda8501bfb06ba0504acc5f1b9e13eacaba232aa58af74472d6068dc
languageName: node
linkType: hard
-"@babel/plugin-transform-reserved-words@npm:^7.27.1":
- version: 7.27.1
- resolution: "@babel/plugin-transform-reserved-words@npm:7.27.1"
+"@babel/plugin-transform-reserved-words@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-reserved-words@npm:7.29.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.27.1
+ "@babel/helper-plugin-utils": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: dea0b66742d2863b369c06c053e11e15ba785892ea19cccf7aef3c1bdaa38b6ab082e19984c5ea7810d275d9445c5400fcc385ad71ce707ed9256fadb102af3b
+ checksum: ffd7f86ddce36c6ded2dd9218f81be8cbae35b1ed01100ac0a98623bd0a76c059188b70953ab5accae8f8430451e8ed4779d533ac5e35c523f5004a981208b7c
languageName: node
linkType: hard
-"@babel/plugin-transform-shorthand-properties@npm:^7.27.1":
- version: 7.27.1
- resolution: "@babel/plugin-transform-shorthand-properties@npm:7.27.1"
+"@babel/plugin-transform-shorthand-properties@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-shorthand-properties@npm:7.29.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.27.1
+ "@babel/helper-plugin-utils": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: fbba6e2aef0b69681acb68202aa249c0598e470cc0853d7ff5bd0171fd6a7ec31d77cfabcce9df6360fc8349eded7e4a65218c32551bd3fc0caaa1ac899ac6d4
+ checksum: c57ef27853f334a6147da9aa00f8a8f4c3a1c217eb2efa73cba2e118edda10754fa23cec2c0c7f7408279ad28fef92c1f663dfec137a7503813331569c3e02f9
languageName: node
linkType: hard
-"@babel/plugin-transform-spread@npm:^7.28.6":
- version: 7.28.6
- resolution: "@babel/plugin-transform-spread@npm:7.28.6"
+"@babel/plugin-transform-spread@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-spread@npm:7.29.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.28.6
- "@babel/helper-skip-transparent-expression-wrappers": ^7.27.1
+ "@babel/helper-plugin-utils": ^7.29.7
+ "@babel/helper-skip-transparent-expression-wrappers": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: e4782578904df68f7d2b3e865f20701c71d6aba0027c4794c1dc08a2f805a12892a078dab483714552398a689ad4ff6786cdf4e088b073452aee7db67e37a09c
+ checksum: eb25f24d9a5cac163fea91b5872ff2ddb892083624284a6e8a1fa8dfc4c4c6f6230f3b478405eb846df895a3f96631ac19e8c169af33012aafaa144e6192d5d3
languageName: node
linkType: hard
-"@babel/plugin-transform-sticky-regex@npm:^7.27.1":
- version: 7.27.1
- resolution: "@babel/plugin-transform-sticky-regex@npm:7.27.1"
+"@babel/plugin-transform-sticky-regex@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-sticky-regex@npm:7.29.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.27.1
+ "@babel/helper-plugin-utils": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: e1414a502efba92c7974681767e365a8cda6c5e9e5f33472a9eaa0ce2e75cea0a9bef881ff8dda37c7810ad902f98d3c00ead92a3ac3b73a79d011df85b5a189
+ checksum: 16b570c0270a59c2a29b2118c00e463882e9dda49b51a17dde3ae6b2886995d49f4bf2161a4c743ad1bca39d2aeb3ac963400e095682e105c7f751e6a2156c28
languageName: node
linkType: hard
-"@babel/plugin-transform-template-literals@npm:^7.27.1":
- version: 7.27.1
- resolution: "@babel/plugin-transform-template-literals@npm:7.27.1"
+"@babel/plugin-transform-template-literals@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-template-literals@npm:7.29.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.27.1
+ "@babel/helper-plugin-utils": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 93aad782503b691faef7c0893372d5243df3219b07f1f22cfc32c104af6a2e7acd6102c128439eab15336d048f1b214ca134b87b0630d8cd568bf447f78b25ce
+ checksum: d1014dab020f0f802089de17bba82d929eda6ac87fde5f58fb9763885b8d645ce63fc1df97055c06a12d95a8788334a93b559fcaf1da6d7777a191e5f9c5646e
languageName: node
linkType: hard
-"@babel/plugin-transform-typeof-symbol@npm:^7.27.1":
- version: 7.27.1
- resolution: "@babel/plugin-transform-typeof-symbol@npm:7.27.1"
+"@babel/plugin-transform-typeof-symbol@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-typeof-symbol@npm:7.29.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.27.1
+ "@babel/helper-plugin-utils": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: ed8048c8de72c60969a64cf2273cc6d9275d8fa8db9bd25a1268273a00fb9cbd79931140311411bda1443aa56cb3961fb911d1795abacde7f0482f1d8fdf0356
+ checksum: 90c2308f97c4e3773b7d2010b962ce6122bd9e1163f0caf7bb45819342f547a5a41d36c73d9a828ad89ce2072e2613ea867d28ad59eb440d9e22196438437d02
languageName: node
linkType: hard
-"@babel/plugin-transform-unicode-escapes@npm:^7.27.1":
- version: 7.27.1
- resolution: "@babel/plugin-transform-unicode-escapes@npm:7.27.1"
+"@babel/plugin-transform-unicode-escapes@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-unicode-escapes@npm:7.29.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.27.1
+ "@babel/helper-plugin-utils": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: d817154bc10758ddd85b716e0bc1af1a1091e088400289ab6b78a1a4d609907ce3d2f1fd51a6fd0e0c8ecbb5f8e3aab4957e0747776d132d2379e85c3ef0520a
+ checksum: cf337bf93a2e76aa82acb60d8a8a567225744cf7f42ffa4dde4c177aef54250f4067db38b8ab2c26f20cf2a589822242891ba8b91739a705f618bf6a4eeca7ff
languageName: node
linkType: hard
-"@babel/plugin-transform-unicode-property-regex@npm:^7.28.6":
- version: 7.28.6
- resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.28.6"
+"@babel/plugin-transform-unicode-property-regex@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.29.7"
dependencies:
- "@babel/helper-create-regexp-features-plugin": ^7.28.5
- "@babel/helper-plugin-utils": ^7.28.6
+ "@babel/helper-create-regexp-features-plugin": ^7.29.7
+ "@babel/helper-plugin-utils": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: d14e8c51aa73f592575c1543400fd67d96df6410d75c9dc10dd640fd7eecb37366a2f2368bbdd7529842532eda4af181c921bda95146c6d373c64ea59c6e9991
+ checksum: 03ee0b5d27eee08ba71bc09e919eb648094123985b7adc7dc875e4172100596a47ab68337abf6814cbd3140c6552cf1044135eb0ec1ec78345e1270e5e6aabba
languageName: node
linkType: hard
-"@babel/plugin-transform-unicode-regex@npm:^7.27.1":
- version: 7.27.1
- resolution: "@babel/plugin-transform-unicode-regex@npm:7.27.1"
+"@babel/plugin-transform-unicode-regex@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-unicode-regex@npm:7.29.7"
dependencies:
- "@babel/helper-create-regexp-features-plugin": ^7.27.1
- "@babel/helper-plugin-utils": ^7.27.1
+ "@babel/helper-create-regexp-features-plugin": ^7.29.7
+ "@babel/helper-plugin-utils": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: a34d89a2b75fb78e66d97c3dc90d4877f7e31f43316b52176f95a5dee20e9bb56ecf158eafc42a001676ddf7b393d9e67650bad6b32f5405780f25fb83cd68e3
+ checksum: 1ade0672ae5bbbf2ec1ea0a8de1b5d804ae414283215620097ab21cf7f05dae8916f5b0548a18c6f080ec17135018f5edd2d38f8fa9ca052af570cab5c712786
languageName: node
linkType: hard
-"@babel/plugin-transform-unicode-sets-regex@npm:^7.28.6":
- version: 7.28.6
- resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.28.6"
+"@babel/plugin-transform-unicode-sets-regex@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.29.7"
dependencies:
- "@babel/helper-create-regexp-features-plugin": ^7.28.5
- "@babel/helper-plugin-utils": ^7.28.6
+ "@babel/helper-create-regexp-features-plugin": ^7.29.7
+ "@babel/helper-plugin-utils": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0
- checksum: 423971fe2eef9d18782b1c30f5f42613ee510e5b9c08760c5538a0997b36c34495acce261e0e37a27831f81330359230bd1f33c2e1822de70241002b45b7d68e
+ checksum: 680c22e2a63bffbf6798b0c2f599b06beb7ea4d29ee37a56c9192014143d396c479b12783d9c343e107fa491aeeb65b1ca774fd76825ffb306eef7fb5e7b4b2c
languageName: node
linkType: hard
-"@babel/preset-env@npm:^7.29.3":
- version: 7.29.3
- resolution: "@babel/preset-env@npm:7.29.3"
+"@babel/preset-env@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/preset-env@npm:7.29.7"
dependencies:
- "@babel/compat-data": ^7.29.3
- "@babel/helper-compilation-targets": ^7.28.6
- "@babel/helper-plugin-utils": ^7.28.6
- "@babel/helper-validator-option": ^7.27.1
- "@babel/plugin-bugfix-firefox-class-in-computed-class-key": ^7.28.5
- "@babel/plugin-bugfix-safari-class-field-initializer-scope": ^7.27.1
- "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.27.1
- "@babel/plugin-bugfix-safari-rest-destructuring-rhs-array": ^7.29.3
- "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.27.1
- "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": ^7.28.6
+ "@babel/compat-data": ^7.29.7
+ "@babel/helper-compilation-targets": ^7.29.7
+ "@babel/helper-plugin-utils": ^7.29.7
+ "@babel/helper-validator-option": ^7.29.7
+ "@babel/plugin-bugfix-firefox-class-in-computed-class-key": ^7.29.7
+ "@babel/plugin-bugfix-safari-class-field-initializer-scope": ^7.29.7
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.29.7
+ "@babel/plugin-bugfix-safari-rest-destructuring-rhs-array": ^7.29.7
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.29.7
+ "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": ^7.29.7
"@babel/plugin-proposal-private-property-in-object": 7.21.0-placeholder-for-preset-env.2
- "@babel/plugin-syntax-import-assertions": ^7.28.6
- "@babel/plugin-syntax-import-attributes": ^7.28.6
+ "@babel/plugin-syntax-import-assertions": ^7.29.7
+ "@babel/plugin-syntax-import-attributes": ^7.29.7
"@babel/plugin-syntax-unicode-sets-regex": ^7.18.6
- "@babel/plugin-transform-arrow-functions": ^7.27.1
- "@babel/plugin-transform-async-generator-functions": ^7.29.0
- "@babel/plugin-transform-async-to-generator": ^7.28.6
- "@babel/plugin-transform-block-scoped-functions": ^7.27.1
- "@babel/plugin-transform-block-scoping": ^7.28.6
- "@babel/plugin-transform-class-properties": ^7.28.6
- "@babel/plugin-transform-class-static-block": ^7.28.6
- "@babel/plugin-transform-classes": ^7.28.6
- "@babel/plugin-transform-computed-properties": ^7.28.6
- "@babel/plugin-transform-destructuring": ^7.28.5
- "@babel/plugin-transform-dotall-regex": ^7.28.6
- "@babel/plugin-transform-duplicate-keys": ^7.27.1
- "@babel/plugin-transform-duplicate-named-capturing-groups-regex": ^7.29.0
- "@babel/plugin-transform-dynamic-import": ^7.27.1
- "@babel/plugin-transform-explicit-resource-management": ^7.28.6
- "@babel/plugin-transform-exponentiation-operator": ^7.28.6
- "@babel/plugin-transform-export-namespace-from": ^7.27.1
- "@babel/plugin-transform-for-of": ^7.27.1
- "@babel/plugin-transform-function-name": ^7.27.1
- "@babel/plugin-transform-json-strings": ^7.28.6
- "@babel/plugin-transform-literals": ^7.27.1
- "@babel/plugin-transform-logical-assignment-operators": ^7.28.6
- "@babel/plugin-transform-member-expression-literals": ^7.27.1
- "@babel/plugin-transform-modules-amd": ^7.27.1
- "@babel/plugin-transform-modules-commonjs": ^7.28.6
- "@babel/plugin-transform-modules-systemjs": ^7.29.0
- "@babel/plugin-transform-modules-umd": ^7.27.1
- "@babel/plugin-transform-named-capturing-groups-regex": ^7.29.0
- "@babel/plugin-transform-new-target": ^7.27.1
- "@babel/plugin-transform-nullish-coalescing-operator": ^7.28.6
- "@babel/plugin-transform-numeric-separator": ^7.28.6
- "@babel/plugin-transform-object-rest-spread": ^7.28.6
- "@babel/plugin-transform-object-super": ^7.27.1
- "@babel/plugin-transform-optional-catch-binding": ^7.28.6
- "@babel/plugin-transform-optional-chaining": ^7.28.6
- "@babel/plugin-transform-parameters": ^7.27.7
- "@babel/plugin-transform-private-methods": ^7.28.6
- "@babel/plugin-transform-private-property-in-object": ^7.28.6
- "@babel/plugin-transform-property-literals": ^7.27.1
- "@babel/plugin-transform-regenerator": ^7.29.0
- "@babel/plugin-transform-regexp-modifiers": ^7.28.6
- "@babel/plugin-transform-reserved-words": ^7.27.1
- "@babel/plugin-transform-shorthand-properties": ^7.27.1
- "@babel/plugin-transform-spread": ^7.28.6
- "@babel/plugin-transform-sticky-regex": ^7.27.1
- "@babel/plugin-transform-template-literals": ^7.27.1
- "@babel/plugin-transform-typeof-symbol": ^7.27.1
- "@babel/plugin-transform-unicode-escapes": ^7.27.1
- "@babel/plugin-transform-unicode-property-regex": ^7.28.6
- "@babel/plugin-transform-unicode-regex": ^7.27.1
- "@babel/plugin-transform-unicode-sets-regex": ^7.28.6
+ "@babel/plugin-transform-arrow-functions": ^7.29.7
+ "@babel/plugin-transform-async-generator-functions": ^7.29.7
+ "@babel/plugin-transform-async-to-generator": ^7.29.7
+ "@babel/plugin-transform-block-scoped-functions": ^7.29.7
+ "@babel/plugin-transform-block-scoping": ^7.29.7
+ "@babel/plugin-transform-class-properties": ^7.29.7
+ "@babel/plugin-transform-class-static-block": ^7.29.7
+ "@babel/plugin-transform-classes": ^7.29.7
+ "@babel/plugin-transform-computed-properties": ^7.29.7
+ "@babel/plugin-transform-destructuring": ^7.29.7
+ "@babel/plugin-transform-dotall-regex": ^7.29.7
+ "@babel/plugin-transform-duplicate-keys": ^7.29.7
+ "@babel/plugin-transform-duplicate-named-capturing-groups-regex": ^7.29.7
+ "@babel/plugin-transform-dynamic-import": ^7.29.7
+ "@babel/plugin-transform-explicit-resource-management": ^7.29.7
+ "@babel/plugin-transform-exponentiation-operator": ^7.29.7
+ "@babel/plugin-transform-export-namespace-from": ^7.29.7
+ "@babel/plugin-transform-for-of": ^7.29.7
+ "@babel/plugin-transform-function-name": ^7.29.7
+ "@babel/plugin-transform-json-strings": ^7.29.7
+ "@babel/plugin-transform-literals": ^7.29.7
+ "@babel/plugin-transform-logical-assignment-operators": ^7.29.7
+ "@babel/plugin-transform-member-expression-literals": ^7.29.7
+ "@babel/plugin-transform-modules-amd": ^7.29.7
+ "@babel/plugin-transform-modules-commonjs": ^7.29.7
+ "@babel/plugin-transform-modules-systemjs": ^7.29.7
+ "@babel/plugin-transform-modules-umd": ^7.29.7
+ "@babel/plugin-transform-named-capturing-groups-regex": ^7.29.7
+ "@babel/plugin-transform-new-target": ^7.29.7
+ "@babel/plugin-transform-nullish-coalescing-operator": ^7.29.7
+ "@babel/plugin-transform-numeric-separator": ^7.29.7
+ "@babel/plugin-transform-object-rest-spread": ^7.29.7
+ "@babel/plugin-transform-object-super": ^7.29.7
+ "@babel/plugin-transform-optional-catch-binding": ^7.29.7
+ "@babel/plugin-transform-optional-chaining": ^7.29.7
+ "@babel/plugin-transform-parameters": ^7.29.7
+ "@babel/plugin-transform-private-methods": ^7.29.7
+ "@babel/plugin-transform-private-property-in-object": ^7.29.7
+ "@babel/plugin-transform-property-literals": ^7.29.7
+ "@babel/plugin-transform-regenerator": ^7.29.7
+ "@babel/plugin-transform-regexp-modifiers": ^7.29.7
+ "@babel/plugin-transform-reserved-words": ^7.29.7
+ "@babel/plugin-transform-shorthand-properties": ^7.29.7
+ "@babel/plugin-transform-spread": ^7.29.7
+ "@babel/plugin-transform-sticky-regex": ^7.29.7
+ "@babel/plugin-transform-template-literals": ^7.29.7
+ "@babel/plugin-transform-typeof-symbol": ^7.29.7
+ "@babel/plugin-transform-unicode-escapes": ^7.29.7
+ "@babel/plugin-transform-unicode-property-regex": ^7.29.7
+ "@babel/plugin-transform-unicode-regex": ^7.29.7
+ "@babel/plugin-transform-unicode-sets-regex": ^7.29.7
"@babel/preset-modules": 0.1.6-no-external-plugins
babel-plugin-polyfill-corejs2: ^0.4.15
babel-plugin-polyfill-corejs3: ^0.14.0
@@ -1528,7 +1327,7 @@ __metadata:
semver: ^6.3.1
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: bc07d151dbbcee339e9f7f68876b8d89798e01bc0a04d44c92460be61ac7bdc34810e81bc99055dc01305c86350fd8b54969fc907aa405702824b9b96917028d
+ checksum: 36deae2ea4329e8490fc4507e6747e07c4cff9df1f1397aa99fae16e03a5195f9c7a3494f571ddfb5002bbc0e18832a8cc711831d686896312fa127823f7fedc
languageName: node
linkType: hard
@@ -1545,105 +1344,62 @@ __metadata:
languageName: node
linkType: hard
-"@babel/preset-react@npm:^7.28.5":
- version: 7.28.5
- resolution: "@babel/preset-react@npm:7.28.5"
+"@babel/preset-react@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/preset-react@npm:7.29.7"
dependencies:
- "@babel/helper-plugin-utils": ^7.27.1
- "@babel/helper-validator-option": ^7.27.1
- "@babel/plugin-transform-react-display-name": ^7.28.0
- "@babel/plugin-transform-react-jsx": ^7.27.1
- "@babel/plugin-transform-react-jsx-development": ^7.27.1
- "@babel/plugin-transform-react-pure-annotations": ^7.27.1
+ "@babel/helper-plugin-utils": ^7.29.7
+ "@babel/helper-validator-option": ^7.29.7
+ "@babel/plugin-transform-react-display-name": ^7.29.7
+ "@babel/plugin-transform-react-jsx": ^7.29.7
+ "@babel/plugin-transform-react-jsx-development": ^7.29.7
+ "@babel/plugin-transform-react-pure-annotations": ^7.29.7
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 13bc1fe4dde0a29d00323e46749e5beb457844507cb3afa2fefbd85d283c2d4836f9e4a780be735de58a44c505870476dc2838f1f8faf9d6f056481e65f1a0fb
- languageName: node
- linkType: hard
-
-"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.28.2, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.8.7":
- version: 7.28.4
- resolution: "@babel/runtime@npm:7.28.4"
- checksum: 934b0a0460f7d06637d93fcd1a44ac49adc33518d17253b5a0b55ff4cb90a45d8fe78bf034b448911dbec7aff2a90b918697559f78d21c99ff8dbadae9565b55
- languageName: node
- linkType: hard
-
-"@babel/runtime@npm:^7.29.2":
- version: 7.29.2
- resolution: "@babel/runtime@npm:7.29.2"
- checksum: d5548d1165de8995f8afc93a5694b8625409be16cd1f2250ac13e331335858ddac3cb9fd278e6c43956a130101a2203f09417938a1a96f9fb70f02b4b4172e1d
+ checksum: ec9d4d418df3825674ef807020b90a93d6bf6b786a723a59e673c3a32e31927b2f8a50071a17a50fff632f41eda8933e4196974130f2a5cdeb1a040fb2b62b76
languageName: node
linkType: hard
-"@babel/template@npm:^7.27.2, @babel/template@npm:^7.3.3":
- version: 7.27.2
- resolution: "@babel/template@npm:7.27.2"
- dependencies:
- "@babel/code-frame": ^7.27.1
- "@babel/parser": ^7.27.2
- "@babel/types": ^7.27.1
- checksum: ff5628bc066060624afd970616090e5bba91c6240c2e4b458d13267a523572cbfcbf549391eec8217b94b064cf96571c6273f0c04b28a8567b96edc675c28e27
+"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.28.2, @babel/runtime@npm:^7.29.7, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.8.7":
+ version: 7.29.7
+ resolution: "@babel/runtime@npm:7.29.7"
+ checksum: bc311855c6dbf5356030979584ca0f8b6cee39fe058175b02e85a73e246fc76ae30248b0d40e70c2652101faeb43279468ed2d086a670673eb9783c1fee1df2b
languageName: node
linkType: hard
-"@babel/template@npm:^7.28.6":
- version: 7.28.6
- resolution: "@babel/template@npm:7.28.6"
+"@babel/template@npm:^7.29.7, @babel/template@npm:^7.3.3":
+ version: 7.29.7
+ resolution: "@babel/template@npm:7.29.7"
dependencies:
- "@babel/code-frame": ^7.28.6
- "@babel/parser": ^7.28.6
- "@babel/types": ^7.28.6
- checksum: 8ab6383053e226025d9491a6e795293f2140482d14f60c1244bece6bf53610ed1e251d5e164de66adab765629881c7d9416e1e540c716541d2fd0f8f36a013d7
+ "@babel/code-frame": ^7.29.7
+ "@babel/parser": ^7.29.7
+ "@babel/types": ^7.29.7
+ checksum: 521eb6a1fd4735074ca8dac0d70810860a80edf3bf78105851571993cd13701a2041987e7398ccc9376eb6235ea1258bf494ccaccf3b67fa98dbe954154a2e93
languageName: node
linkType: hard
-"@babel/traverse@npm:^7.27.1, @babel/traverse@npm:^7.28.3, @babel/traverse@npm:^7.28.5":
- version: 7.28.5
- resolution: "@babel/traverse@npm:7.28.5"
+"@babel/traverse@npm:^7.29.7":
+ version: 7.29.7
+ resolution: "@babel/traverse@npm:7.29.7"
dependencies:
- "@babel/code-frame": ^7.27.1
- "@babel/generator": ^7.28.5
- "@babel/helper-globals": ^7.28.0
- "@babel/parser": ^7.28.5
- "@babel/template": ^7.27.2
- "@babel/types": ^7.28.5
+ "@babel/code-frame": ^7.29.7
+ "@babel/generator": ^7.29.7
+ "@babel/helper-globals": ^7.29.7
+ "@babel/parser": ^7.29.7
+ "@babel/template": ^7.29.7
+ "@babel/types": ^7.29.7
debug: ^4.3.1
- checksum: e028ee9654f44be7c2a2df268455cee72d5c424c9ae536785f8f7c8680356f7b977c77ad76909d07eeed09ff1e125ce01cf783011f66b56c838791a85fa6af04
+ checksum: 6c4508fd2a308a6a41fbf40bd2590bccfdc3903de51c640a928c49e810220b9e27323a083cda604d44a27449b57265a701b549de01f479611390863734b4fd38
languageName: node
linkType: hard
-"@babel/traverse@npm:^7.28.6, @babel/traverse@npm:^7.29.0":
- version: 7.29.0
- resolution: "@babel/traverse@npm:7.29.0"
+"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.27.3, @babel/types@npm:^7.28.2, @babel/types@npm:^7.29.7, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4":
+ version: 7.29.7
+ resolution: "@babel/types@npm:7.29.7"
dependencies:
- "@babel/code-frame": ^7.29.0
- "@babel/generator": ^7.29.0
- "@babel/helper-globals": ^7.28.0
- "@babel/parser": ^7.29.0
- "@babel/template": ^7.28.6
- "@babel/types": ^7.29.0
- debug: ^4.3.1
- checksum: fbb5085aa525b5d4ecd9fe2f5885d88413fff6ad9c0fac244c37f96069b6d3af9ce825750cd16af1d97d26fa3d354b38dbbdb5f31430e0d99ed89660ab65430e
- languageName: node
- linkType: hard
-
-"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.27.1, @babel/types@npm:^7.27.3, @babel/types@npm:^7.28.2, @babel/types@npm:^7.28.4, @babel/types@npm:^7.28.5, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4":
- version: 7.28.5
- resolution: "@babel/types@npm:7.28.5"
- dependencies:
- "@babel/helper-string-parser": ^7.27.1
- "@babel/helper-validator-identifier": ^7.28.5
- checksum: 5bc266af9e55ff92f9ddf33d83a42c9de1a87f9579d0ed62ef94a741a081692dd410a4fbbab18d514b83e135083ff05bc0e37003834801c9514b9d8ad748070d
- languageName: node
- linkType: hard
-
-"@babel/types@npm:^7.28.6, @babel/types@npm:^7.29.0":
- version: 7.29.0
- resolution: "@babel/types@npm:7.29.0"
- dependencies:
- "@babel/helper-string-parser": ^7.27.1
- "@babel/helper-validator-identifier": ^7.28.5
- checksum: 83f190438e94c22b2574aaeef7501830311ef266eaabfb06523409f64e2fe855e522951607085d71cad286719adef14e1ba37b671f334a7cd25b0f8506a01e0b
+ "@babel/helper-string-parser": ^7.29.7
+ "@babel/helper-validator-identifier": ^7.29.7
+ checksum: 71c46837d22c5c63a5ed571f3b68b4261ecabfc3d4be7251b336ccbd26bc52752ae68ae6d16d24ea512311b78b6f54efdfb00dde87a81a4dc3d19e4a45f05b20
languageName: node
linkType: hard
@@ -2249,130 +2005,131 @@ __metadata:
languageName: node
linkType: hard
-"@jest/console@npm:30.3.0":
- version: 30.3.0
- resolution: "@jest/console@npm:30.3.0"
+"@jest/console@npm:30.4.1":
+ version: 30.4.1
+ resolution: "@jest/console@npm:30.4.1"
dependencies:
- "@jest/types": 30.3.0
+ "@jest/types": 30.4.1
"@types/node": "*"
chalk: ^4.1.2
- jest-message-util: 30.3.0
- jest-util: 30.3.0
+ jest-message-util: 30.4.1
+ jest-util: 30.4.1
slash: ^3.0.0
- checksum: d74bacf7229d5ac08918e8e8d43a7cfda70edae3925eb4e4ad57d890f689c1ad6f2baa1afb3cb816d94919f5b41a0745219de61ac60b2fc968f041ef4dad93c7
+ checksum: 21d179fb96a17a622b1b15c3d2ced4c83ae9b3912012505e4720701383f8e0e0d32c41b4c6adeeaaadd193b821d5759425cd1a774ba8ab4924213f218bd50125
languageName: node
linkType: hard
-"@jest/core@npm:30.3.0":
- version: 30.3.0
- resolution: "@jest/core@npm:30.3.0"
+"@jest/core@npm:30.4.2":
+ version: 30.4.2
+ resolution: "@jest/core@npm:30.4.2"
dependencies:
- "@jest/console": 30.3.0
- "@jest/pattern": 30.0.1
- "@jest/reporters": 30.3.0
- "@jest/test-result": 30.3.0
- "@jest/transform": 30.3.0
- "@jest/types": 30.3.0
+ "@jest/console": 30.4.1
+ "@jest/pattern": 30.4.0
+ "@jest/reporters": 30.4.1
+ "@jest/test-result": 30.4.1
+ "@jest/transform": 30.4.1
+ "@jest/types": 30.4.1
"@types/node": "*"
ansi-escapes: ^4.3.2
chalk: ^4.1.2
ci-info: ^4.2.0
exit-x: ^0.2.2
+ fast-json-stable-stringify: ^2.1.0
graceful-fs: ^4.2.11
- jest-changed-files: 30.3.0
- jest-config: 30.3.0
- jest-haste-map: 30.3.0
- jest-message-util: 30.3.0
- jest-regex-util: 30.0.1
- jest-resolve: 30.3.0
- jest-resolve-dependencies: 30.3.0
- jest-runner: 30.3.0
- jest-runtime: 30.3.0
- jest-snapshot: 30.3.0
- jest-util: 30.3.0
- jest-validate: 30.3.0
- jest-watcher: 30.3.0
- pretty-format: 30.3.0
+ jest-changed-files: 30.4.1
+ jest-config: 30.4.2
+ jest-haste-map: 30.4.1
+ jest-message-util: 30.4.1
+ jest-regex-util: 30.4.0
+ jest-resolve: 30.4.1
+ jest-resolve-dependencies: 30.4.2
+ jest-runner: 30.4.2
+ jest-runtime: 30.4.2
+ jest-snapshot: 30.4.1
+ jest-util: 30.4.1
+ jest-validate: 30.4.1
+ jest-watcher: 30.4.1
+ pretty-format: 30.4.1
slash: ^3.0.0
peerDependencies:
node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
peerDependenciesMeta:
node-notifier:
optional: true
- checksum: 15a8823e736e9ce7bee58f46e5306cdcc8bf2d29d0697ba5c256b6fe94f5aa79edb21a13acb01e460787a1d6c8447c771750e27e46fc58c91b35ca15070b7a7c
+ checksum: c405da432cbabbde153f90af8a96f52eec62764eb4f973e1b23c2f6dc173e2dac4c264119f513fb3b39cbaaaccb71dab2b0e0ca2cb3529d687ccdfe9eee2e383
languageName: node
linkType: hard
-"@jest/diff-sequences@npm:30.3.0":
- version: 30.3.0
- resolution: "@jest/diff-sequences@npm:30.3.0"
- checksum: 715325e544f54cf5336b54fbfecd3e7e0e779b96c1f28a2ab42fdd4388f5f3751558a474d173b0c43bc5fb513fbb0464dbf1503cc69dab248515c6ed42feecb3
+"@jest/diff-sequences@npm:30.4.0":
+ version: 30.4.0
+ resolution: "@jest/diff-sequences@npm:30.4.0"
+ checksum: a391acfbb6b349558c2c84643b4790be70e466d09bdca2eee8e4cb533cb0b5652930f591614fe05d39681e212cf984c790a770e282602c1645c561d85e8b64ee
languageName: node
linkType: hard
-"@jest/environment-jsdom-abstract@npm:30.3.0":
- version: 30.3.0
- resolution: "@jest/environment-jsdom-abstract@npm:30.3.0"
+"@jest/environment-jsdom-abstract@npm:30.4.1":
+ version: 30.4.1
+ resolution: "@jest/environment-jsdom-abstract@npm:30.4.1"
dependencies:
- "@jest/environment": 30.3.0
- "@jest/fake-timers": 30.3.0
- "@jest/types": 30.3.0
+ "@jest/environment": 30.4.1
+ "@jest/fake-timers": 30.4.1
+ "@jest/types": 30.4.1
"@types/jsdom": ^21.1.7
"@types/node": "*"
- jest-mock: 30.3.0
- jest-util: 30.3.0
+ jest-mock: 30.4.1
+ jest-util: 30.4.1
peerDependencies:
canvas: ^3.0.0
jsdom: "*"
peerDependenciesMeta:
canvas:
optional: true
- checksum: 26c310e0dc67cd5c0b265e164a1d3d114ee057b8de196fe91473bd0157942f99a2e29695fdccfd6d24da69eddb81afc05239bef8b9c2a9434f23876143175d17
+ checksum: 75d572199b17a50f7ce268e61cdab143bb19d0b39057dc765d4b016a331895babb8d7884795a685a84461bca24b791f73790241e96556366aaf6bef949778fe7
languageName: node
linkType: hard
-"@jest/environment@npm:30.3.0":
- version: 30.3.0
- resolution: "@jest/environment@npm:30.3.0"
+"@jest/environment@npm:30.4.1":
+ version: 30.4.1
+ resolution: "@jest/environment@npm:30.4.1"
dependencies:
- "@jest/fake-timers": 30.3.0
- "@jest/types": 30.3.0
+ "@jest/fake-timers": 30.4.1
+ "@jest/types": 30.4.1
"@types/node": "*"
- jest-mock: 30.3.0
- checksum: c58121d7161e5906ae46407fe1f6e2289675b1cb9dcb6079e9ce2ea2042ee029c0216860367a31660fe54de3387322b4627bf4704d10cefbe718ab72a522889d
+ jest-mock: 30.4.1
+ checksum: 4b3b25a0727f97d3b1e3023d376861ee60fc3d31a8f41270180c1a37229f1d87f974467236e4b9ded146147408904450060fed470b2f34d2d2f86c502b42a7c9
languageName: node
linkType: hard
-"@jest/expect-utils@npm:30.3.0":
- version: 30.3.0
- resolution: "@jest/expect-utils@npm:30.3.0"
+"@jest/expect-utils@npm:30.4.1":
+ version: 30.4.1
+ resolution: "@jest/expect-utils@npm:30.4.1"
dependencies:
"@jest/get-type": 30.1.0
- checksum: 963ebcf5dd3c3ef1b8f932d04f5f594357fcc277089c56fd0bfcabfbdd9b0150c0bf6e13e3a8c5084c8799f019e4e8487b13cebfe31be7992016fe0ca7e9fcf7
+ checksum: c458d8b1bb26783d21ba8a911cd476deab02af29046fd67b9eadf0be6bec2b90285bff1b443bb1c69f72b8f65ef9e06d96d17a1fd65bb394747d544339451cec
languageName: node
linkType: hard
-"@jest/expect@npm:30.3.0":
- version: 30.3.0
- resolution: "@jest/expect@npm:30.3.0"
+"@jest/expect@npm:30.4.1":
+ version: 30.4.1
+ resolution: "@jest/expect@npm:30.4.1"
dependencies:
- expect: 30.3.0
- jest-snapshot: 30.3.0
- checksum: 3dd5d266f85348aec70ee06aa0ea14fd75176f09163761375910be3fa3d7ae05815a2e6daf7ff8541afcd4c61800892b48b74ddfe0ecbe5821812b2dad5e1809
+ expect: 30.4.1
+ jest-snapshot: 30.4.1
+ checksum: 0de7505ec903bd821ea34056212701220ac5fce67c98ce178c6cc683a3c5ff46d633f250e62870b7b339cb5981467e008bb34633374f8dc1eee7c078d3be8b60
languageName: node
linkType: hard
-"@jest/fake-timers@npm:30.3.0":
- version: 30.3.0
- resolution: "@jest/fake-timers@npm:30.3.0"
+"@jest/fake-timers@npm:30.4.1":
+ version: 30.4.1
+ resolution: "@jest/fake-timers@npm:30.4.1"
dependencies:
- "@jest/types": 30.3.0
- "@sinonjs/fake-timers": ^15.0.0
+ "@jest/types": 30.4.1
+ "@sinonjs/fake-timers": ^15.4.0
"@types/node": "*"
- jest-message-util: 30.3.0
- jest-mock: 30.3.0
- jest-util: 30.3.0
- checksum: 6854e881a50f70f518935d1f83ace2e63bc55fc71f19145442da7cf30a26edec348b5f0ac3993d9c48a9dd0dbfd7be0c9a13d82fe481fd48bc055fdd5a6abfa3
+ jest-message-util: 30.4.1
+ jest-mock: 30.4.1
+ jest-util: 30.4.1
+ checksum: 7551cade630924ba1ba4aad84553ac2c4238c18cd134433f16804df81018785c174a7ec1bafbeb566b1cca711fd8c0b5779d7ec6bf2b6eaa1eebb4b4e81a9bcb
languageName: node
linkType: hard
@@ -2383,37 +2140,37 @@ __metadata:
languageName: node
linkType: hard
-"@jest/globals@npm:30.3.0":
- version: 30.3.0
- resolution: "@jest/globals@npm:30.3.0"
+"@jest/globals@npm:30.4.1":
+ version: 30.4.1
+ resolution: "@jest/globals@npm:30.4.1"
dependencies:
- "@jest/environment": 30.3.0
- "@jest/expect": 30.3.0
- "@jest/types": 30.3.0
- jest-mock: 30.3.0
- checksum: 485bdc0f35faf3e76cb451b75e16892d87f7ab5757e290b1a9e849a3af0ef81c47abddb188fbc0442a4689514cf0551e34d13970c9cf03610a269c39f800ff46
+ "@jest/environment": 30.4.1
+ "@jest/expect": 30.4.1
+ "@jest/types": 30.4.1
+ jest-mock: 30.4.1
+ checksum: 5fe04b9c3b97f0061e4464201ee0dd674dd958843eb80542791d1c576c51f12aaa3f3b369e136d5fd3f8c716f9c9bbfbb76491a3cbc3c4efb3cc71063f909132
languageName: node
linkType: hard
-"@jest/pattern@npm:30.0.1":
- version: 30.0.1
- resolution: "@jest/pattern@npm:30.0.1"
+"@jest/pattern@npm:30.4.0":
+ version: 30.4.0
+ resolution: "@jest/pattern@npm:30.4.0"
dependencies:
"@types/node": "*"
- jest-regex-util: 30.0.1
- checksum: 1a1857df19be87e714786c3ab36862702bf8ed1e2665044b2ce5ffa787b5ab74c876f1756e83d3b09737dd98c1e980e259059b65b9b0f49b03716634463a8f9e
+ jest-regex-util: 30.4.0
+ checksum: d0877dc7034cb59e9eafb8fedd6b977a1cd91191d7ac2574c0c0d046074ef7c895f0952af1586898469dcceb0153230a32b67a45bc4dd1ee2ae66df371b95363
languageName: node
linkType: hard
-"@jest/reporters@npm:30.3.0":
- version: 30.3.0
- resolution: "@jest/reporters@npm:30.3.0"
+"@jest/reporters@npm:30.4.1":
+ version: 30.4.1
+ resolution: "@jest/reporters@npm:30.4.1"
dependencies:
"@bcoe/v8-coverage": ^0.2.3
- "@jest/console": 30.3.0
- "@jest/test-result": 30.3.0
- "@jest/transform": 30.3.0
- "@jest/types": 30.3.0
+ "@jest/console": 30.4.1
+ "@jest/test-result": 30.4.1
+ "@jest/transform": 30.4.1
+ "@jest/types": 30.4.1
"@jridgewell/trace-mapping": ^0.3.25
"@types/node": "*"
chalk: ^4.1.2
@@ -2426,9 +2183,9 @@ __metadata:
istanbul-lib-report: ^3.0.0
istanbul-lib-source-maps: ^5.0.0
istanbul-reports: ^3.1.3
- jest-message-util: 30.3.0
- jest-util: 30.3.0
- jest-worker: 30.3.0
+ jest-message-util: 30.4.1
+ jest-util: 30.4.1
+ jest-worker: 30.4.1
slash: ^3.0.0
string-length: ^4.0.2
v8-to-istanbul: ^9.0.1
@@ -2437,16 +2194,16 @@ __metadata:
peerDependenciesMeta:
node-notifier:
optional: true
- checksum: ffafe5f4d6dce6eb73576890705b77e4792c7d003d897dfbda2569d78d17b5585917ce875200de2bcba1e2c34c83af28c68cb665b7e8f8359fb9499a26f5f5a0
+ checksum: 55b88b358103b1ebc46e8342e520165e983d539c5fe427534b2817f341985012e2ee09002674270ef69d87292325a2ba1182aa1c89446d01bd1834879307598a
languageName: node
linkType: hard
-"@jest/schemas@npm:30.0.5":
- version: 30.0.5
- resolution: "@jest/schemas@npm:30.0.5"
+"@jest/schemas@npm:30.4.1":
+ version: 30.4.1
+ resolution: "@jest/schemas@npm:30.4.1"
dependencies:
"@sinclair/typebox": ^0.34.0
- checksum: 7a4fc4166f688947c22d81e61aaf2cb22f178dbf6ee806b0931b75136899d426a72a8330762f27f0cf6f79da0d2a56f49a22fe09f5f80df95a683ed237a0f3b0
+ checksum: 25d0db478805adff276e02f9e1b5a90d5962e51020503eede22edee432de3958654edddca0e66988c515fa7bc06461f5220826de9f76fcc89c5824e88d624842
languageName: node
linkType: hard
@@ -2459,15 +2216,15 @@ __metadata:
languageName: node
linkType: hard
-"@jest/snapshot-utils@npm:30.3.0":
- version: 30.3.0
- resolution: "@jest/snapshot-utils@npm:30.3.0"
+"@jest/snapshot-utils@npm:30.4.1":
+ version: 30.4.1
+ resolution: "@jest/snapshot-utils@npm:30.4.1"
dependencies:
- "@jest/types": 30.3.0
+ "@jest/types": 30.4.1
chalk: ^4.1.2
graceful-fs: ^4.2.11
natural-compare: ^1.4.0
- checksum: 5cbc5622bf83cc876ad237fa780bc9b64196a5536469a37d7042c25ec70c299cb610103445af8bdadc2a507e11142ca7f47a74ca8f4c372c2dc076091b3725a1
+ checksum: 0e561d6a8af6a35bc6a37e649229f049efa5a62e4325aafd26803a230f6f5ffcdc87f376b8c400bdf480fef32681c7379cb3db30707c98530018d6f8d7f201a1
languageName: node
linkType: hard
@@ -2482,49 +2239,49 @@ __metadata:
languageName: node
linkType: hard
-"@jest/test-result@npm:30.3.0":
- version: 30.3.0
- resolution: "@jest/test-result@npm:30.3.0"
+"@jest/test-result@npm:30.4.1":
+ version: 30.4.1
+ resolution: "@jest/test-result@npm:30.4.1"
dependencies:
- "@jest/console": 30.3.0
- "@jest/types": 30.3.0
+ "@jest/console": 30.4.1
+ "@jest/types": 30.4.1
"@types/istanbul-lib-coverage": ^2.0.6
collect-v8-coverage: ^1.0.2
- checksum: 63dadb4c94037260be3fa23ec82e9c9c953e6252e5ee5535b443209e7148d1d8eda8a9b59fff8bae8df24274b057c5a990715cb49c010852cd4b3e3bcdf2bd69
+ checksum: 2db40181451f21b7dcc8295fb132a1172dd7487a1d63bf105263225bec2a0d973f764b0a424f9b5a2db2ceb9d0f507c27261834bb1867d5e3eecd9e6c824243c
languageName: node
linkType: hard
-"@jest/test-sequencer@npm:30.3.0":
- version: 30.3.0
- resolution: "@jest/test-sequencer@npm:30.3.0"
+"@jest/test-sequencer@npm:30.4.1":
+ version: 30.4.1
+ resolution: "@jest/test-sequencer@npm:30.4.1"
dependencies:
- "@jest/test-result": 30.3.0
+ "@jest/test-result": 30.4.1
graceful-fs: ^4.2.11
- jest-haste-map: 30.3.0
+ jest-haste-map: 30.4.1
slash: ^3.0.0
- checksum: 46d1ca2b8e5c26cbc9d37b7b6a762000aa7d57662a230e3db097f2b27237aba020d40ea5024863652e16493d404d0c2b236683159a63ab0fda47b578654cac9c
+ checksum: 0374978dfce5b59ae83549f01cf0d92c7587e356f5d9f10c92e14b7ed857bb28596550ce5d4cf939cd985ffb7d21419855f36d04577c1eb4ed82e31bde2f9bc4
languageName: node
linkType: hard
-"@jest/transform@npm:30.3.0":
- version: 30.3.0
- resolution: "@jest/transform@npm:30.3.0"
+"@jest/transform@npm:30.4.1":
+ version: 30.4.1
+ resolution: "@jest/transform@npm:30.4.1"
dependencies:
"@babel/core": ^7.27.4
- "@jest/types": 30.3.0
+ "@jest/types": 30.4.1
"@jridgewell/trace-mapping": ^0.3.25
babel-plugin-istanbul: ^7.0.1
chalk: ^4.1.2
convert-source-map: ^2.0.0
fast-json-stable-stringify: ^2.1.0
graceful-fs: ^4.2.11
- jest-haste-map: 30.3.0
- jest-regex-util: 30.0.1
- jest-util: 30.3.0
+ jest-haste-map: 30.4.1
+ jest-regex-util: 30.4.0
+ jest-util: 30.4.1
pirates: ^4.0.7
slash: ^3.0.0
write-file-atomic: ^5.0.1
- checksum: 0327d28d4ee3903ebd415e1974c9aae6c7e7a7d1770aa07c551d34666851283125f488ec1366fa8814402bdfbd83be9b45ad551839bb407c468fa6bdb44e7d0c
+ checksum: 5b35a721774cdf7dd8a257b3d47b02ecc1705c7256a569d0105511992d8143ab89f6b247fbe07fdadff1499b4e1f3ecc9f128ed778f72203ba358f29a885ed5d
languageName: node
linkType: hard
@@ -2551,18 +2308,18 @@ __metadata:
languageName: node
linkType: hard
-"@jest/types@npm:30.3.0":
- version: 30.3.0
- resolution: "@jest/types@npm:30.3.0"
+"@jest/types@npm:30.4.1":
+ version: 30.4.1
+ resolution: "@jest/types@npm:30.4.1"
dependencies:
- "@jest/pattern": 30.0.1
- "@jest/schemas": 30.0.5
+ "@jest/pattern": 30.4.0
+ "@jest/schemas": 30.4.1
"@types/istanbul-lib-coverage": ^2.0.6
"@types/istanbul-reports": ^3.0.4
"@types/node": "*"
"@types/yargs": ^17.0.33
chalk: ^4.1.2
- checksum: ee77d038ff965b136d5509acdd477e882938961094ee4a3556555d72a1e454da99679b73c4ddd19653b1aaf3b9cd97db04114d090b31d9e6939690223eac00af
+ checksum: 746fbb96609c8cc2638a59b23e1d0e590527a301909a22728bc6dab35593ec967f45664fbd00b51fb48a53934d9be2f5df625db7a741c5caae734746d7b41046
languageName: node
linkType: hard
@@ -3299,12 +3056,12 @@ __metadata:
languageName: node
linkType: hard
-"@sinonjs/fake-timers@npm:^15.0.0":
- version: 15.3.0
- resolution: "@sinonjs/fake-timers@npm:15.3.0"
+"@sinonjs/fake-timers@npm:^15.4.0":
+ version: 15.4.0
+ resolution: "@sinonjs/fake-timers@npm:15.4.0"
dependencies:
"@sinonjs/commons": ^3.0.1
- checksum: c7af975708e651be940863efded9796658fb1a9bf41322b957e8cc77cc4592b3da53c17685b05a1d30929cf65e21654fede5a37b7c09d453cf7be2f7040f51a4
+ checksum: 89714334b84c0dd5ef84cc01ec99d7d16529297fc32a68c28e4793b89bac0de7b373310b736ed4a57697de92eca4e7cc62c2ec4fae1e651787345e2564b707f4
languageName: node
linkType: hard
@@ -3661,17 +3418,7 @@ __metadata:
languageName: node
linkType: hard
-"@types/send@npm:*":
- version: 0.17.5
- resolution: "@types/send@npm:0.17.5"
- dependencies:
- "@types/mime": ^1
- "@types/node": "*"
- checksum: bff5add75eb178c3b80bebc422db483c76eeb2cb5016508c952e4fc67d968794f9c709b978d086bf60e4d6fbfe8c0b77e99a7603a615c671c1f97f808458d4a8
- languageName: node
- linkType: hard
-
-"@types/send@npm:<1":
+"@types/send@npm:*, @types/send@npm:<1":
version: 0.17.6
resolution: "@types/send@npm:0.17.6"
dependencies:
@@ -3690,18 +3437,7 @@ __metadata:
languageName: node
linkType: hard
-"@types/serve-static@npm:*, @types/serve-static@npm:^1.15.5":
- version: 1.15.8
- resolution: "@types/serve-static@npm:1.15.8"
- dependencies:
- "@types/http-errors": "*"
- "@types/node": "*"
- "@types/send": "*"
- checksum: 41e0fb40bfdf3b5c2ac997c5dd5d58af9229e6a325dab1cf5f73b488b09635d933c1aa6f0e3265d6df8b45be0d09af36a9ffe90175088726f1db6bf104bf9ecf
- languageName: node
- linkType: hard
-
-"@types/serve-static@npm:^1":
+"@types/serve-static@npm:*, @types/serve-static@npm:^1, @types/serve-static@npm:^1.15.5":
version: 1.15.10
resolution: "@types/serve-static@npm:1.15.10"
dependencies:
@@ -4158,16 +3894,7 @@ __metadata:
languageName: node
linkType: hard
-"acorn@npm:^8.14.0, acorn@npm:^8.15.0":
- version: 8.15.0
- resolution: "acorn@npm:8.15.0"
- bin:
- acorn: bin/acorn
- checksum: 309c6b49aedf1a2e34aaf266de06de04aab6eb097c02375c66fdeb0f64556a6a823540409914fb364d9a11bc30d79d485a2eba29af47992d3490e9886c4391c3
- languageName: node
- linkType: hard
-
-"acorn@npm:^8.16.0":
+"acorn@npm:^8.14.0, acorn@npm:^8.15.0, acorn@npm:^8.16.0":
version: 8.16.0
resolution: "acorn@npm:8.16.0"
bin:
@@ -4176,32 +3903,32 @@ __metadata:
languageName: node
linkType: hard
-"ag-charts-types@npm:13.2.0":
- version: 13.2.0
- resolution: "ag-charts-types@npm:13.2.0"
- checksum: 9a78090bba9e90f45b468053d657c61f4dbce4fc0e69ed22cc8d3f5e4095d4b4d2bcc2eeb9edfda057ffd119e30c307433ec509a5c548c98ea7f330dde03a4a0
+"ag-charts-types@npm:13.3.1":
+ version: 13.3.1
+ resolution: "ag-charts-types@npm:13.3.1"
+ checksum: 619a4cc091b2d3f5715780f34d2effc1926fce715b3cbe20b4b0d5fd6269ca56b3a00d3eb4db11377d36872214085ae8bc1dc7b24a945a63cec6a571525e5a5a
languageName: node
linkType: hard
-"ag-grid-community@npm:35.2.0, ag-grid-community@npm:^35.2.0":
- version: 35.2.0
- resolution: "ag-grid-community@npm:35.2.0"
+"ag-grid-community@npm:35.3.1, ag-grid-community@npm:^35.3.1":
+ version: 35.3.1
+ resolution: "ag-grid-community@npm:35.3.1"
dependencies:
- ag-charts-types: 13.2.0
- checksum: 0c0fcba50ee61a85b3cb651fff9415fc66089c15ffd2e61b275e5fc957ee4db2b2ef2a07e3cf4471285ce4b3394c72d2c940c55669e780c70b6c747f30a3ca7c
+ ag-charts-types: 13.3.1
+ checksum: e87348cdeeeed6d5854e18f2ef8a757649502902383edeaeac8beede3460fb3a5de411593f5b111464052dca663f1413075db728fe44ff3f1020b318da0944d2
languageName: node
linkType: hard
-"ag-grid-react@npm:^35.2.0":
- version: 35.2.0
- resolution: "ag-grid-react@npm:35.2.0"
+"ag-grid-react@npm:^35.3.1":
+ version: 35.3.1
+ resolution: "ag-grid-react@npm:35.3.1"
dependencies:
- ag-grid-community: 35.2.0
+ ag-grid-community: 35.3.1
prop-types: ^15.8.1
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
- checksum: 777abeebe5073e276407265937f6db77528508e41cbc581ddb45a6945bccdd08318627c99d5a8ff8cd52ce85a6266d367c718ec4b89dd33080af2904c79b9035
+ checksum: 066da99306b90a61b241d86687e9d2ef7de9ebe8d00113dd97dc4579a5d9b72d15f78386cc6e349ca54fe7e41b10b76e0e17d00f6675319a310a67480cd3d385
languageName: node
linkType: hard
@@ -4312,13 +4039,6 @@ __metadata:
languageName: node
linkType: hard
-"ansi-regex@npm:^6.0.1":
- version: 6.2.0
- resolution: "ansi-regex@npm:6.2.0"
- checksum: f1a540a85647187f21918a87ea3fc910adc6ecc2bfc180c22d9b01a04379dce3a6c1f2e5375ab78e8d7d589eb1aeb734f49171e262e90c4225f21b4415c08c8c
- languageName: node
- linkType: hard
-
"ansi-regex@npm:^6.2.2":
version: 6.2.2
resolution: "ansi-regex@npm:6.2.2"
@@ -4584,20 +4304,20 @@ __metadata:
languageName: node
linkType: hard
-"babel-jest@npm:30.3.0":
- version: 30.3.0
- resolution: "babel-jest@npm:30.3.0"
+"babel-jest@npm:30.4.1":
+ version: 30.4.1
+ resolution: "babel-jest@npm:30.4.1"
dependencies:
- "@jest/transform": 30.3.0
+ "@jest/transform": 30.4.1
"@types/babel__core": ^7.20.5
babel-plugin-istanbul: ^7.0.1
- babel-preset-jest: 30.3.0
+ babel-preset-jest: 30.4.0
chalk: ^4.1.2
graceful-fs: ^4.2.11
slash: ^3.0.0
peerDependencies:
"@babel/core": ^7.11.0 || ^8.0.0-0
- checksum: edcee70837cc3c88e2992e6bbaaf7bba2c0d56b215cdca0a0cee214d8a47360fbcdc45117ac50cba6cb077465d045edc1285812e6df45caad9a4786a12696a1d
+ checksum: 9704c2fa202d5db5347492ae423552b8224c99102258a5446dcb0f032dea37de9fbadf37f912247db145840731f38567382c5298aef4f59afb671407af37dc00
languageName: node
linkType: hard
@@ -4656,12 +4376,12 @@ __metadata:
languageName: node
linkType: hard
-"babel-plugin-jest-hoist@npm:30.3.0":
- version: 30.3.0
- resolution: "babel-plugin-jest-hoist@npm:30.3.0"
+"babel-plugin-jest-hoist@npm:30.4.0":
+ version: 30.4.0
+ resolution: "babel-plugin-jest-hoist@npm:30.4.0"
dependencies:
"@types/babel__core": ^7.20.5
- checksum: 5d169656b7ef665a1d7669168ffe6f560aa190c98b2a13793a8d9c671cb107985bff2e93dc1af621d46fd81cae497f6476dc966a14a1f290318f2afdcaf88ddf
+ checksum: 5a4541c15405bd238589150bf459495ae4eac52c69707a2fb63270d0ff85cdb0aa33caa79cf153312491ba64b211b3fda53003dfdd9f38fb6a89cc36a3decb2b
languageName: node
linkType: hard
@@ -4749,15 +4469,15 @@ __metadata:
languageName: node
linkType: hard
-"babel-preset-jest@npm:30.3.0":
- version: 30.3.0
- resolution: "babel-preset-jest@npm:30.3.0"
+"babel-preset-jest@npm:30.4.0":
+ version: 30.4.0
+ resolution: "babel-preset-jest@npm:30.4.0"
dependencies:
- babel-plugin-jest-hoist: 30.3.0
+ babel-plugin-jest-hoist: 30.4.0
babel-preset-current-node-syntax: ^1.2.0
peerDependencies:
"@babel/core": ^7.11.0 || ^8.0.0-beta.1
- checksum: fd29c8ff5967c047006bde152cf5ac99ce2e1d573f6f044828cb4d06eab95b65549a38554ea97174bbe508006d2a7cb1370581d87aa73f6b3c2134f2d49aaf85
+ checksum: 7fbdcaa1f24b2efbc1b658220df849a375858bd5e208cefcf53b116bca972b28565a0715521cc20bec41adbd20ff73b9dbbdea3634bd71f50062f0ce694a7159
languageName: node
linkType: hard
@@ -5562,12 +5282,12 @@ __metadata:
version: 0.0.0-use.local
resolution: "courseography@workspace:."
dependencies:
- "@babel/core": ^7.29.0
- "@babel/eslint-parser": ^7.28.6
+ "@babel/core": ^7.29.7
+ "@babel/eslint-parser": ^7.29.7
"@babel/plugin-proposal-class-properties": ^7.18.6
- "@babel/preset-env": ^7.29.3
- "@babel/preset-react": ^7.28.5
- "@babel/runtime": ^7.29.2
+ "@babel/preset-env": ^7.29.7
+ "@babel/preset-react": ^7.29.7
+ "@babel/runtime": ^7.29.7
"@emotion/react": ^11.14.0
"@emotion/styled": ^11.14.1
"@eslint/compat": ^1.2.9
@@ -5578,8 +5298,8 @@ __metadata:
"@testing-library/dom": ^10.4.0
"@testing-library/react": ^16.0.1
"@testing-library/user-event": ^14.6.1
- ag-grid-community: ^35.2.0
- ag-grid-react: ^35.2.0
+ ag-grid-community: ^35.3.1
+ ag-grid-react: ^35.3.1
babel-jest: ^29.5.0
babel-loader: ^10.0.0
bootstrap: ^5.3.3
@@ -5596,8 +5316,8 @@ __metadata:
handlebars: ^4.7.9
html-loader: ^5.1.0
husky: ^9.1.7
- jest: ^30.3.0
- jest-environment-jsdom: ^30.3.0
+ jest: ^30.4.2
+ jest-environment-jsdom: ^30.4.1
jquery: ^3.7.1
leaflet: ^1.9.3
lint-staged: ^16.2.7
@@ -5609,8 +5329,8 @@ __metadata:
precise-commits: 1.0.2
prettier: ^3.7.4
prop-types: 15.8.1
- react: ^19.2.4
- react-dom: ^19.2.4
+ react: ^19.2.7
+ react-dom: ^19.2.7
react-error-boundary: ^5.0.0
react-leaflet: ^4.2.1
react-modal: ^3.16.1
@@ -5622,7 +5342,7 @@ __metadata:
stylelint-config-standard-scss: ^17.0.0
webpack: ^5.105.3
webpack-cli: ^6.0.1
- webpack-dev-server: ^5.2.4
+ webpack-dev-server: ^5.2.5
webpack-merge: ^6.0.1
languageName: unknown
linkType: soft
@@ -6728,17 +6448,17 @@ __metadata:
languageName: node
linkType: hard
-"expect@npm:30.3.0":
- version: 30.3.0
- resolution: "expect@npm:30.3.0"
+"expect@npm:30.4.1":
+ version: 30.4.1
+ resolution: "expect@npm:30.4.1"
dependencies:
- "@jest/expect-utils": 30.3.0
+ "@jest/expect-utils": 30.4.1
"@jest/get-type": 30.1.0
- jest-matcher-utils: 30.3.0
- jest-message-util: 30.3.0
- jest-mock: 30.3.0
- jest-util: 30.3.0
- checksum: 1563465523364c6d01d7b8e7bf61a662f312b611757c755c1e9ed98dfa2ffac10664d5ed4119350cf8a8a64ec38eea5a2606d0c48af41dacb25f5b7e17c59468
+ jest-matcher-utils: 30.4.1
+ jest-message-util: 30.4.1
+ jest-mock: 30.4.1
+ jest-util: 30.4.1
+ checksum: b128d5cf1e072f504075d5a4ee9487d9310a8382129cc117fd1ea3a473ada5da7463a9c0537e58519be3d9d789900e9863e65280aa712b8762de627a07fe4371
languageName: node
linkType: hard
@@ -7123,15 +6843,15 @@ __metadata:
linkType: hard
"form-data@npm:~4.0.4":
- version: 4.0.4
- resolution: "form-data@npm:4.0.4"
+ version: 4.0.6
+ resolution: "form-data@npm:4.0.6"
dependencies:
asynckit: ^0.4.0
combined-stream: ^1.0.8
es-set-tostringtag: ^2.1.0
- hasown: ^2.0.2
- mime-types: ^2.1.12
- checksum: 9b7788836df9fa5a6999e0c02515b001946b2a868cfe53f026c69e2c537a2ff9fbfb8e9d2b678744628f3dc7a2d6e14e4e45dfaf68aa6239727f0bdb8ce0abf2
+ hasown: ^2.0.4
+ mime-types: ^2.1.35
+ checksum: e51b9e97678c250c872cd4ec3e5eaa8fa43bee4b1acf8274c337308aebc6aebb0553091ce0810612826601ffafed9dace12504a63c6ef16c57fffcd7dcfec457
languageName: node
linkType: hard
@@ -7265,14 +6985,7 @@ __metadata:
languageName: node
linkType: hard
-"get-east-asian-width@npm:^1.0.0, get-east-asian-width@npm:^1.3.0, get-east-asian-width@npm:^1.3.1":
- version: 1.4.0
- resolution: "get-east-asian-width@npm:1.4.0"
- checksum: 1d9a81a8004f4217ebef5d461875047d269e4b57e039558fd65130877cd4da8e3f61e1c4eada0c8b10e2816c7baf7d5fddb7006f561da13bc6f6dd19c1e964a4
- languageName: node
- linkType: hard
-
-"get-east-asian-width@npm:^1.5.0":
+"get-east-asian-width@npm:^1.0.0, get-east-asian-width@npm:^1.3.1, get-east-asian-width@npm:^1.5.0":
version: 1.5.0
resolution: "get-east-asian-width@npm:1.5.0"
checksum: 60bc34cd1e975055ab99f0f177e31bed3e516ff7cee9c536474383954a976abaa6b94a51d99ad158ef1e372790fa096cab7d07f166bb0778f6587954c0fbe946
@@ -7596,16 +7309,7 @@ __metadata:
languageName: node
linkType: hard
-"hashery@npm:^1.2.0":
- version: 1.3.0
- resolution: "hashery@npm:1.3.0"
- dependencies:
- hookified: ^1.13.0
- checksum: 88b2e605ce2614f0744eb68863986091fb697c8bdf54dadb13379d8630dcca246f5f7dac26945a781daeacc29321291788db0908b60f05944574222cd9eb4495
- languageName: node
- linkType: hard
-
-"hashery@npm:^1.3.0":
+"hashery@npm:^1.2.0, hashery@npm:^1.3.0":
version: 1.4.0
resolution: "hashery@npm:1.4.0"
dependencies:
@@ -7623,6 +7327,15 @@ __metadata:
languageName: node
linkType: hard
+"hasown@npm:^2.0.4":
+ version: 2.0.4
+ resolution: "hasown@npm:2.0.4"
+ dependencies:
+ function-bind: ^1.1.2
+ checksum: 4bd8f916b629e06324853593ffbdd45e200022952a85ad0c967f3bd4c2e4c7e1f9a9766fbe6186f60bd394e0afc73e719730caa1da15cd9bd832b7cdf53fd26c
+ languageName: node
+ linkType: hard
+
"hoist-non-react-statics@npm:^3.3.0, hoist-non-react-statics@npm:^3.3.1":
version: 3.3.2
resolution: "hoist-non-react-statics@npm:3.3.2"
@@ -7632,14 +7345,7 @@ __metadata:
languageName: node
linkType: hard
-"hookified@npm:^1.13.0":
- version: 1.14.0
- resolution: "hookified@npm:1.14.0"
- checksum: 343aa04df5bcd5308c86bfc8d60fe1e83b50d12f8444da609a5b5bf2661970d93a9103ec07b4d474e0285b95266cf02ebdf4efa5ede128974c97ae97befcef82
- languageName: node
- linkType: hard
-
-"hookified@npm:^1.14.0, hookified@npm:^1.15.0":
+"hookified@npm:^1.13.0, hookified@npm:^1.14.0, hookified@npm:^1.15.0":
version: 1.15.1
resolution: "hookified@npm:1.15.1"
checksum: ab3a009002b10a9cc4268f693b7b5a81bf22d188b3c3c08a8439538de090e1237744affdb96a26b58bb2a9068b2eee52c9d7ddd33848a5eef042aa28243b3a40
@@ -8094,7 +7800,7 @@ __metadata:
languageName: node
linkType: hard
-"is-core-module@npm:^2.13.0, is-core-module@npm:^2.16.0, is-core-module@npm:^2.16.1":
+"is-core-module@npm:^2.13.0, is-core-module@npm:^2.16.1":
version: 2.16.1
resolution: "is-core-module@npm:2.16.1"
dependencies:
@@ -8558,58 +8264,58 @@ __metadata:
languageName: node
linkType: hard
-"jest-changed-files@npm:30.3.0":
- version: 30.3.0
- resolution: "jest-changed-files@npm:30.3.0"
+"jest-changed-files@npm:30.4.1":
+ version: 30.4.1
+ resolution: "jest-changed-files@npm:30.4.1"
dependencies:
execa: ^5.1.1
- jest-util: 30.3.0
+ jest-util: 30.4.1
p-limit: ^3.1.0
- checksum: d4f03a0e2bd26c6e39d73618a361f0b11c8bcf0c479e3a32a1e9b3ceecafc26514c52d26dd3ee91ede1be72a2ef3d22a3443a0f71b1fec21ef462fb48e6de1e8
+ checksum: aa0bd15e1df7c724af9f1af1346906fb65bdab7535580469493f8cced015f81a333e6bcd5cdde6a22a7aa43eece8859c0c83ec0a11f728423bb0cca088f6f8a6
languageName: node
linkType: hard
-"jest-circus@npm:30.3.0":
- version: 30.3.0
- resolution: "jest-circus@npm:30.3.0"
+"jest-circus@npm:30.4.2":
+ version: 30.4.2
+ resolution: "jest-circus@npm:30.4.2"
dependencies:
- "@jest/environment": 30.3.0
- "@jest/expect": 30.3.0
- "@jest/test-result": 30.3.0
- "@jest/types": 30.3.0
+ "@jest/environment": 30.4.1
+ "@jest/expect": 30.4.1
+ "@jest/test-result": 30.4.1
+ "@jest/types": 30.4.1
"@types/node": "*"
chalk: ^4.1.2
co: ^4.6.0
dedent: ^1.6.0
is-generator-fn: ^2.1.0
- jest-each: 30.3.0
- jest-matcher-utils: 30.3.0
- jest-message-util: 30.3.0
- jest-runtime: 30.3.0
- jest-snapshot: 30.3.0
- jest-util: 30.3.0
+ jest-each: 30.4.1
+ jest-matcher-utils: 30.4.1
+ jest-message-util: 30.4.1
+ jest-runtime: 30.4.2
+ jest-snapshot: 30.4.1
+ jest-util: 30.4.1
p-limit: ^3.1.0
- pretty-format: 30.3.0
+ pretty-format: 30.4.1
pure-rand: ^7.0.0
slash: ^3.0.0
stack-utils: ^2.0.6
- checksum: f4bd673e265da8021a737dd6903280809047763e36d6bc91d07aa279601f939e44f98cb8b2154f05a03e9cd4eec67c7f839959a90248da77e7b7f0ed3238672e
+ checksum: d9de058202b124b72dc9387a5478719c1470419cb1265caf110bd469bf6f6b4544a44f60f261b0857ac6e3c2049d465c84e7707d64854191fb7e3f118dbeab7c
languageName: node
linkType: hard
-"jest-cli@npm:30.3.0":
- version: 30.3.0
- resolution: "jest-cli@npm:30.3.0"
+"jest-cli@npm:30.4.2":
+ version: 30.4.2
+ resolution: "jest-cli@npm:30.4.2"
dependencies:
- "@jest/core": 30.3.0
- "@jest/test-result": 30.3.0
- "@jest/types": 30.3.0
+ "@jest/core": 30.4.2
+ "@jest/test-result": 30.4.1
+ "@jest/types": 30.4.1
chalk: ^4.1.2
exit-x: ^0.2.2
import-local: ^3.2.0
- jest-config: 30.3.0
- jest-util: 30.3.0
- jest-validate: 30.3.0
+ jest-config: 30.4.2
+ jest-util: 30.4.1
+ jest-validate: 30.4.1
yargs: ^17.7.2
peerDependencies:
node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
@@ -8618,35 +8324,35 @@ __metadata:
optional: true
bin:
jest: ./bin/jest.js
- checksum: a5abb62d6b251b8e6d19c24c604343fb0acdbe16827e3ba6053685ba0ac95d7bf3745324e168ca86a63511c22f29a98c6f9bfebe08f3b7c19f4531b4aa577934
+ checksum: d3c508f814305fdb5c6f409ec94694bbc053394fdccaa7e7b5ed0170dbea0a28fa8872318c0c47027490ed277c86664d34eee61f02cae7352d8f4260c47c1e4a
languageName: node
linkType: hard
-"jest-config@npm:30.3.0":
- version: 30.3.0
- resolution: "jest-config@npm:30.3.0"
+"jest-config@npm:30.4.2":
+ version: 30.4.2
+ resolution: "jest-config@npm:30.4.2"
dependencies:
"@babel/core": ^7.27.4
"@jest/get-type": 30.1.0
- "@jest/pattern": 30.0.1
- "@jest/test-sequencer": 30.3.0
- "@jest/types": 30.3.0
- babel-jest: 30.3.0
+ "@jest/pattern": 30.4.0
+ "@jest/test-sequencer": 30.4.1
+ "@jest/types": 30.4.1
+ babel-jest: 30.4.1
chalk: ^4.1.2
ci-info: ^4.2.0
deepmerge: ^4.3.1
glob: ^10.5.0
graceful-fs: ^4.2.11
- jest-circus: 30.3.0
- jest-docblock: 30.2.0
- jest-environment-node: 30.3.0
- jest-regex-util: 30.0.1
- jest-resolve: 30.3.0
- jest-runner: 30.3.0
- jest-util: 30.3.0
- jest-validate: 30.3.0
+ jest-circus: 30.4.2
+ jest-docblock: 30.4.0
+ jest-environment-node: 30.4.1
+ jest-regex-util: 30.4.0
+ jest-resolve: 30.4.1
+ jest-runner: 30.4.2
+ jest-util: 30.4.1
+ jest-validate: 30.4.1
parse-json: ^5.2.0
- pretty-format: 30.3.0
+ pretty-format: 30.4.1
slash: ^3.0.0
strip-json-comments: ^3.1.1
peerDependencies:
@@ -8660,94 +8366,94 @@ __metadata:
optional: true
ts-node:
optional: true
- checksum: a4f2f231ab674d4dc7f50de0c506854baefa3051467814a621cad38ae7024ac431a11d17e0cff4ef84d4edff7486a225a1a600df53fef054044c25e9157b9117
+ checksum: 2637fff70f2f95e2efe1944f054d5852273712375ada9e2b2eedd9cb9ec119b496fb634f78d2be79151ac5c7991dd070a25d25fac48f44aa5e31f2db2d239998
languageName: node
linkType: hard
-"jest-diff@npm:30.3.0":
- version: 30.3.0
- resolution: "jest-diff@npm:30.3.0"
+"jest-diff@npm:30.4.1":
+ version: 30.4.1
+ resolution: "jest-diff@npm:30.4.1"
dependencies:
- "@jest/diff-sequences": 30.3.0
+ "@jest/diff-sequences": 30.4.0
"@jest/get-type": 30.1.0
chalk: ^4.1.2
- pretty-format: 30.3.0
- checksum: ad49d2c602a8006725cb507143ffa6f19eb355a56ad7dffc10361ce51f74dee103db9233e1a1aa7020d8dae138ec071034ba05391bc1b0e738b69a4a994dbf29
+ pretty-format: 30.4.1
+ checksum: f3e58eb102992d6cf2ab6737337f2f2ea7fdf28dbdaf2d7ed8ded08ef954a947ee7f641ef5e6e0f8b14b3c93c99c9428084e1d217e4febd2e3683373a6e57323
languageName: node
linkType: hard
-"jest-docblock@npm:30.2.0":
- version: 30.2.0
- resolution: "jest-docblock@npm:30.2.0"
+"jest-docblock@npm:30.4.0":
+ version: 30.4.0
+ resolution: "jest-docblock@npm:30.4.0"
dependencies:
detect-newline: ^3.1.0
- checksum: 7074119d9919df539091e6b7f55c26858fafddb187ed1df90b2bc608544c2e6900384b97288ccd3b168f14bdcdf13281814337e1674a94d18991c8a0819aefad
+ checksum: 0ee25351ef941e832e53d10e74f34b38941b8f5fe750584661f6c5a115771818b081b8e39830c49d152fd361af81c7800c2d3a3c3a0e2dc742f7bfdbb6b1baaa
languageName: node
linkType: hard
-"jest-each@npm:30.3.0":
- version: 30.3.0
- resolution: "jest-each@npm:30.3.0"
+"jest-each@npm:30.4.1":
+ version: 30.4.1
+ resolution: "jest-each@npm:30.4.1"
dependencies:
"@jest/get-type": 30.1.0
- "@jest/types": 30.3.0
+ "@jest/types": 30.4.1
chalk: ^4.1.2
- jest-util: 30.3.0
- pretty-format: 30.3.0
- checksum: 66b38115c82422eefeebe1077978906b8ba065fd669b87035c696af7b609d28e1ad83d3dc71311e16065d37232064cd12f1dbc5b9329dd8fad240afae68935a5
+ jest-util: 30.4.1
+ pretty-format: 30.4.1
+ checksum: ef4c834eb2d0a0221651a75f5175932a98653c3f30cdf1956f2d4f61b5559cd33cf4ad51eb55a04c5e39f38c0025e2482a82fec5d569871b9d254f865ce18180
languageName: node
linkType: hard
-"jest-environment-jsdom@npm:^30.3.0":
- version: 30.3.0
- resolution: "jest-environment-jsdom@npm:30.3.0"
+"jest-environment-jsdom@npm:^30.4.1":
+ version: 30.4.1
+ resolution: "jest-environment-jsdom@npm:30.4.1"
dependencies:
- "@jest/environment": 30.3.0
- "@jest/environment-jsdom-abstract": 30.3.0
+ "@jest/environment": 30.4.1
+ "@jest/environment-jsdom-abstract": 30.4.1
jsdom: ^26.1.0
peerDependencies:
canvas: ^3.0.0
peerDependenciesMeta:
canvas:
optional: true
- checksum: b5d4c9ccade6931854a174c4b6b1657cb1d9b66e519f820aebc8e349dfa6c445d94e5820bd2589d8c6b31ea37f1bd5731e6f643047b3e24c0182d4f7376aabe8
+ checksum: 2ed0860e257d404622306823f18c15f0fe881fc1d16e1245434b54eb690fa0784cf54cd7eef74b2e9373e1699b1726a0fb69d60ae388cc78eb36968fe3fd0bf6
languageName: node
linkType: hard
-"jest-environment-node@npm:30.3.0":
- version: 30.3.0
- resolution: "jest-environment-node@npm:30.3.0"
+"jest-environment-node@npm:30.4.1":
+ version: 30.4.1
+ resolution: "jest-environment-node@npm:30.4.1"
dependencies:
- "@jest/environment": 30.3.0
- "@jest/fake-timers": 30.3.0
- "@jest/types": 30.3.0
+ "@jest/environment": 30.4.1
+ "@jest/fake-timers": 30.4.1
+ "@jest/types": 30.4.1
"@types/node": "*"
- jest-mock: 30.3.0
- jest-util: 30.3.0
- jest-validate: 30.3.0
- checksum: ff8cc442be96ff5042469ae95f689116caaf11e29f975ec085c1ded7c030c7ddaa18885c58a6f1c79233c5bf170d7440216f23dad60f5610e24b5d6f870a085a
+ jest-mock: 30.4.1
+ jest-util: 30.4.1
+ jest-validate: 30.4.1
+ checksum: 77267aaf6c6ae57d745dcbae6075563f58695a61b71d73a1617c49fd4747ed1cecb51f79697bc861e78d3a4abddfc1a8b6e4e1239a41896ba82a35cf5ef556e6
languageName: node
linkType: hard
-"jest-haste-map@npm:30.3.0":
- version: 30.3.0
- resolution: "jest-haste-map@npm:30.3.0"
+"jest-haste-map@npm:30.4.1":
+ version: 30.4.1
+ resolution: "jest-haste-map@npm:30.4.1"
dependencies:
- "@jest/types": 30.3.0
+ "@jest/types": 30.4.1
"@types/node": "*"
anymatch: ^3.1.3
fb-watchman: ^2.0.2
fsevents: ^2.3.3
graceful-fs: ^4.2.11
- jest-regex-util: 30.0.1
- jest-util: 30.3.0
- jest-worker: 30.3.0
+ jest-regex-util: 30.4.0
+ jest-util: 30.4.1
+ jest-worker: 30.4.1
picomatch: ^4.0.3
walker: ^1.0.8
dependenciesMeta:
fsevents:
optional: true
- checksum: bb547ef3ad970dad434c0b884465719a946820e2cabed3ade4dcd50c89445c19a57f0385bc0b366ecff3c263c7da0b4d60c9e92c6357822cb6e7414a73d64ac8
+ checksum: dcdc55a89b9bd1a2a13c1a2bc80100cd0a684b953704d2165f556702cf19a8348d4bcab569db619ce6065a8c745b19c3b7d586a8ac53108c9d7527c82926ab92
languageName: node
linkType: hard
@@ -8774,53 +8480,54 @@ __metadata:
languageName: node
linkType: hard
-"jest-leak-detector@npm:30.3.0":
- version: 30.3.0
- resolution: "jest-leak-detector@npm:30.3.0"
+"jest-leak-detector@npm:30.4.1":
+ version: 30.4.1
+ resolution: "jest-leak-detector@npm:30.4.1"
dependencies:
"@jest/get-type": 30.1.0
- pretty-format: 30.3.0
- checksum: 950ce3266067dd983f80231ce753fdfb9fe167d810b4507d84e674205c2cb96d37f38615ae502fa9277dde497ee52ce581656b48709aacf9502a4f0006bfab0e
+ pretty-format: 30.4.1
+ checksum: 8c0945d1c73f6a2abde8660f7fc5693b344cd1f5fd66153c0c2d13007f8429486eb99ecf15ac68d3d4410534fd0fad1ed430c32a641cdac66e021dbd33204c9a
languageName: node
linkType: hard
-"jest-matcher-utils@npm:30.3.0":
- version: 30.3.0
- resolution: "jest-matcher-utils@npm:30.3.0"
+"jest-matcher-utils@npm:30.4.1":
+ version: 30.4.1
+ resolution: "jest-matcher-utils@npm:30.4.1"
dependencies:
"@jest/get-type": 30.1.0
chalk: ^4.1.2
- jest-diff: 30.3.0
- pretty-format: 30.3.0
- checksum: 3bc01ef81d001519fef75a32a0420c207664a829acbdc668bfa3c51e0a3ac2ddbb19c633e1e006ff63840bf231d915dfbe8dccef71e5ee842221ba1ff0da1946
+ jest-diff: 30.4.1
+ pretty-format: 30.4.1
+ checksum: 18bc7a8ee2ce2fec06823e5ca231bd3c68f44f36143f6b738f6e191a60373dd3e5f595780f1b098d6945267b662368d1cd418f899fd6dbf07c3a9f3ba0673566
languageName: node
linkType: hard
-"jest-message-util@npm:30.3.0":
- version: 30.3.0
- resolution: "jest-message-util@npm:30.3.0"
+"jest-message-util@npm:30.4.1":
+ version: 30.4.1
+ resolution: "jest-message-util@npm:30.4.1"
dependencies:
"@babel/code-frame": ^7.27.1
- "@jest/types": 30.3.0
+ "@jest/types": 30.4.1
"@types/stack-utils": ^2.0.3
chalk: ^4.1.2
graceful-fs: ^4.2.11
+ jest-util: 30.4.1
picomatch: ^4.0.3
- pretty-format: 30.3.0
+ pretty-format: 30.4.1
slash: ^3.0.0
stack-utils: ^2.0.6
- checksum: 2d4c01e880ca312917b79699cea1e1d176940ce2e45f0ccb80399c1bc93825ca8e38955ada432f4427a165822be5a11fd9e46528e427308853f3c444741d5983
+ checksum: 0361571c976e046d19569fa4d4617d1ef5926ed81710212869888059c5dd98ca13e77af2260fad2e756fe7041e1cf10f192cc0c38594b360643075dd42fa61c6
languageName: node
linkType: hard
-"jest-mock@npm:30.3.0":
- version: 30.3.0
- resolution: "jest-mock@npm:30.3.0"
+"jest-mock@npm:30.4.1":
+ version: 30.4.1
+ resolution: "jest-mock@npm:30.4.1"
dependencies:
- "@jest/types": 30.3.0
+ "@jest/types": 30.4.1
"@types/node": "*"
- jest-util: 30.3.0
- checksum: bd015d5115ab74c40b37c9b9c46e49d16c8c9bdbfd50557a1805fe770a6422927a2f91252fc5f6aa8c061991be3c1bdbfc5f74ac26eb018311ec9ddb4e358df6
+ jest-util: 30.4.1
+ checksum: 98bf503f214dc0643317ceb3a05d63d18f915f3e30738e505568cf588dd2c4ac1f8c52014c396ce74cd1b3cc870e56ebfd0e3e369d88a052c046f031a5685725
languageName: node
linkType: hard
@@ -8836,10 +8543,10 @@ __metadata:
languageName: node
linkType: hard
-"jest-regex-util@npm:30.0.1":
- version: 30.0.1
- resolution: "jest-regex-util@npm:30.0.1"
- checksum: fa8dac80c3e94db20d5e1e51d1bdf101cf5ede8f4e0b8f395ba8b8ea81e71804ffd747452a6bb6413032865de98ac656ef8ae43eddd18d980b6442a2764ed562
+"jest-regex-util@npm:30.4.0":
+ version: 30.4.0
+ resolution: "jest-regex-util@npm:30.4.0"
+ checksum: 8664fcc1d07c8236a3bd012c0f06ae9d14d96e758b32ee340a3a7c4c326d0b5052d8c4ae4f4c4184f08bf78723d905352f22923647df9658ace3604f03bf074f
languageName: node
linkType: hard
@@ -8850,132 +8557,132 @@ __metadata:
languageName: node
linkType: hard
-"jest-resolve-dependencies@npm:30.3.0":
- version: 30.3.0
- resolution: "jest-resolve-dependencies@npm:30.3.0"
+"jest-resolve-dependencies@npm:30.4.2":
+ version: 30.4.2
+ resolution: "jest-resolve-dependencies@npm:30.4.2"
dependencies:
- jest-regex-util: 30.0.1
- jest-snapshot: 30.3.0
- checksum: 3cecd5d952b03b38a425ccc6d4c98bba3f9413e268cc01a2724c2c91e45be7772ccf7ff38e17c417f3cc8a0ffaefd86cc2b61a7594d045dd2c4b06bdd031e882
+ jest-regex-util: 30.4.0
+ jest-snapshot: 30.4.1
+ checksum: eba795d9ec140e4eb0107cd2cb716ef0881007df1ff8c023984e30b90e51aa8af17b1324f0c3196f77df8ff4cd64eafa020b14e539004bb6a21a76255be6d76c
languageName: node
linkType: hard
-"jest-resolve@npm:30.3.0":
- version: 30.3.0
- resolution: "jest-resolve@npm:30.3.0"
+"jest-resolve@npm:30.4.1":
+ version: 30.4.1
+ resolution: "jest-resolve@npm:30.4.1"
dependencies:
chalk: ^4.1.2
graceful-fs: ^4.2.11
- jest-haste-map: 30.3.0
+ jest-haste-map: 30.4.1
jest-pnp-resolver: ^1.2.3
- jest-util: 30.3.0
- jest-validate: 30.3.0
+ jest-util: 30.4.1
+ jest-validate: 30.4.1
slash: ^3.0.0
unrs-resolver: ^1.7.11
- checksum: b48dae837c85251897d423fdd636c53e1490e04b2ca1bed3906d91abab1bb0c1045166337362dba197520a86bae9aace22875678361a8663149c85f6aaabcf18
+ checksum: e1dffbcfbf5178b61633bfd83436a48c90b65e4d2e1c3863f148bfe52cccbee5bca244cb28c4b09bba49155a8e2191c9b2bbd25c47b9aedb73b967457fe56a77
languageName: node
linkType: hard
-"jest-runner@npm:30.3.0":
- version: 30.3.0
- resolution: "jest-runner@npm:30.3.0"
+"jest-runner@npm:30.4.2":
+ version: 30.4.2
+ resolution: "jest-runner@npm:30.4.2"
dependencies:
- "@jest/console": 30.3.0
- "@jest/environment": 30.3.0
- "@jest/test-result": 30.3.0
- "@jest/transform": 30.3.0
- "@jest/types": 30.3.0
+ "@jest/console": 30.4.1
+ "@jest/environment": 30.4.1
+ "@jest/test-result": 30.4.1
+ "@jest/transform": 30.4.1
+ "@jest/types": 30.4.1
"@types/node": "*"
chalk: ^4.1.2
emittery: ^0.13.1
exit-x: ^0.2.2
graceful-fs: ^4.2.11
- jest-docblock: 30.2.0
- jest-environment-node: 30.3.0
- jest-haste-map: 30.3.0
- jest-leak-detector: 30.3.0
- jest-message-util: 30.3.0
- jest-resolve: 30.3.0
- jest-runtime: 30.3.0
- jest-util: 30.3.0
- jest-watcher: 30.3.0
- jest-worker: 30.3.0
+ jest-docblock: 30.4.0
+ jest-environment-node: 30.4.1
+ jest-haste-map: 30.4.1
+ jest-leak-detector: 30.4.1
+ jest-message-util: 30.4.1
+ jest-resolve: 30.4.1
+ jest-runtime: 30.4.2
+ jest-util: 30.4.1
+ jest-watcher: 30.4.1
+ jest-worker: 30.4.1
p-limit: ^3.1.0
source-map-support: 0.5.13
- checksum: 098ff88b4090d40a38901c314333ae9c7a6523b13e4e6378dbd323fd648fcb4948e6fab2d3eaa0e784f984910ace0c104eb8dced45e1f6fabd57a88daa90f4bd
+ checksum: 6fba662c5f1387931faf37e602f8b4a35d014b0f7de4b0e88bfd909c0d1c37019fc0c61967108b9fef1ba0f159592356cef2771397e797604921249730b6edde
languageName: node
linkType: hard
-"jest-runtime@npm:30.3.0":
- version: 30.3.0
- resolution: "jest-runtime@npm:30.3.0"
+"jest-runtime@npm:30.4.2":
+ version: 30.4.2
+ resolution: "jest-runtime@npm:30.4.2"
dependencies:
- "@jest/environment": 30.3.0
- "@jest/fake-timers": 30.3.0
- "@jest/globals": 30.3.0
+ "@jest/environment": 30.4.1
+ "@jest/fake-timers": 30.4.1
+ "@jest/globals": 30.4.1
"@jest/source-map": 30.0.1
- "@jest/test-result": 30.3.0
- "@jest/transform": 30.3.0
- "@jest/types": 30.3.0
+ "@jest/test-result": 30.4.1
+ "@jest/transform": 30.4.1
+ "@jest/types": 30.4.1
"@types/node": "*"
chalk: ^4.1.2
cjs-module-lexer: ^2.1.0
collect-v8-coverage: ^1.0.2
glob: ^10.5.0
graceful-fs: ^4.2.11
- jest-haste-map: 30.3.0
- jest-message-util: 30.3.0
- jest-mock: 30.3.0
- jest-regex-util: 30.0.1
- jest-resolve: 30.3.0
- jest-snapshot: 30.3.0
- jest-util: 30.3.0
+ jest-haste-map: 30.4.1
+ jest-message-util: 30.4.1
+ jest-mock: 30.4.1
+ jest-regex-util: 30.4.0
+ jest-resolve: 30.4.1
+ jest-snapshot: 30.4.1
+ jest-util: 30.4.1
slash: ^3.0.0
strip-bom: ^4.0.0
- checksum: 6f2ff5f3154d1481ef09ffc9760181b7636243c3bb6d1b3047f607a16f41dd248f6d00bed4cd846f1834ab0e58d48e5db444170f2f8b63e91ab36cfeaa6390a0
+ checksum: e5b3dd744dae3ef21cbab2ca3b28baefeaaea7edbb908a261302b47a83288703c6f2f1ac0d46de42d880f72d4db2de9f36ed4fdd6da862acf8ff64dae21ac102
languageName: node
linkType: hard
-"jest-snapshot@npm:30.3.0":
- version: 30.3.0
- resolution: "jest-snapshot@npm:30.3.0"
+"jest-snapshot@npm:30.4.1":
+ version: 30.4.1
+ resolution: "jest-snapshot@npm:30.4.1"
dependencies:
"@babel/core": ^7.27.4
"@babel/generator": ^7.27.5
"@babel/plugin-syntax-jsx": ^7.27.1
"@babel/plugin-syntax-typescript": ^7.27.1
"@babel/types": ^7.27.3
- "@jest/expect-utils": 30.3.0
+ "@jest/expect-utils": 30.4.1
"@jest/get-type": 30.1.0
- "@jest/snapshot-utils": 30.3.0
- "@jest/transform": 30.3.0
- "@jest/types": 30.3.0
+ "@jest/snapshot-utils": 30.4.1
+ "@jest/transform": 30.4.1
+ "@jest/types": 30.4.1
babel-preset-current-node-syntax: ^1.2.0
chalk: ^4.1.2
- expect: 30.3.0
+ expect: 30.4.1
graceful-fs: ^4.2.11
- jest-diff: 30.3.0
- jest-matcher-utils: 30.3.0
- jest-message-util: 30.3.0
- jest-util: 30.3.0
- pretty-format: 30.3.0
+ jest-diff: 30.4.1
+ jest-matcher-utils: 30.4.1
+ jest-message-util: 30.4.1
+ jest-util: 30.4.1
+ pretty-format: 30.4.1
semver: ^7.7.2
synckit: ^0.11.8
- checksum: cc7b8562eff4da6ebedfad3f9f672433da3c5faf56036d7baccaf095b22112788a4d9614caf8b6e5055f266e55871cdf4672787c2802360cfd1d84dadcdd18d5
+ checksum: 3a95853867e48ac5d44742a600f80837fabb9bbcf4ee25b9c99709812c6776dfb0e2ec98d0316dc2753b577b20d0d6be46a3610b134923c6855363dcb57b44d2
languageName: node
linkType: hard
-"jest-util@npm:30.3.0":
- version: 30.3.0
- resolution: "jest-util@npm:30.3.0"
+"jest-util@npm:30.4.1":
+ version: 30.4.1
+ resolution: "jest-util@npm:30.4.1"
dependencies:
- "@jest/types": 30.3.0
+ "@jest/types": 30.4.1
"@types/node": "*"
chalk: ^4.1.2
ci-info: ^4.2.0
graceful-fs: ^4.2.11
picomatch: ^4.0.3
- checksum: 27309dd3cb6f495c005bddf5910acabcdae4919f4646bd0d0ea66a8c60d810cc111665de99cc4f6420dd1a3e695f274e9def6301ef3b22bcce67d4541e2d53e4
+ checksum: 5b1b3e5cca87151f31dc9636a74ef2e78823f0bcd7e636a1bdc3e57645bf5970c01ff476db9156dea198984bd67415520c068bc5b3eddd464a2e6e9696308ecf
languageName: node
linkType: hard
@@ -8993,46 +8700,46 @@ __metadata:
languageName: node
linkType: hard
-"jest-validate@npm:30.3.0":
- version: 30.3.0
- resolution: "jest-validate@npm:30.3.0"
+"jest-validate@npm:30.4.1":
+ version: 30.4.1
+ resolution: "jest-validate@npm:30.4.1"
dependencies:
"@jest/get-type": 30.1.0
- "@jest/types": 30.3.0
+ "@jest/types": 30.4.1
camelcase: ^6.3.0
chalk: ^4.1.2
leven: ^3.1.0
- pretty-format: 30.3.0
- checksum: 5a76ae7f253da5707065225416b75470aa9445b32e01a7e559399a7971e5ccfdf71f4768e45c33565e4895df4998bb8a292dda7be1c723318c5c6ab334cae7da
+ pretty-format: 30.4.1
+ checksum: c533a0c6021e5c630b78749d5be9f21bb0f91fa8b9ce029cfe22b8c8162db3046fa236de62752a35a35ab5b65da099ad5f2b0240c055cddb05460ddf45bb5c1e
languageName: node
linkType: hard
-"jest-watcher@npm:30.3.0":
- version: 30.3.0
- resolution: "jest-watcher@npm:30.3.0"
+"jest-watcher@npm:30.4.1":
+ version: 30.4.1
+ resolution: "jest-watcher@npm:30.4.1"
dependencies:
- "@jest/test-result": 30.3.0
- "@jest/types": 30.3.0
+ "@jest/test-result": 30.4.1
+ "@jest/types": 30.4.1
"@types/node": "*"
ansi-escapes: ^4.3.2
chalk: ^4.1.2
emittery: ^0.13.1
- jest-util: 30.3.0
+ jest-util: 30.4.1
string-length: ^4.0.2
- checksum: c3aad544fc29bc17f3d4cf6e6d6f1180e6d1eae36881968a2da16fc14ac03b7a10761e77971d3d12dba1852c34e34907c81eab5be8757568cb9502d204942fbd
+ checksum: 843fc1cda04b2edb4d618fd945fb515b4a6c523f6d23b5a576735ed251bef2ea80d9d6a9864271e92caa9f1467283724c2d39b80d73289b8d95e378b89dcabe5
languageName: node
linkType: hard
-"jest-worker@npm:30.3.0":
- version: 30.3.0
- resolution: "jest-worker@npm:30.3.0"
+"jest-worker@npm:30.4.1":
+ version: 30.4.1
+ resolution: "jest-worker@npm:30.4.1"
dependencies:
"@types/node": "*"
"@ungap/structured-clone": ^1.3.0
- jest-util: 30.3.0
+ jest-util: 30.4.1
merge-stream: ^2.0.0
supports-color: ^8.1.1
- checksum: 886803abcda389324aa824d1c0b800f7acd2eeb70b8ff364cecae22019dfd34157a99fe37e465b7a85bd28746591cee04ea85f2dc86002c44583dd8cf1250d20
+ checksum: 1a30619cf0a66efc1f533b155152f63ba3d4f4adb5085f1e0941065bf914f7d4fb41fd75ada1d606ab8160d58ffa64010ed3236eda203ddce283692a05f8f2e5
languageName: node
linkType: hard
@@ -9059,14 +8766,14 @@ __metadata:
languageName: node
linkType: hard
-"jest@npm:^30.3.0":
- version: 30.3.0
- resolution: "jest@npm:30.3.0"
+"jest@npm:^30.4.2":
+ version: 30.4.2
+ resolution: "jest@npm:30.4.2"
dependencies:
- "@jest/core": 30.3.0
- "@jest/types": 30.3.0
+ "@jest/core": 30.4.2
+ "@jest/types": 30.4.1
import-local: ^3.2.0
- jest-cli: 30.3.0
+ jest-cli: 30.4.2
peerDependencies:
node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
peerDependenciesMeta:
@@ -9074,7 +8781,7 @@ __metadata:
optional: true
bin:
jest: ./bin/jest.js
- checksum: b79fafc8e06b9b5727f7b13c0e230f904c40c642d663a0f1f58de358dda4ba5dcbbc5ae398a461296b77a7f5d9d75f5d8dc659905c8183b21ebf3584c882e547
+ checksum: 7cae567b887e5d2f8d667b90b16c8e3e909d49bb23030a4d618b20d854fb44e9631a14aaf978e6d8399d6c6ced5a5633e99b759d1d8d807e137d6a8e96aa7656
languageName: node
linkType: hard
@@ -9164,15 +8871,6 @@ __metadata:
languageName: node
linkType: hard
-"jsesc@npm:~3.0.2":
- version: 3.0.2
- resolution: "jsesc@npm:3.0.2"
- bin:
- jsesc: bin/jsesc
- checksum: a36d3ca40574a974d9c2063bf68c2b6141c20da8f2a36bd3279fc802563f35f0527a6c828801295bdfb2803952cf2cf387786c2c90ed564f88d5782475abfe3c
- languageName: node
- linkType: hard
-
"json-buffer@npm:3.0.1":
version: 3.0.1
resolution: "json-buffer@npm:3.0.1"
@@ -9301,12 +8999,12 @@ __metadata:
linkType: hard
"launch-editor@npm:^2.6.1":
- version: 2.11.1
- resolution: "launch-editor@npm:2.11.1"
+ version: 2.14.1
+ resolution: "launch-editor@npm:2.14.1"
dependencies:
picocolors: ^1.1.1
- shell-quote: ^1.8.3
- checksum: 95a2e0a50ce15425a87fd035bdef2de37e13c2aee9cd62756783efb286a6e36a341cfcbaecb0d578131a5411c6a1c74c422f9c5b6cb6f4c8284d6078967e08b4
+ shell-quote: ^1.8.4
+ checksum: 232ea8a80146e7fec6c8ece7ebb600d58a82e9938f36111194980188d276935f424754b18e37d5b098f596d30580def723b231e093c27c3bcd703418278afc4c
languageName: node
linkType: hard
@@ -9484,14 +9182,7 @@ __metadata:
languageName: node
linkType: hard
-"lodash@npm:^4.17.21":
- version: 4.17.21
- resolution: "lodash@npm:4.17.21"
- checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7
- languageName: node
- linkType: hard
-
-"lodash@npm:^4.18.1":
+"lodash@npm:^4.17.21, lodash@npm:^4.18.1":
version: 4.18.1
resolution: "lodash@npm:4.18.1"
checksum: bb5f5b49aad29614e709af02b64c56b0f8b78c6a81434a3c1ae527d2f0f78ca08f9d9fb22aa825a053876c9d2166e9c01f31c356014b5e2bdc0556c057433102
@@ -9760,7 +9451,7 @@ __metadata:
languageName: node
linkType: hard
-"mime-types@npm:^2.1.12, mime-types@npm:^2.1.27, mime-types@npm:^2.1.31, mime-types@npm:~2.1.17, mime-types@npm:~2.1.19, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34":
+"mime-types@npm:^2.1.27, mime-types@npm:^2.1.31, mime-types@npm:^2.1.35, mime-types@npm:~2.1.17, mime-types@npm:~2.1.19, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34":
version: 2.1.35
resolution: "mime-types@npm:2.1.35"
dependencies:
@@ -9910,16 +9601,7 @@ __metadata:
languageName: node
linkType: hard
-"minizlib@npm:^3.0.1":
- version: 3.0.2
- resolution: "minizlib@npm:3.0.2"
- dependencies:
- minipass: ^7.1.2
- checksum: 493bed14dcb6118da7f8af356a8947cf1473289c09658e5aabd69a737800a8c3b1736fb7d7931b722268a9c9bc038a6d53c049b6a6af24b34a121823bb709996
- languageName: node
- linkType: hard
-
-"minizlib@npm:^3.1.0":
+"minizlib@npm:^3.0.1, minizlib@npm:^3.1.0":
version: 3.1.0
resolution: "minizlib@npm:3.1.0"
dependencies:
@@ -10724,17 +10406,7 @@ __metadata:
languageName: node
linkType: hard
-"postcss-selector-parser@npm:^7.0.0":
- version: 7.1.0
- resolution: "postcss-selector-parser@npm:7.1.0"
- dependencies:
- cssesc: ^3.0.0
- util-deprecate: ^1.0.2
- checksum: 1300e7871dd60a5132ee5462cc6e94edd4f3df28462b2495ca9ff025bd83768a908e892a18fde62cae63ff63524641baa6d58c64120f04fe6884b916663ce737
- languageName: node
- linkType: hard
-
-"postcss-selector-parser@npm:^7.1.1":
+"postcss-selector-parser@npm:^7.0.0, postcss-selector-parser@npm:^7.1.1":
version: 7.1.1
resolution: "postcss-selector-parser@npm:7.1.1"
dependencies:
@@ -10751,18 +10423,7 @@ __metadata:
languageName: node
linkType: hard
-"postcss@npm:^8.4.40, postcss@npm:^8.5.6":
- version: 8.5.6
- resolution: "postcss@npm:8.5.6"
- dependencies:
- nanoid: ^3.3.11
- picocolors: ^1.1.1
- source-map-js: ^1.2.1
- checksum: 20f3b5d673ffeec2b28d65436756d31ee33f65b0a8bedb3d32f556fbd5973be38c3a7fb5b959a5236c60a5db7b91b0a6b14ffaac0d717dce1b903b964ee1c1bb
- languageName: node
- linkType: hard
-
-"postcss@npm:^8.5.10":
+"postcss@npm:^8.4.40, postcss@npm:^8.5.10, postcss@npm:^8.5.6":
version: 8.5.14
resolution: "postcss@npm:8.5.14"
dependencies:
@@ -10824,14 +10485,15 @@ __metadata:
languageName: node
linkType: hard
-"pretty-format@npm:30.3.0":
- version: 30.3.0
- resolution: "pretty-format@npm:30.3.0"
+"pretty-format@npm:30.4.1":
+ version: 30.4.1
+ resolution: "pretty-format@npm:30.4.1"
dependencies:
- "@jest/schemas": 30.0.5
+ "@jest/schemas": 30.4.1
ansi-styles: ^5.2.0
- react-is: ^18.3.1
- checksum: 99bb09b51551fb710143a2c0b8270acc2f7723d51cdb5824fe55a0061e04af8bf07c47acd565121cb5b266dfc7a3ecfe77bf85b4f96aacbbeb6f2df0ba246a9c
+ react-is-18: "npm:react-is@^18.3.1"
+ react-is-19: "npm:react-is@^19.2.5"
+ checksum: 9602635027892d7a2f430b0a51972780226d30ce4072643349ad376ccee967539eb8180a656976976c0673d550604847da638b992eefc95c84bab7cebdf9faba
languageName: node
linkType: hard
@@ -11021,14 +10683,14 @@ __metadata:
languageName: node
linkType: hard
-"react-dom@npm:^19.2.4":
- version: 19.2.4
- resolution: "react-dom@npm:19.2.4"
+"react-dom@npm:^19.2.7":
+ version: 19.2.7
+ resolution: "react-dom@npm:19.2.7"
dependencies:
scheduler: ^0.27.0
peerDependencies:
- react: ^19.2.4
- checksum: 2650391005468c228616d54431682e190068bfc2e68b9bf33582df637c4b60bfd9925bb6b4bfada2679a6a974d0e756c1db4a656c502e654d77b8a6b6ad162ea
+ react: ^19.2.7
+ checksum: 9543b532a070c91751dd9aae77f5ee21d2aeada28e061080162433a5418f8ba98eadb869c76d82eff9f0475e5ff2b9e1cf31916ab6509f8ebc856be77361eb1c
languageName: node
linkType: hard
@@ -11050,6 +10712,20 @@ __metadata:
languageName: node
linkType: hard
+"react-is-18@npm:react-is@^18.3.1":
+ version: 18.3.1
+ resolution: "react-is@npm:18.3.1"
+ checksum: e20fe84c86ff172fc8d898251b7cc2c43645d108bf96d0b8edf39b98f9a2cae97b40520ee7ed8ee0085ccc94736c4886294456033304151c3f94978cec03df21
+ languageName: node
+ linkType: hard
+
+"react-is-19@npm:react-is@^19.2.5":
+ version: 19.2.7
+ resolution: "react-is@npm:19.2.7"
+ checksum: 148ee03b481ace8370cb9b96de386598423ed44ad36090c45ce3f905aec496db6f2675da720bbe43f39d66c43c9a16757cb71e9e55217825707dae97f0cf200f
+ languageName: node
+ linkType: hard
+
"react-is@npm:19.1.0":
version: 19.1.0
resolution: "react-is@npm:19.1.0"
@@ -11134,10 +10810,10 @@ __metadata:
languageName: node
linkType: hard
-"react@npm:^19.2.4":
- version: 19.2.4
- resolution: "react@npm:19.2.4"
- checksum: edf2b96619fab3a8b11714f16a0994a92c6b473aecf3269b63e4fa317d3073d40513c1f19cf4415ebbad94d35b48ff76ad768480db663037e2d929e8d60596b8
+"react@npm:^19.2.7":
+ version: 19.2.7
+ resolution: "react@npm:19.2.7"
+ checksum: be94ec2f1779b27cac328ddae18e52933c2977a2425b67039229ead45c62d0363b66e894076236616c8d98821a9a760fcbab8a9da8ae9c4b2849dfd12cc32a46
languageName: node
linkType: hard
@@ -11215,15 +10891,6 @@ __metadata:
languageName: node
linkType: hard
-"regenerate-unicode-properties@npm:^10.2.0":
- version: 10.2.0
- resolution: "regenerate-unicode-properties@npm:10.2.0"
- dependencies:
- regenerate: ^1.4.2
- checksum: d5c5fc13f8b8d7e16e791637a4bfef741f8d70e267d51845ee7d5404a32fa14c75b181c4efba33e4bff8b0000a2f13e9773593713dfe5b66597df4259275ce63
- languageName: node
- linkType: hard
-
"regenerate-unicode-properties@npm:^10.2.2":
version: 10.2.2
resolution: "regenerate-unicode-properties@npm:10.2.2"
@@ -11254,20 +10921,6 @@ __metadata:
languageName: node
linkType: hard
-"regexpu-core@npm:^6.2.0":
- version: 6.2.0
- resolution: "regexpu-core@npm:6.2.0"
- dependencies:
- regenerate: ^1.4.2
- regenerate-unicode-properties: ^10.2.0
- regjsgen: ^0.8.0
- regjsparser: ^0.12.0
- unicode-match-property-ecmascript: ^2.0.0
- unicode-match-property-value-ecmascript: ^2.1.0
- checksum: 67d3c4a3f6c99bc80b5d690074a27e6f675be1c1739f8a9acf028fbc36f1a468472574ea65e331e217995198ba4404d7878f3cb3739a73552dd3c70d3fb7f8e6
- languageName: node
- linkType: hard
-
"regexpu-core@npm:^6.3.1":
version: 6.4.0
resolution: "regexpu-core@npm:6.4.0"
@@ -11289,17 +10942,6 @@ __metadata:
languageName: node
linkType: hard
-"regjsparser@npm:^0.12.0":
- version: 0.12.0
- resolution: "regjsparser@npm:0.12.0"
- dependencies:
- jsesc: ~3.0.2
- bin:
- regjsparser: bin/parser
- checksum: 094b55b0ab3e1fd58f8ce5132a1d44dab08d91f7b0eea4132b0157b303ebb8ded20a9cbd893d25402d2aeddb23fac1f428ab4947b295d6fa51dd1c334a9e76f0
- languageName: node
- linkType: hard
-
"regjsparser@npm:^0.13.0":
version: 0.13.0
resolution: "regjsparser@npm:0.13.0"
@@ -11371,20 +11013,7 @@ __metadata:
languageName: node
linkType: hard
-"resolve@npm:^1.19.0, resolve@npm:^1.20.0":
- version: 1.22.10
- resolution: "resolve@npm:1.22.10"
- dependencies:
- is-core-module: ^2.16.0
- path-parse: ^1.0.7
- supports-preserve-symlinks-flag: ^1.0.0
- bin:
- resolve: bin/resolve
- checksum: ab7a32ff4046fcd7c6fdd525b24a7527847d03c3650c733b909b01b757f92eb23510afa9cc3e9bf3f26a3e073b48c88c706dfd4c1d2fb4a16a96b73b6328ddcf
- languageName: node
- linkType: hard
-
-"resolve@npm:^1.22.11":
+"resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.11":
version: 1.22.11
resolution: "resolve@npm:1.22.11"
dependencies:
@@ -11410,20 +11039,7 @@ __metadata:
languageName: node
linkType: hard
-"resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin":
- version: 1.22.10
- resolution: "resolve@patch:resolve@npm%3A1.22.10#~builtin::version=1.22.10&hash=c3c19d"
- dependencies:
- is-core-module: ^2.16.0
- path-parse: ^1.0.7
- supports-preserve-symlinks-flag: ^1.0.0
- bin:
- resolve: bin/resolve
- checksum: 8aac1e4e4628bd00bf4b94b23de137dd3fe44097a8d528fd66db74484be929936e20c696e1a3edf4488f37e14180b73df6f600992baea3e089e8674291f16c9d
- languageName: node
- linkType: hard
-
-"resolve@patch:resolve@^1.22.11#~builtin":
+"resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.11#~builtin":
version: 1.22.11
resolution: "resolve@patch:resolve@npm%3A1.22.11#~builtin::version=1.22.11&hash=c3c19d"
dependencies:
@@ -11691,16 +11307,7 @@ __metadata:
languageName: node
linkType: hard
-"semver@npm:^7.3.5, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.7.2":
- version: 7.7.2
- resolution: "semver@npm:7.7.2"
- bin:
- semver: bin/semver.js
- checksum: dd94ba8f1cbc903d8eeb4dd8bf19f46b3deb14262b6717d0de3c804b594058ae785ef2e4b46c5c3b58733c99c83339068203002f9e37cfe44f7e2cc5e3d2f621
- languageName: node
- linkType: hard
-
-"semver@npm:^7.6.3":
+"semver@npm:^7.3.5, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.3, semver@npm:^7.7.2":
version: 7.7.4
resolution: "semver@npm:7.7.4"
bin:
@@ -11858,10 +11465,10 @@ __metadata:
languageName: node
linkType: hard
-"shell-quote@npm:^1.8.3":
- version: 1.8.3
- resolution: "shell-quote@npm:1.8.3"
- checksum: 550dd84e677f8915eb013d43689c80bb114860649ec5298eb978f40b8f3d4bc4ccb072b82c094eb3548dc587144bb3965a8676f0d685c1cf4c40b5dc27166242
+"shell-quote@npm:^1.8.4":
+ version: 1.8.4
+ resolution: "shell-quote@npm:1.8.4"
+ checksum: 082dc836baa8ade01144ee3068af487ea45ba570ea6ab13a5eddc11ab16a976b8857b51ef2caf7dc9a1e173ff0aea685b8f78b4f6f5a0a1ef24c7b17c51350e2
languageName: node
linkType: hard
@@ -12200,17 +11807,7 @@ __metadata:
languageName: node
linkType: hard
-"string-width@npm:^8.0.0":
- version: 8.1.0
- resolution: "string-width@npm:8.1.0"
- dependencies:
- get-east-asian-width: ^1.3.0
- strip-ansi: ^7.1.0
- checksum: 51ee97c4ffee7b94f8a2ee785fac14f81ec9809b9fcec9a4db44e25c717c263af0cc4387c111aef76195c0718dc43766f3678c07fb542294fb0244f7bfbde883
- languageName: node
- linkType: hard
-
-"string-width@npm:^8.1.1":
+"string-width@npm:^8.0.0, string-width@npm:^8.1.1":
version: 8.2.0
resolution: "string-width@npm:8.2.0"
dependencies:
@@ -12316,16 +11913,7 @@ __metadata:
languageName: node
linkType: hard
-"strip-ansi@npm:^7.0.1, strip-ansi@npm:^7.1.0":
- version: 7.1.2
- resolution: "strip-ansi@npm:7.1.2"
- dependencies:
- ansi-regex: ^6.0.1
- checksum: db0e3f9654e519c8a33c50fc9304d07df5649388e7da06d3aabf66d29e5ad65d5e6315d8519d409c15b32fa82c1df7e11ed6f8cd50b0e4404463f0c9d77c8d0b
- languageName: node
- linkType: hard
-
-"strip-ansi@npm:^7.1.2":
+"strip-ansi@npm:^7.0.1, strip-ansi@npm:^7.1.0, strip-ansi@npm:^7.1.2":
version: 7.2.0
resolution: "strip-ansi@npm:7.2.0"
dependencies:
@@ -12561,7 +12149,7 @@ __metadata:
languageName: node
linkType: hard
-"synckit@npm:^0.11.12":
+"synckit@npm:^0.11.12, synckit@npm:^0.11.8":
version: 0.11.12
resolution: "synckit@npm:0.11.12"
dependencies:
@@ -12570,15 +12158,6 @@ __metadata:
languageName: node
linkType: hard
-"synckit@npm:^0.11.8":
- version: 0.11.11
- resolution: "synckit@npm:0.11.11"
- dependencies:
- "@pkgr/core": ^0.2.9
- checksum: bc896d4320525501495654766e6b0aa394e522476ea0547af603bdd9fd7e9b65dcd6e3a237bc7eb3ab7e196376712f228bf1bf6ed1e1809f4b32dc9baf7ad413
- languageName: node
- linkType: hard
-
"table@npm:^6.9.0":
version: 6.9.0
resolution: "table@npm:6.9.0"
@@ -12600,15 +12179,15 @@ __metadata:
linkType: hard
"tar@npm:^7.4.3":
- version: 7.5.11
- resolution: "tar@npm:7.5.11"
+ version: 7.5.16
+ resolution: "tar@npm:7.5.16"
dependencies:
"@isaacs/fs-minipass": ^4.0.0
chownr: ^3.0.0
minipass: ^7.1.2
minizlib: ^3.1.0
yallist: ^5.0.0
- checksum: 7f6785a85dd571b88985e493ec86f692962cbfa7b4017961fddfd2241e0ff3bcd89ed347f4c02b5433aa22b30cca5566e8711543df054fda8fd12425f505378f
+ checksum: 9b7f886f5ce8681a7430f80b9b377bfa498e6feb957b9afe6507db08e59d309f8546b7f76a0c2e47bdb54da4602575a5c7519e287fe94de8302e635032fc94f1
languageName: node
linkType: hard
@@ -12725,9 +12304,9 @@ __metadata:
linkType: hard
"tmp@npm:~0.2.3":
- version: 0.2.5
- resolution: "tmp@npm:0.2.5"
- checksum: 9d18e58060114154939930457b9e198b34f9495bcc05a343bc0a0a29aa546d2c1c2b343dae05b87b17c8fde0af93ab7d8fe8574a8f6dc2cd8fd3f2ca1ad0d8e1
+ version: 0.2.7
+ resolution: "tmp@npm:0.2.7"
+ checksum: 45dec2fc288ad368eeff7268cb6d5d33452c6d35f4f7d9b1b5e023409a141dab57a3c08b5f505daf3af6d69667a5f544fc1a5b6a27c6f9396a5a1b4002912f1c
languageName: node
linkType: hard
@@ -12969,13 +12548,6 @@ __metadata:
languageName: node
linkType: hard
-"unicode-match-property-value-ecmascript@npm:^2.1.0":
- version: 2.2.0
- resolution: "unicode-match-property-value-ecmascript@npm:2.2.0"
- checksum: 9e3151e1d0bc6be35c4cef105e317c04090364173e8462005b5cde08a1e7c858b6586486cfebac39dc2c6c8c9ee24afb245de6d527604866edfa454fe2a35fae
- languageName: node
- linkType: hard
-
"unicode-match-property-value-ecmascript@npm:^2.2.1":
version: 2.2.1
resolution: "unicode-match-property-value-ecmascript@npm:2.2.1"
@@ -13294,9 +12866,9 @@ __metadata:
languageName: node
linkType: hard
-"webpack-dev-server@npm:^5.2.4":
- version: 5.2.4
- resolution: "webpack-dev-server@npm:5.2.4"
+"webpack-dev-server@npm:^5.2.5":
+ version: 5.2.5
+ resolution: "webpack-dev-server@npm:5.2.5"
dependencies:
"@types/bonjour": ^3.5.13
"@types/connect-history-api-fallback": ^1.5.4
@@ -13335,7 +12907,7 @@ __metadata:
optional: true
bin:
webpack-dev-server: bin/webpack-dev-server.js
- checksum: 4e1b13dc170b9964e579e5703dd56e97c2fbb6b101586cfda56f58f1ea0327ea9fcb9e4f36ff6264ee02ab69298697df87bd9617716d9c8379d2a6dc22bb103f
+ checksum: 349719d0487a5672f65a7427d54afc9f8ddc6b695042641ed9f468cb5a3c90866e16a236ecdb2ac62d2a922712f9c1296b8805b7ec0880f6a3f5c4280785f200
languageName: node
linkType: hard